|
From: <got...@us...> - 2008-12-25 15:59:51
|
Revision: 136
http://scstudio.svn.sourceforge.net/scstudio/?rev=136&view=rev
Author: gotthardp
Date: 2008-12-25 15:59:43 +0000 (Thu, 25 Dec 2008)
Log Message:
-----------
Updates to simplify automated msc.h structure generation.
- MscEvent->send_message replaced by CompleteMessage::glue_events()
- proprietary counted_ptr replaced by boost::intrusive_ptr
Modified Paths:
--------------
trunk/CMakeLists.txt
trunk/src/check/liveness/deadlock_checker.h
trunk/src/check/liveness/livelock_checker.cpp
trunk/src/check/liveness/livelock_checker.h
trunk/src/check/order/acyclic_checker.h
trunk/src/check/order/fifo_checker.h
trunk/src/check/pseudocode/refnode_finder.h
trunk/src/check/race/footprint.cpp
trunk/src/check/race/footprint.h
trunk/src/check/race/race_checker.cpp
trunk/src/data/checker.h
trunk/src/data/dfs_events_traverser.cpp
trunk/src/data/dfs_events_traverser.h
trunk/src/data/dfs_instance_events_traverser.cpp
trunk/src/data/dfs_instance_events_traverser.h
trunk/src/data/msc.cpp
trunk/src/data/msc.h
trunk/tests/acyclic_checker_test.cpp
trunk/tests/fifo_checker_test.cpp
trunk/tests/race_checker_test.cpp
Removed Paths:
-------------
trunk/src/data/counted_ptr.h
Modified: trunk/CMakeLists.txt
===================================================================
--- trunk/CMakeLists.txt 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/CMakeLists.txt 2008-12-25 15:59:43 UTC (rev 136)
@@ -8,6 +8,10 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
INCLUDE(${CMAKE_ROOT}/Modules/Dart.cmake)
+FIND_PACKAGE(Boost 1.31
+ COMPONENTS shared_ptr intrusive_ptr)
+INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
+
INCLUDE_DIRECTORIES(src)
IF (WIN32)
Modified: trunk/src/check/liveness/deadlock_checker.h
===================================================================
--- trunk/src/check/liveness/deadlock_checker.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/liveness/deadlock_checker.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -22,7 +22,6 @@
#include "data/checker.h"
#include "data/msc.h"
-#include "data/counted_ptr.h"
#include "data/dfs_hmsc_traverser.h"
#include "data/dfsb_hmsc_traverser.h"
#include "check/liveness/export.h"
@@ -30,7 +29,7 @@
class DeadlockChecker;
class DeadlockListener;
-typedef counted_ptr<DeadlockChecker> DeadlockCheckerPtr;
+typedef boost::shared_ptr<DeadlockChecker> DeadlockCheckerPtr;
class DeadlockException:public std::exception
{
@@ -149,7 +148,7 @@
static DeadlockCheckerPtr instance()
{
if(!m_instance.get())
- m_instance = new DeadlockChecker();
+ m_instance = DeadlockCheckerPtr(new DeadlockChecker());
return m_instance;
}
Modified: trunk/src/check/liveness/livelock_checker.cpp
===================================================================
--- trunk/src/check/liveness/livelock_checker.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/liveness/livelock_checker.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -115,7 +115,7 @@
LivelockCheckerPtr LivelockChecker::instance()
{
if(!m_instance.get())
- m_instance = new LivelockChecker();
+ m_instance = LivelockCheckerPtr(new LivelockChecker());
return m_instance;
}
Modified: trunk/src/check/liveness/livelock_checker.h
===================================================================
--- trunk/src/check/liveness/livelock_checker.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/liveness/livelock_checker.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -18,7 +18,6 @@
#include "data/checker.h"
#include "data/msc.h"
-#include "data/counted_ptr.h"
#include "data/dfs_hmsc_traverser.h"
#include "data/dfsb_hmsc_traverser.h"
#include "check/liveness/export.h"
@@ -34,7 +33,7 @@
// main class
class LivelockChecker;
-typedef counted_ptr<LivelockChecker> LivelockCheckerPtr;
+typedef boost::shared_ptr<LivelockChecker> LivelockCheckerPtr;
typedef InnerNode* InnerNodeP;
typedef std::stack<InnerNode*> InnerNodePStack;
Modified: trunk/src/check/order/acyclic_checker.h
===================================================================
--- trunk/src/check/order/acyclic_checker.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/order/acyclic_checker.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -23,7 +23,7 @@
class AcyclicChecker;
-typedef counted_ptr<AcyclicChecker> AcyclicCheckerPtr;
+typedef boost::shared_ptr<AcyclicChecker> AcyclicCheckerPtr;
class AcyclicCheckerListener:
public WhiteEventFoundListener,
@@ -103,7 +103,7 @@
static AcyclicCheckerPtr instance()
{
if(!m_instance.get())
- m_instance = new AcyclicChecker();
+ m_instance = AcyclicCheckerPtr(new AcyclicChecker());
return m_instance;
}
Modified: trunk/src/check/order/fifo_checker.h
===================================================================
--- trunk/src/check/order/fifo_checker.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/order/fifo_checker.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -30,7 +30,7 @@
class FifoChecker;
typedef std::stack<Event*> EventPStack;
-typedef counted_ptr<FifoChecker> FifoCheckerPtr;
+typedef boost::shared_ptr<FifoChecker> FifoCheckerPtr;
class SCORDER_EXPORT FifoChecker: public BMscChecker
{
@@ -74,20 +74,14 @@
*/
bool is_supported(ChannelMapperPtr chm)
{
- try
- {
- SRChannelMapperPtr p = chm;
+ SRChannelMapperPtr p1 = boost::dynamic_pointer_cast<SRChannelMapper>(chm);
+ if(p1 != NULL)
return true;
- }
- catch(std::bad_cast)
- {
- try
- {
- SRLChannelMapperPtr p = chm;
- return true;
- }
- catch(std::bad_cast){}
- }
+
+ SRLChannelMapperPtr p2 = boost::dynamic_pointer_cast<SRLChannelMapper>(chm);
+ if(p2 != NULL)
+ return true;
+
return false;
}
@@ -104,7 +98,7 @@
static FifoCheckerPtr instance()
{
if(!m_instance.get())
- m_instance = new FifoChecker();
+ m_instance = FifoCheckerPtr(new FifoChecker());
return m_instance;
}
Modified: trunk/src/check/pseudocode/refnode_finder.h
===================================================================
--- trunk/src/check/pseudocode/refnode_finder.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/pseudocode/refnode_finder.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -24,7 +24,7 @@
#include "check/pseudocode/export.h"
typedef std::list<HMscNode*> HMscNodePList;
-typedef counted_ptr<HMscNodePList> HMscNodePListPtr;
+typedef boost::shared_ptr<HMscNodePList> HMscNodePListPtr;
class ReferenceNodeFinderListener:
public WhiteNodeFoundListener,public GrayNodeFoundListener
Modified: trunk/src/check/race/footprint.cpp
===================================================================
--- trunk/src/check/race/footprint.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/race/footprint.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -167,7 +167,7 @@
EDInstancesPtrSet::const_iterator previous_edi;
for(previous_edi=previous_events[i].begin();previous_edi!=previous_events[i].end();previous_edi++)
{
- EDInstancesPtr new_edi = new EventDependentInstances(**previous_edi);
+ EDInstancesPtr new_edi(new EventDependentInstances(**previous_edi));
const BoolVector& previous_edi_instances = (*previous_edi)->get_instances();
for(size_t j=0;j<instances_count;j++)
{
Modified: trunk/src/check/race/footprint.h
===================================================================
--- trunk/src/check/race/footprint.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/race/footprint.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -23,6 +23,9 @@
#include <set>
#include <list>
+// see http://www.boost.org/doc/libs/1_37_0/libs/smart_ptr/shared_ptr.htm
+#include <boost/shared_ptr.hpp>
+
#include "data/msc.h"
@@ -30,8 +33,8 @@
class EventDependentInstances;
typedef std::vector<bool> BoolVector;
-typedef counted_ptr<EventDependentInstances> EDInstancesPtr;
-typedef counted_ptr<Footprint> FootprintPtr;
+typedef boost::shared_ptr<EventDependentInstances> EDInstancesPtr;
+typedef boost::shared_ptr<Footprint> FootprintPtr;
typedef std::list<MscElement*> MscElementPList;
class EDInstancesPtrComparator
Modified: trunk/src/check/race/race_checker.cpp
===================================================================
--- trunk/src/check/race/race_checker.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/check/race/race_checker.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -91,8 +91,8 @@
m_modified_bmscs.push_back(b.get());
for(e=minimal_events.begin();e!=minimal_events.end();e++)
{
- EDInstancesPtr e_instances =
- new EventDependentInstances(*e,m_instance_marker->get_count());
+ EDInstancesPtr e_instances(
+ new EventDependentInstances(*e,m_instance_marker->get_count()));
size_t e_index = m_vis_initiator->get_topology_index(*e);
EventPList::const_iterator f;
for(f=minimal_events.begin();f!=minimal_events.end();f++)
@@ -166,10 +166,10 @@
EventPListPtr events = DFSEventsTraverser::topology_order(b);
for(e=maximal_events.begin();e!=maximal_events.end();e++)
{
- EDInstancesPtr e_instances_greater =
- new EventDependentInstances(*e,m_instance_marker->get_count());
- EDInstancesPtr e_instances_less =
- new EventDependentInstances(*e,m_instance_marker->get_count());
+ EDInstancesPtr e_instances_greater(
+ new EventDependentInstances(*e,m_instance_marker->get_count()));
+ EDInstancesPtr e_instances_less(
+ new EventDependentInstances(*e,m_instance_marker->get_count()));
size_t e_index = m_vis_initiator->get_topology_index(*e);
const BoolVector& e_closure = m_caus_initiator->get_causal_closure(*e);
EventPList::const_iterator f;
@@ -270,7 +270,6 @@
t->begin(),
t->end()
);
- t.release();
m_visual_initiator.initialize(topology);
m_causal_initiator.initialize(topology,m_visual_initiator,mapper);
BMscPtr result;
@@ -405,7 +404,7 @@
m_min = min;
m_max = max;
m_mapper = mapper;
- FootprintPtr initial = new Footprint(hmsc->get_start().get(),instances_count);
+ FootprintPtr initial(new Footprint(hmsc->get_start().get(),instances_count));
todo.insert(initial);
add_white_node_found_listener(this);
}
@@ -443,10 +442,10 @@
void FootprintTraverser::on_white_node_found(ReferenceNode* node)
{
check_race(node->get_bmsc().get());
- FootprintPtr f = new Footprint(
+ FootprintPtr f(new Footprint(
m_footprint,this->get_reached_elements().back(),
m_max->get_events_less(node->get_bmsc().get()),
- m_max->get_events_greater(node->get_bmsc().get()));
+ m_max->get_events_greater(node->get_bmsc().get())));
if(todo.find(f)==todo.end() && done.find(f)==done.end())
{
todo.insert(f);
Modified: trunk/src/data/checker.h
===================================================================
--- trunk/src/data/checker.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/checker.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -22,18 +22,19 @@
#include <exception>
#include <map>
+#include <boost/shared_ptr.hpp>
+
#include "data/msc.h"
-#include "data/counted_ptr.h"
class ChannelMapper;
class Checker;
class HMscChecker;
class BMscChecker;
-typedef counted_ptr<ChannelMapper> ChannelMapperPtr;
-typedef counted_ptr<Checker> CheckerPtr;
-typedef counted_ptr<HMscChecker> HMscCheckerPtr;
-typedef counted_ptr<BMscChecker> BMscCheckerPtr;
+typedef boost::shared_ptr<ChannelMapper> ChannelMapperPtr;
+typedef boost::shared_ptr<Checker> CheckerPtr;
+typedef boost::shared_ptr<HMscChecker> HMscCheckerPtr;
+typedef boost::shared_ptr<BMscChecker> BMscCheckerPtr;
/**
* Basic abstract class for all checking algorithms.
@@ -181,7 +182,7 @@
/**
* Common instance of GeneralMapper.
*/
- static counted_ptr<GeneralMapper<MessagePart> > m_instance;
+ static boost::shared_ptr<GeneralMapper<MessagePart> > m_instance;
/**
* Holds identificators of channels represented by MessagePart of MscMessage.
@@ -222,11 +223,11 @@
/**
* Returns common instance of ChannelMapper
*/
- static counted_ptr<GeneralMapper<MessagePart> > instance()
+ static boost::shared_ptr<GeneralMapper<MessagePart> > instance()
{
if(m_instance.get()==NULL)
{
- counted_ptr<GeneralMapper<MessagePart> > p(new GeneralMapper<MessagePart>());
+ boost::shared_ptr<GeneralMapper<MessagePart> > p(new GeneralMapper<MessagePart>());
m_instance = p;
}
return m_instance;
@@ -351,11 +352,11 @@
typedef GeneralMapper<SRMessagePart> SRChannelMapper;
typedef GeneralMapper<SRLMessagePart> SRLChannelMapper;
-typedef counted_ptr<SRChannelMapper> SRChannelMapperPtr;
-typedef counted_ptr<SRLChannelMapper> SRLChannelMapperPtr;
+typedef boost::shared_ptr<SRChannelMapper> SRChannelMapperPtr;
+typedef boost::shared_ptr<SRLChannelMapper> SRLChannelMapperPtr;
template <class T>
-counted_ptr<GeneralMapper<T> > GeneralMapper<T>::m_instance;
+boost::shared_ptr<GeneralMapper<T> > GeneralMapper<T>::m_instance;
enum Color
{
Deleted: trunk/src/data/counted_ptr.h
===================================================================
--- trunk/src/data/counted_ptr.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/counted_ptr.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -1,246 +0,0 @@
-/*
- * counted_ptr - Smart pointer with reference counting
- * http://scstudio.sourceforge.net
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * Copyright (c) 2008 Petr Gotthard <pet...@ce...>
- *
- * $Id$
- */
-
-#ifndef COUNTED_PTR_H
-#define COUNTED_PTR_H
-
-#include <stdlib.h>
-#include <stdexcept>
-
-//! Smart pointer with reference counting.
-/*!
- * The smart pointer can be used like a normal pointer. It keeps track of
- * the number of references to the object. When the counter becomes zero,
- * the object is automatically destroyed.
- *
- * For example:
- * \code
- * counted_ptr<int> var1 = new int();
- * *var1 = 0;
- * \endcode
- *
- * \warning Never call delete[] to objects pointed by smart pointers!
- */
-template<class type>
-class counted_ptr
-{
-public:
- counted_ptr()
- {
- m_pointer = NULL;
- // when m_pointer == NULL, m_counter is undefined
- }
-
- //! Copy constructor.
- counted_ptr(const counted_ptr<type>& object)
- {
- m_pointer = object.m_pointer;
- m_counter = object.m_counter;
-
- // increase the number of references
- if (m_pointer != NULL) acquire();
- }
-
- template<class rtype>
- counted_ptr(const counted_ptr<rtype>& object)
- {
- m_pointer = dynamic_cast<type*>(object.m_pointer);
- if (object.m_pointer != NULL && m_pointer == NULL)
- throw std::bad_cast();
-
- m_counter = object.m_counter;
-
- // increase the number of references
- if (m_pointer != NULL) acquire();
- }
-
- template<class rtype>
- counted_ptr(rtype* object)
- {
- m_pointer = dynamic_cast< type* >(object);
- if (object != NULL && m_pointer == NULL)
- throw std::bad_cast();
-
- m_counter = NULL;
-
- // increase the number of references
- if (m_pointer != NULL) acquire();
- }
-
- virtual ~counted_ptr()
- {
- // decrease the number of references
- if (m_pointer != NULL) release();
- }
-
- // Assignment operator.
- counted_ptr<type>& operator=(const counted_ptr<type>& object)
- {
- // check if the pointer is already assigned
- if (m_pointer == object.m_pointer)
- return *this;
-
- // decrease the number of references
- if (m_pointer != NULL) release();
-
- // assignment
- m_pointer = object.m_pointer;
- m_counter = object.m_counter;
-
- // increase number of references
- if (m_pointer != NULL) acquire();
-
- return *this;
- }
-
- template<class rtype>
- counted_ptr<type>& operator=(const counted_ptr<rtype>& object)
- {
- // check if the pointer is already assigned
- if (m_pointer == object.m_pointer)
- return *this;
-
- // decrease the number of references
- if (m_pointer != NULL) release();
-
- // assignment
- m_pointer = dynamic_cast<type*>(object.m_pointer);
- if (object.m_pointer != NULL && m_pointer == NULL)
- throw std::bad_cast();
-
- m_counter = object.m_counter;
-
- // increase number of references
- if (m_pointer != NULL) acquire();
-
- return *this;
- }
-
- template<class rtype>
- counted_ptr<type>& operator=(rtype* object)
- {
- // check if the pointer is already assigned
- if (m_pointer == object)
- return *this;
-
- // decrease the number of references
- if (m_pointer != NULL) release();
-
- // assignment
- m_pointer = dynamic_cast<type*>(object);
- if (object != NULL && m_pointer == NULL)
- throw std::bad_cast();
-
- m_counter = NULL;
-
- // increase number of references
- if (m_pointer != NULL) acquire();
-
- return *this;
- }
-
- type& operator*() const
- {
- return *m_pointer;
- }
-
- type* operator->() const
- {
- return m_pointer;
- }
-
- type* get() const
- {
- return m_pointer;
- }
-
- bool operator!() const
- {
- return !m_pointer;
- }
-
- template<class rtype>
- int operator==(const counted_ptr<rtype>& right) const
- {
- return (m_pointer == right.m_pointer);
- }
-
- int operator==(const void* right) const
- {
- return (m_pointer == right);
- }
-
- template<class rtype>
- int operator!=(const counted_ptr<rtype>& right) const
- {
- return (m_pointer != right.m_pointer);
- }
-
- int operator!=(const void* right) const
- {
- return (m_pointer != right);
- }
-
- size_t acquire()
- {
- if (m_counter == NULL)
- return *(m_counter = new size_t(1));
- else
- // increase the number of references
- return ++(*m_counter);
- }
-
- size_t release()
- {
- size_t count = 0;
- // decrease the number of references
- if (m_counter != NULL)
- count = --(*m_counter);
-
- // if there is no other reference, delete the object
- if (count <= 0)
- {
- delete m_pointer;
- m_pointer = NULL;
-
- if (m_counter != NULL)
- delete m_counter;
- }
-
- return count;
- }
-
- template<class rtype>
- bool operator<(const counted_ptr<rtype>& right) const
- {
- return (m_pointer < right.m_pointer);
- }
-
-private:
- template<class rtype>
- friend class counted_ptr;
-
- //! Pointer to the guarded object.
- type *m_pointer;
- //! Number of references to this object.
- size_t *m_counter;
-};
-
-#endif // COUNTED_PTR_H
-
-// $Id$
Modified: trunk/src/data/dfs_events_traverser.cpp
===================================================================
--- trunk/src/data/dfs_events_traverser.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/dfs_events_traverser.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -184,7 +184,7 @@
EventPListPtr DFSEventsTraverser::topology_order(BMscPtr b)
{
- EventPListPtr topology = new EventPList;
+ EventPListPtr topology(new EventPList);
DFSEventsTraverser traverser;
TopologyOrderListener listener(topology.get());
traverser.add_event_finished_listener(&listener);
Modified: trunk/src/data/dfs_events_traverser.h
===================================================================
--- trunk/src/data/dfs_events_traverser.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/dfs_events_traverser.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -23,7 +23,7 @@
#include "data/checker.h"
typedef std::list<Event*> EventPList;
-typedef counted_ptr<EventPList> EventPListPtr;
+typedef boost::shared_ptr<EventPList> EventPListPtr;
typedef std::list<MscElement*> MscElementPList;
/**
Modified: trunk/src/data/dfs_instance_events_traverser.cpp
===================================================================
--- trunk/src/data/dfs_instance_events_traverser.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/dfs_instance_events_traverser.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -69,7 +69,7 @@
EventPListPtr DFSInstanceEventsTraverser::topology_order(Instance* i)
{
- EventPListPtr topology = new EventPList;
+ EventPListPtr topology(new EventPList);
DFSInstanceEventsTraverser traverser;
TopologyOrderListener listener(topology.get());
traverser.add_event_finished_listener(&listener);
Modified: trunk/src/data/dfs_instance_events_traverser.h
===================================================================
--- trunk/src/data/dfs_instance_events_traverser.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/dfs_instance_events_traverser.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -21,7 +21,7 @@
#include "data/dfs_events_traverser.h"
-typedef counted_ptr<EventPList> EventPListPtr;
+typedef boost::shared_ptr<EventPList> EventPListPtr;
/**
* Processes only Instances' Events during depth first search.
Modified: trunk/src/data/msc.cpp
===================================================================
--- trunk/src/data/msc.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/msc.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -175,11 +175,41 @@
return m_send_event->get_instance();
}
+void CompleteMessage::glue_send_event(const EventPtr& send_event)
+{
+ if(send_event.get() != m_send_event)
+ {
+ // unglue, if already glued
+ if(m_send_event != NULL)
+ m_send_event->set_message(NULL);
+
+ if(send_event != NULL)
+ send_event->set_message(this);
+
+ m_send_event = send_event.get();
+ }
+}
+
Instance* CompleteMessage::get_receiver() const
{
return m_receive_event->get_instance();
}
+void CompleteMessage::glue_receive_event(const EventPtr& receive_event)
+{
+ if(receive_event != m_receive_event)
+ {
+ // unglue, if already glued
+ if(m_receive_event != NULL)
+ m_receive_event->set_message(NULL);
+
+ if(receive_event != NULL)
+ receive_event->set_message(this);
+
+ m_receive_event = receive_event.get();
+ }
+}
+
CompleteMessage::CompleteMessage(Event* sender, Event* receiver, MscMessage* original):
MscMessage(original),m_send_event(sender),m_receive_event(receiver)
{
@@ -252,4 +282,9 @@
m_type = original->get_type();
}
+void IncompleteMessage::glue_event(EventPtr& event)
+{
+ event->set_message(this);
+}
+
// $Id$
Modified: trunk/src/data/msc.h
===================================================================
--- trunk/src/data/msc.h 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/src/data/msc.h 2008-12-25 15:59:43 UTC (rev 136)
@@ -26,7 +26,10 @@
#include <typeinfo>
#include <queue>
-#include "data/counted_ptr.h"
+// we use boost::intrusive_ptr as we need to construct the xx_ptr<T> from T*
+// see http://www.boost.org/doc/libs/1_37_0/libs/smart_ptr/smart_ptr.htm
+#include <boost/intrusive_ptr.hpp>
+
#include "data/msc_visual.h"
#include "data/export.h"
@@ -50,59 +53,58 @@
class SuccessorNode;
class PredecessorNode;
-typedef counted_ptr<MscElement> MscElementPtr;
+typedef boost::intrusive_ptr<MscElement> MscElementPtr;
-typedef counted_ptr<Msc> MscPtr;
+typedef boost::intrusive_ptr<Msc> MscPtr;
-typedef counted_ptr<BMsc> BMscPtr;
+typedef boost::intrusive_ptr<BMsc> BMscPtr;
-typedef counted_ptr<HMsc> HMscPtr;
+typedef boost::intrusive_ptr<HMsc> HMscPtr;
-typedef counted_ptr<HMscNode> HMscNodePtr;
+typedef boost::intrusive_ptr<HMscNode> HMscNodePtr;
typedef std::set<HMscNodePtr> HMscNodePtrSet;
-typedef counted_ptr<ReferenceNode> ReferenceNodePtr;
+typedef boost::intrusive_ptr<ReferenceNode> ReferenceNodePtr;
typedef std::list<ReferenceNodePtr> ReferenceNodePtrList;
typedef std::set<InnerNode*> InnerNodePSet;
typedef std::set<ReferenceNode*> ReferenceNodePSet;
typedef std::queue<InnerNode*> InnerNodePQueue;
-typedef counted_ptr<StartNode> StartNodePtr;
+typedef boost::intrusive_ptr<StartNode> StartNodePtr;
-typedef counted_ptr<EndNode> EndNodePtr;
+typedef boost::intrusive_ptr<EndNode> EndNodePtr;
-typedef counted_ptr<Instance> InstancePtr;
+typedef boost::intrusive_ptr<Instance> InstancePtr;
typedef std::list<InstancePtr> InstancePtrList;
-typedef counted_ptr<Event> EventPtr;
+typedef boost::intrusive_ptr<Event> EventPtr;
typedef std::list<EventPtr> EventPtrList;
-typedef counted_ptr<StrictEvent> StrictEventPtr;
+typedef boost::intrusive_ptr<StrictEvent> StrictEventPtr;
typedef std::list<StrictEventPtr> StrictEventPtrList;
-typedef counted_ptr<CoregionEvent> CoregionEventPtr;
+typedef boost::intrusive_ptr<CoregionEvent> CoregionEventPtr;
typedef std::list<CoregionEventPtr> CoregionEventPtrList;
typedef std::set<CoregionEventPtr> CoregionEventPtrSet;
typedef std::set<CoregionEvent*> CoregionEventPSet;
typedef std::list<CoregionEvent*> CoregionEventPList;
typedef std::queue<CoregionEvent*> CoregionEventPQueue;
-typedef counted_ptr<MscMessage> MscMessagePtr;
+typedef boost::intrusive_ptr<MscMessage> MscMessagePtr;
-typedef counted_ptr<EventArea> EventAreaPtr;
+typedef boost::intrusive_ptr<EventArea> EventAreaPtr;
typedef std::list<EventAreaPtr> EventAreaPtrList;
-typedef counted_ptr<StrictOrderArea> StrictOrderAreaPtr;
+typedef boost::intrusive_ptr<StrictOrderArea> StrictOrderAreaPtr;
-typedef counted_ptr<CoregionArea> CoregionAreaPtr;
+typedef boost::intrusive_ptr<CoregionArea> CoregionAreaPtr;
typedef void* AttributeP;
typedef std::map<std::string,AttributeP> AttributePMap;
typedef std::set<HMscNodePtr> HMscNodePtrSet;
-
/**
* \brief Common basic abstract class for all elements of MSC
*/
@@ -129,6 +131,7 @@
MscElement(bool marked=false)
{
m_marked = marked;
+ m_counter = 0;
}
public:
@@ -264,8 +267,31 @@
{
}
+
+private:
+ //! Number of references to this object.
+ size_t m_counter;
+
+ // see http://www.boost.org/doc/libs/1_37_0/libs/smart_ptr/intrusive_ptr.html
+ friend void intrusive_ptr_add_ref(MscElement *ptr);
+ friend void intrusive_ptr_release(MscElement *ptr);
};
+inline void intrusive_ptr_add_ref(MscElement *ptr)
+{
+ if(ptr != NULL)
+ ++ptr->m_counter;
+}
+
+inline void intrusive_ptr_release(MscElement *ptr)
+{
+ if(ptr != NULL)
+ {
+ if(--ptr->m_counter <= 0)
+ delete ptr;
+ }
+}
+
template <class T>
class /*SCMSC_EXPORT*/ MscElementTmpl : public MscElement
{
@@ -506,7 +532,7 @@
};
-typedef counted_ptr<NodeRelation> NodeRelationPtr;
+typedef boost::intrusive_ptr<NodeRelation> NodeRelationPtr;
typedef std::set<NodeRelationPtr> NodeRelationPtrSet;
class SCMSC_EXPORT SuccessorNode
@@ -765,14 +791,7 @@
*/
HMscPtr get_hmsc()
{
- HMscPtr p;
- try
- {
- p = m_msc;
- return p;
- }
- catch(std::bad_cast){}
- return p;
+ return boost::dynamic_pointer_cast<HMsc>(m_msc);
}
/**
@@ -782,14 +801,7 @@
*/
BMscPtr get_bmsc()
{
- BMscPtr p;
- try
- {
- p = m_msc;
- return p;
- }
- catch(std::bad_cast){}
- return p;
+ return boost::dynamic_pointer_cast<BMsc>(m_msc);
}
};
@@ -858,7 +870,7 @@
/**
* BMsc whic this instance belongs to
*
- * @warning counted_ptr mustn't be used because of possible cyclic dependency
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
*/
BMsc* m_bmsc;
@@ -985,26 +997,24 @@
/**
* Sender of message.
*
- * @warning counted_ptr mustn't be used because of possible cyclic dependency
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
*/
Event* m_send_event;
/**
* Receiver of message.
*
- * @warning counted_ptr mustn't be used because of possible cyclic dependency
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
*/
Event* m_receive_event;
public:
/**
- * @param sender - sending event
- * @param receiver - receiving event
* @param label - label of message
*/
- CompleteMessage(Event* sender, Event* receiver, const std::string& label=""):
- MscMessage(label),m_send_event(sender),m_receive_event(receiver)
+ CompleteMessage(const std::string& label=""):
+ MscMessage(label),m_send_event(NULL),m_receive_event(NULL)
{
}
@@ -1016,7 +1026,7 @@
Instance* get_sender() const;
/**
- * Getter for m_sender.
+ * Getter for m_send_event.
*/
Event* get_send_event() const
{
@@ -1024,12 +1034,10 @@
}
/**
- * Setter for m_sender
+ * Connects to a given send event and re-configures its back-pointers.
+ * To un-glue, use NULL as the parameter.
*/
- void set_send_event(Event* sender)
- {
- m_send_event = sender;
- }
+ void glue_send_event(const EventPtr& send_event);
/**
* Retrieves instance of m_receive_event
@@ -1037,7 +1045,7 @@
Instance* get_receiver() const;
/**
- * Getter for m_receiver.
+ * Getter for m_receive_event.
*/
Event* get_receive_event() const
{
@@ -1045,15 +1053,24 @@
}
/**
- * Getter for m_receiver.
+ * Connects to a given receive event and re-configures its back-pointers.
+ * To un-glue, use NULL as the parameter.
*/
- void set_receive_event(Event* receiver)
+ void glue_receive_event(const EventPtr& receive_event);
+
+ /**
+ * Connects to given send and receive events.
+ * Does a sequential execution of glue_send_event() and glue_receive_event().
+ */
+ void glue_events(const EventPtr& send_event, const EventPtr& receive_event)
{
- m_receive_event = receiver;
+ glue_send_event(send_event);
+ glue_receive_event(receive_event);
}
+
};
-typedef counted_ptr<CompleteMessage> CompleteMessagePtr;
+typedef boost::intrusive_ptr<CompleteMessage> CompleteMessagePtr;
typedef enum
{
@@ -1107,9 +1124,11 @@
{
return m_type==FOUND;
}
+
+ void glue_event(EventPtr& event);
};
-typedef counted_ptr<IncompleteMessage> IncompleteMessagePtr;
+typedef boost::intrusive_ptr<IncompleteMessage> IncompleteMessagePtr;
/**
* \brief Event which occurs in EventArea.
@@ -1148,21 +1167,9 @@
virtual ~Event()
{
- if(is_matched())
- {
- CompleteMessage* complete = get_complete();
- if(is_send())
- {
- complete->set_send_event(NULL);
- }
- else
- {
- complete->set_receive_event(NULL);
- }
- }
}
- void set_message(MscMessagePtr& message)
+ void set_message(const MscMessagePtr& message)
{
m_message = message;
}
@@ -1181,15 +1188,7 @@
*/
CompleteMessagePtr get_complete_message()
{
- try
- {
- CompleteMessagePtr complete = m_message;
- return complete;
- }
- catch(std::bad_cast bc)
- {
- return CompleteMessagePtr();
- }
+ return boost::dynamic_pointer_cast<CompleteMessage>(m_message);
}
/**
@@ -1198,15 +1197,7 @@
*/
IncompleteMessagePtr get_incomplete_message()
{
- try
- {
- IncompleteMessagePtr incomplete = m_message;
- return incomplete;
- }
- catch(std::bad_cast bc)
- {
- return IncompleteMessagePtr();
- }
+ return boost::dynamic_pointer_cast<IncompleteMessage>(m_message);
}
/**
@@ -1307,34 +1298,6 @@
}
}
}
-
- CompleteMessagePtr send_message(
- Event* receive_event, const std::string& message_label="")
- {
- if(!receive_event) return CompleteMessagePtr();
- MscMessagePtr message(new CompleteMessage(this,receive_event,message_label));
- set_message(message);
- receive_event->set_message(message);
- return message;
- }
-
- IncompleteMessagePtr lose_message(
- const std::string& message_label="", const std::string& instance_label="")
- {
- MscMessagePtr message(
- new IncompleteMessage(LOST,message_label,instance_label));
- set_message(message);
- return message;
- }
-
- IncompleteMessagePtr find_message(
- const std::string& message_label="", const std::string& instance_label="")
- {
- MscMessagePtr message(
- new IncompleteMessage(FOUND,message_label,instance_label));
- set_message(message);
- return message;
- }
};
@@ -1347,7 +1310,7 @@
/**
* EventArea which this Event occures in.
*
- * @warning counted_ptr mustn't be used because of possible cyclic dependency
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
*/
TArea* m_area;
@@ -1402,7 +1365,7 @@
/**
* Predecessor of this Event
*
- * @warning counted_ptr mustn't be used because of possible cyclic dependency
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
*/
StrictEvent* m_predecessor;
@@ -1506,7 +1469,7 @@
}
};
-typedef counted_ptr<CoregionEventRelation> CoregEventRelPtr;
+typedef boost::intrusive_ptr<CoregionEventRelation> CoregEventRelPtr;
typedef std::set<CoregEventRelPtr> CoregEventRelPtrSet;
@@ -1613,7 +1576,7 @@
/**
* Previous EventArea
*
- * @warning counted_ptr mustn't be used because of possible cyclic dependency
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
*/
EventArea* m_previous;
@@ -1622,7 +1585,7 @@
/**
* Instance which EventArea occures on
*
- * @warning counted_ptr mustn't be used because of possible cyclic dependency
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
*/
Instance* m_instance;
Modified: trunk/tests/acyclic_checker_test.cpp
===================================================================
--- trunk/tests/acyclic_checker_test.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/tests/acyclic_checker_test.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -91,8 +91,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e1->send_message(e3.get(),"a");
- e4->send_message(e2.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e4, e2);
return check(myBmsc,true,true);
}
@@ -124,10 +126,12 @@
EventPtr e2 = a1->add_event();
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
+
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e4, e1);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e2, e3);
- e4->send_message(e1.get(),"a");
- e2->send_message(e3.get(),"a");
-
return check(myBmsc,false,false);
}
Modified: trunk/tests/fifo_checker_test.cpp
===================================================================
--- trunk/tests/fifo_checker_test.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/tests/fifo_checker_test.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -133,8 +133,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e1->send_message(e3.get(),"a");
- e4->send_message(e2.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e4, e2);
return check(myBmsc,true,true);
}
@@ -164,8 +166,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e2, e4);
return check(myBmsc,true,true);
}
@@ -198,8 +202,10 @@
EventPtr e3 = s2->add_event();
EventPtr e4 = s2->add_event();
- e1->send_message(e4.get(),"a");
- e2->send_message(e3.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e4);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e2, e3);
return check(myBmsc,false,false);
}
@@ -233,8 +239,10 @@
EventPtr e3 = ca2->add_event();
EventPtr e4 = ca2->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e2, e4);
return check(myBmsc,false,false);
}
@@ -268,8 +276,10 @@
EventPtr e3 = s->add_event();
EventPtr e4 = s->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e2, e4);
return check(myBmsc,false,false);
}
@@ -303,8 +313,10 @@
EventPtr e3 = soa1->add_event();
EventPtr e4 = soa1->add_event();
- e3->send_message(e1.get(),"a");
- e4->send_message(e2.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e3, e1);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e4, e2);
return check(myBmsc,false,false);
}
@@ -338,8 +350,10 @@
EventPtr e3 = soa1->add_event();
EventPtr e4 = soa1->add_event();
- e3->send_message(e1.get(),"a");
- e2->send_message(e4.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e3, e1);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e2, e4);
return check(myBmsc,true,true);
}
@@ -369,8 +383,10 @@
EventPtr e3 = s2->add_event();
EventPtr e4 = s2->add_event();
- e1->send_message(e3.get(),"b");
- e4->send_message(e2.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("b");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("a");
+ m2->glue_events(e4, e2);
return check(myBmsc,true,true);
}
@@ -400,8 +416,10 @@
EventPtr e3 = s2->add_event();
EventPtr e4 = s2->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"b");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e2, e4);
return check(myBmsc,true,true);
}
@@ -434,8 +452,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e2->send_message(e3.get(),"a");
- e1->send_message(e4.get(),"b");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e2, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e1, e4);
return check(myBmsc,false,true);
}
@@ -469,8 +489,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"b");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e2, e4);
return check(myBmsc,false,true);
}
@@ -504,8 +526,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"b");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e2, e4);
return check(myBmsc,false,true);
}
@@ -540,8 +564,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e3->send_message(e1.get(),"a");
- e4->send_message(e2.get(),"b");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e3, e1);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e4, e2);
return check(myBmsc,false,true);
}
@@ -575,8 +601,10 @@
EventPtr e3 = a2->add_event();
EventPtr e4 = a2->add_event();
- e3->send_message(e1.get(),"a");
- e2->send_message(e4.get(),"b");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e3, e1);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e2, e4);
return check(myBmsc,true,true);
}
@@ -614,9 +642,12 @@
EventPtr e5 = a1->add_event();
EventPtr e6 = a2->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"b");
- e5->send_message(e6.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e2, e4);
+ CompleteMessagePtr m3 = new CompleteMessage("a");
+ m3->glue_events(e5, e6);
return check(myBmsc,false,false);
}
@@ -654,9 +685,12 @@
EventPtr e5 = a1->add_event();
EventPtr e6 = a2->add_event();
- e1->send_message(e3.get(),"a");
- e2->send_message(e4.get(),"b");
- e5->send_message(e6.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e3);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e2, e4);
+ CompleteMessagePtr m3 = new CompleteMessage("a");
+ m3->glue_events(e5, e6);
return check(myBmsc,false,false);
}
@@ -694,9 +728,12 @@
EventPtr e5 = a1->add_event();
EventPtr e6 = a2->add_event();
- e3->send_message(e1.get(),"a");
- e4->send_message(e2.get(),"b");
- e6->send_message(e5.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e3, e1);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e4, e2);
+ CompleteMessagePtr m3 = new CompleteMessage("a");
+ m3->glue_events(e6, e5);
return check(myBmsc,false,false);
}
Modified: trunk/tests/race_checker_test.cpp
===================================================================
--- trunk/tests/race_checker_test.cpp 2008-12-20 21:09:16 UTC (rev 135)
+++ trunk/tests/race_checker_test.cpp 2008-12-25 15:59:43 UTC (rev 136)
@@ -80,7 +80,8 @@
instance2->add_area(strict2);
EventPtr e1 = strict1->add_event();
EventPtr e2 = strict2->add_event();
- e1->send_message(e2.get(),"hi");
+ CompleteMessagePtr m1 = new CompleteMessage("hi");
+ m1->glue_events(e1, e2);
HMscPtr hmsc1(new HMsc("HMsc1"));
ReferenceNodePtr r1_1(new ReferenceNode());
@@ -143,8 +144,10 @@
EventPtr e2_1 = strict2->add_event();
EventPtr e2_2 = strict2->add_event();
EventPtr e3 = strict3->add_event();
- e1->send_message(e2_1.get(),"hi");
- e3->send_message(e2_2.get(),"hi");
+ CompleteMessagePtr m1 = new CompleteMessage("hi");
+ m1->glue_events(e1, e2_1);
+ CompleteMessagePtr m2 = new CompleteMessage("hi");
+ m2->glue_events(e3, e2_2);
HMscPtr hmsc1(new HMsc("HMsc"));
ReferenceNodePtr r1(new ReferenceNode());
@@ -175,8 +178,10 @@
EventPtr e1_2 = strict1->add_event();
EventPtr e2_1 = strict2->add_event();
EventPtr e2_2 = strict2->add_event();
- e1_1->send_message(e2_1.get(),"a");
- e1_2->send_message(e2_2.get(),"b");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1_1, e2_1);
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e1_2, e2_2);
HMscPtr hmsc1(new HMsc("HMsc"));
ReferenceNodePtr r1(new ReferenceNode());
@@ -205,7 +210,8 @@
instance1_2->add_area(strict1_2);
EventPtr e1 = strict1_1->add_event();
EventPtr e2 = strict1_2->add_event();
- e1->send_message(e2.get(),"a");
+ CompleteMessagePtr m1 = new CompleteMessage("a");
+ m1->glue_events(e1, e2);
BMscPtr bmsc2(new BMsc("BMsc"));
InstancePtr instance2_1(new Instance("1"));
@@ -218,7 +224,8 @@
instance2_2->add_area(strict2_2);
EventPtr e3 = strict2_1->add_event();
EventPtr e4 = strict2_2->add_event();
- e3->send_message(e4.get(),"b");
+ CompleteMessagePtr m2 = new CompleteMessage("b");
+ m2->glue_events(e3, e4);
HMscPtr hmsc1(new HMsc("HMsc"));
ReferenceNodePtr r1(new ReferenceNode());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|