Update of /cvsroot/simspark/simspark/spark/zeitgeist In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv7790/spark/zeitgeist Modified Files: core.cpp core.h corecontext.h leaf.cpp leaf.h node.cpp node_c.cpp zeitgeist.cpp Added Files: zeitgeist.vcproj Log Message: Merged WIN32 branch back to main trunk (access previous version with tag pre_merge_WIN32) Index: leaf.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/leaf.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** leaf.h 5 Dec 2005 20:59:18 -0000 1.1 --- leaf.h 15 Mar 2007 07:26:31 -0000 1.2 *************** *** 38,42 **** #define ZEITGEIST_LEAF_H ! #include <list> #include <string> #include "object.h" --- 38,42 ---- #define ZEITGEIST_LEAF_H ! #include <set> #include <string> #include "object.h" *************** *** 55,59 **** --- 55,65 ---- // public: + template <typename _CLASS> + struct CachedPath : public Core::CachedPath<_CLASS> + { + }; + typedef std::list< boost::shared_ptr<Leaf> > TLeafList; + typedef std::set<Core::CachedLeafPath*> TCachedPathSet; // *************** *** 229,234 **** virtual void Dump() const; /** update variables from a script */ ! virtual void UpdateCached() {} /** constructs the full path of this node by walking up the --- 235,246 ---- virtual void Dump() const; + /** update and register a path reference */ + void RegisterCachedPath(Core::CachedLeafPath& path, const std::string& pathStr); + + /** register a path reference */ + void Leaf::RegisterCachedPath(Core::CachedLeafPath& path); + /** update variables from a script */ ! virtual void UpdateCached(); /** constructs the full path of this node by walking up the *************** *** 239,243 **** /** clears any cached data (e.g. the cached full path and forces the node to recalculate all values */ ! void ClearCachedData() const; /** sets the name of this node */ --- 251,255 ---- /** clears any cached data (e.g. the cached full path and forces the node to recalculate all values */ ! void ClearCachedData(); /** sets the name of this node */ *************** *** 290,294 **** which can hold children. We use a weak pointer to break the cyclic dependency. */ ! boost::weak_ptr<Node> mParent; private: --- 302,306 ---- which can hold children. We use a weak pointer to break the cyclic dependency. */ ! boost::weak_ptr<Node> mParent; private: *************** *** 298,301 **** --- 310,316 ---- /** temporary cached full path of this node in the hierarchy */ mutable std::string *mCachedFullPath; + + /** list of cached path references to other nodes */ + TCachedPathSet mCachedPaths; }; Index: node.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/node.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** node.cpp 5 Dec 2005 20:59:18 -0000 1.1 --- node.cpp 15 Mar 2007 07:26:31 -0000 1.2 *************** *** 199,217 **** Node::UnlinkChildren() { - string cname; - if (GetClass().get() != 0) - { - cname = GetClass()->GetName(); - } - while (! mChildren.empty()) { shared_ptr<Leaf> node = mChildren.front(); - - string className; - if (node->GetClass().get()!= 0) - { - className=node->GetClass()->GetName(); - } node->UnlinkChildren(); node->Unlink(); --- 199,205 ---- *************** *** 285,288 **** --- 273,278 ---- Node::UpdateCached() { + Leaf::UpdateCached(); + // update all Leaves found for (TLeafList::iterator iter = begin(); Index: core.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/core.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** core.cpp 10 Mar 2006 00:16:06 -0000 1.2 --- core.cpp 15 Mar 2007 07:26:31 -0000 1.3 *************** *** 35,43 **** #include <salt/path.h> #include <salt/sharedlibrary.h> - #include <execinfo.h> #include <signal.h> #include <iostream> #include <sstream> using namespace boost; using namespace salt; --- 35,50 ---- #include <salt/path.h> #include <salt/sharedlibrary.h> #include <signal.h> #include <iostream> #include <sstream> + #ifdef HAVE_CONFIG_H + #include <config.h> + #endif + + #ifdef HAVE_EXECINFO_H + #include <execinfo.h> + #endif + using namespace boost; using namespace salt; *************** *** 156,163 **** void Core::CatchSignal(int sig_num) { if (sig_num != SIGSEGV) ! { ! return; ! } cerr << "(Core) caught signal " << sig_num << endl; --- 163,171 ---- void Core::CatchSignal(int sig_num) { + #ifdef __linux__ if (sig_num != SIGSEGV) ! { ! return; ! } cerr << "(Core) caught signal " << sig_num << endl; *************** *** 201,204 **** --- 209,213 ---- cerr << "(Core) exit" << endl; exit(1); + #endif } *************** *** 267,272 **** bool Core::ImportBundle(const std::string& bundleName) { ! shared_ptr<SharedLibrary> bundle(new SharedLibrary()); if (!bundle->Open(bundleName)) { --- 276,287 ---- bool Core::ImportBundle(const std::string& bundleName) { ! TBundleMap::const_iterator iter = mBundles.find(bundleName); ! if (iter != mBundles.end()) ! { ! // already imported ! return true; ! } + shared_ptr<SharedLibrary> bundle(new SharedLibrary()); if (!bundle->Open(bundleName)) { *************** *** 293,297 **** while(!classes.empty()) { - //shared_ptr<Class> theClass(classes.back()); if (RegisterClassObject(classes.back(), "")) { --- 308,311 ---- *************** *** 303,309 **** } ! // we only add the bundle, if it contained a class which was registered if (usingClass) ! mBundles.push_back(bundle); return true; --- 317,324 ---- } ! // we only add the bundle, if it contained a class which was ! // registered if (usingClass) ! mBundles[bundleName] = bundle; return true; *************** *** 325,334 **** } ! boost::shared_ptr<Leaf> Core::GetInternal(const std::string &pathStr, ! const boost::shared_ptr<Leaf>& leaf) { ! // lookup the path in the internal cache ! CacheKey key(leaf, pathStr); ! TPathCache::iterator iter = mPathCache.find(key); if (iter != mPathCache.end()) --- 340,346 ---- } ! boost::weak_ptr<Leaf> Core::GetCachedInternal(const CacheKey& key) { ! // lookup the key in the internal cache TPathCache::iterator iter = mPathCache.find(key); if (iter != mPathCache.end()) *************** *** 337,341 **** if (! entry.expired()) { ! return entry.lock(); } --- 349,353 ---- if (! entry.expired()) { ! return entry; } *************** *** 344,360 **** } // walk the hierarchy ! Path path(pathStr); ! boost::shared_ptr<Leaf> current; if ( (path.IsAbsolute()) || ! (leaf.get() == NULL) ) { ! current= mRoot; } else { ! current = leaf; } --- 356,390 ---- } + return shared_ptr<Leaf>(); + } + + void Core::PutCachedInternal(const CacheKey& key, const boost::weak_ptr<Leaf>& leaf) + { + // update cache; note that we can't cache the fact, that a node is + // not present as it may be created later on + + if (leaf.expired()) + { + return; + } + + mPathCache[key] = leaf; + } + + boost::shared_ptr<Leaf> Core::GetUncachedInternal(const CacheKey& key) + { // walk the hierarchy ! shared_ptr<Leaf> current; ! Path path(key.path); if ( (path.IsAbsolute()) || ! (key.root.expired()) ) { ! current = mRoot; } else { ! current = key.root.lock(); } *************** *** 369,380 **** } ! // update cache; note that we can't cache the fact, that a node is ! // not present as it may be created later on ! if (current.get() != 0) { ! mPathCache[key] = current; } ! return current; } --- 399,421 ---- } ! // update cache ! PutCachedInternal(key, current); ! ! return current; ! } ! ! boost::shared_ptr<Leaf> Core::GetInternal(const std::string &pathStr, ! const boost::shared_ptr<Leaf>& leaf) ! { ! // lookup the path in the internal cache ! CacheKey key(leaf, pathStr); ! ! boost::weak_ptr<Leaf> cached(GetCachedInternal(key)); ! if (! cached.expired()) { ! return cached.lock(); } ! return GetUncachedInternal(key); } *************** *** 437,459 **** void Core::BindClass(const boost::shared_ptr<Class> &newClass) const { ! if (newClass != mClassClass) ! { ! newClass->Construct(newClass, mClassClass); ! newClass->AttachTo(mSelf); ! } } - template <class T> - struct isUnique: public unary_function<T, bool> - { - bool operator()(const T& x){ return x.unique(); } - }; - void Core::GarbageCollectBundles() { ! // don't you just love the STL ;-) ! mBundles.erase(remove_if( ! mBundles.begin(), mBundles.end(), ! isUnique<shared_ptr<SharedLibrary> >() ! ), mBundles.end()); } --- 478,507 ---- void Core::BindClass(const boost::shared_ptr<Class> &newClass) const { ! /* The following condition (true || ...) is always true. ! * The condition right of the || was the original condition, but I had to ! * change it since this caused ClassClass to have no core attached on my system ! * (which in turn made the program crash) -- oliver */ ! if (true || newClass != mClassClass) ! { ! newClass->Construct(newClass, mClassClass); ! newClass->AttachTo(mSelf); ! } } void Core::GarbageCollectBundles() { ! TBundleMap::iterator iter = mBundles.begin(); ! ! while (iter != mBundles.end()) ! { ! const TBundlePair& entry = (*iter); ! if (entry.second.unique()) ! { ! mBundles.erase(iter); ! iter = mBundles.begin(); ! continue; ! } ! ! ++iter; ! } } --- NEW FILE: zeitgeist.vcproj --- <?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="8,00" Name="zeitgeist" ProjectGUID="{B3FAF507-1CEB-437C-8272-30C8DC236192}" RootNamespace="zeitgeist" Keyword="Win32Proj" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Debug|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)" IntermediateDirectory="$(ConfigurationName)" ConfigurationType="4" CharacterSet="0" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\win32;..\" PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_CONFIG_H" MinimalRebuild="true" BasicRuntimeChecks="3" RuntimeLibrary="3" UsePrecompiledHeader="0" WarningLevel="3" Detect64BitPortabilityProblems="true" DebugInformationFormat="4" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="VCRelease|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)" IntermediateDirectory="$(ConfigurationName)" ConfigurationType="4" CharacterSet="0" WholeProgramOptimization="1" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="..\win32;..\" PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_CONFIG_H" RuntimeLibrary="2" UsePrecompiledHeader="0" WarningLevel="3" Detect64BitPortabilityProblems="true" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="fileserver" > <File RelativePath=".\fileserver\fileserver.cpp" > </File> <File RelativePath=".\fileserver\fileserver.h" > </File> <File RelativePath=".\fileserver\fileserver_c.cpp" > </File> <File RelativePath=".\fileserver\filesystem.h" > </File> <File RelativePath=".\fileserver\filesystem_c.cpp" > </File> </Filter> <Filter Name="logserver" > <File RelativePath=".\logserver\logserver.cpp" > </File> <File RelativePath=".\logserver\logserver.h" > </File> <File RelativePath=".\logserver\logserver_c.cpp" > </File> <File RelativePath=".\logserver\logserverstreambuf.cpp" > </File> <File RelativePath=".\logserver\logserverstreambuf.h" > </File> </Filter> <Filter Name="randomserver" > <File RelativePath=".\randomserver\randomserver.cpp" > </File> <File RelativePath=".\randomserver\randomserver.h" > </File> <File RelativePath=".\randomserver\randomserver_c.cpp" > </File> </Filter> <Filter Name="scriptserver" > <File RelativePath=".\scriptserver\gcvalue.cpp" > </File> <File RelativePath=".\scriptserver\gcvalue.h" > </File> <File RelativePath=".\scriptserver\rubywrapper.cpp" > </File> <File RelativePath=".\scriptserver\rubywrapper.h" > </File> <File RelativePath=".\scriptserver\scriptserver.cpp" > </File> <File RelativePath=".\scriptserver\scriptserver.h" > </File> <File RelativePath=".\scriptserver\scriptserver_c.cpp" > </File> </Filter> <File RelativePath=".\class.cpp" > </File> <File RelativePath=".\class.h" > </File> <File RelativePath=".\class_c.cpp" > </File> <File RelativePath=".\core.cpp" > </File> <File RelativePath=".\core.h" > </File> <File RelativePath=".\corecontext.cpp" > </File> <File RelativePath=".\corecontext.h" > </File> <File RelativePath=".\leaf.cpp" > </File> <File RelativePath=".\leaf.h" > </File> <File RelativePath=".\leaf_c.cpp" > </File> <File RelativePath=".\node.cpp" > </File> <File RelativePath=".\node.h" > </File> <File RelativePath=".\node_c.cpp" > </File> <File RelativePath=".\object.cpp" > </File> <File RelativePath=".\object.h" > </File> <File RelativePath=".\object_c.cpp" > </File> <File RelativePath=".\object_c.h" > </File> <File RelativePath=".\parameterlist.cpp" > </File> <File RelativePath=".\parameterlist.h" > </File> <File RelativePath=".\zeitgeist.cpp" > </File> <File RelativePath=".\zeitgeist.h" > </File> </Files> <Globals> </Globals> </VisualStudioProject> Index: core.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/core.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** core.h 10 Mar 2006 00:16:06 -0000 1.2 --- core.h 15 Mar 2007 07:26:31 -0000 1.3 *************** *** 26,29 **** --- 26,30 ---- #include <list> #include <map> + #include <set> #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> *************** *** 55,59 **** class Core { ! protected: // // types --- 56,60 ---- class Core { ! public: // // types *************** *** 73,81 **** public: ! CacheKey(boost::weak_ptr<Leaf> r, const std::string& p) : root(r), path(p) {}; bool operator == (const CacheKey& key) const; bool operator < (const CacheKey& key) const; }; /** TPathCache defines a mapping from a CacheKey to a weak reference of the corresponding Leaf --- 74,190 ---- public: ! CacheKey() ! {} ! ! CacheKey(boost::weak_ptr<Leaf> r, const std::string& p) : root(r), path(p) ! {}; ! bool operator == (const CacheKey& key) const; bool operator < (const CacheKey& key) const; }; + /** CachedLeafPath defines a pair of path key and it's + corresponding weak reference. It acts like a smart pointer + that is able to update the keep the managed reference up to + date with the help of the core and the CacheKey + */ + struct CachedLeafPath + { + protected: + CacheKey key; + boost::weak_ptr<Leaf> leaf; + + public: + // need to have virtual destructor + virtual ~CachedLeafPath() {} + + const CacheKey& GetKey() + { return key; } + + void SetKey(const CacheKey& k) + { key = k; } + + boost::weak_ptr<Leaf>& GetLeaf() + { return leaf; } + + virtual void Cache(boost::shared_ptr<Core> core, const std::string& pathStr) = 0; + virtual void Update(boost::shared_ptr<Core> core) = 0; + + bool operator == (const CachedLeafPath& p) + { + return (key == p.key); + } + + bool operator < (const CachedLeafPath& p) + { + return (key < p.key); + } + + bool expired() + { + return leaf.expired(); + } + + void reset() + { + leaf.reset(); + } + }; + + template<typename _CLASS> + struct CachedPath : public CachedLeafPath + { + public: + CachedPath() : CachedLeafPath() + {} + + CachedPath(const CacheKey& k, const boost::weak_ptr<_CLASS> &l) + : CachedLeafPath(k,l) + {} + + virtual void Cache(boost::shared_ptr<Core> core, const std::string& pathStr) + { + if (core.get() == NULL) + { + leaf.reset(); + return; + } + + key = CacheKey(core->mRoot, pathStr); + Update(core); + } + + virtual void Update(boost::shared_ptr<Core> core) + { + if (core.get() == NULL) + { + leaf.reset(); + return; + } + + // lookup the path in the internal core cache + boost::weak_ptr<Leaf> lookup = core->GetCachedInternal(key); + if (! lookup.expired()) + { + leaf = boost::shared_dynamic_cast<_CLASS>(lookup.lock()); + return; + } + + leaf = boost::shared_dynamic_cast<_CLASS> + (core->GetUncachedInternal(key)); + } + + boost::shared_ptr<_CLASS> get() + { + return boost::shared_static_cast<_CLASS>(leaf.lock()); + } + + _CLASS* operator -> () + { + return boost::shared_static_cast<_CLASS>(leaf.lock()).get(); + } + }; + + protected: /** TPathCache defines a mapping from a CacheKey to a weak reference of the corresponding Leaf *************** *** 83,86 **** --- 192,199 ---- typedef std::map<CacheKey, boost::weak_ptr<Leaf> > TPathCache; + /** TBundleMap defines a registry of loaded bundles */ + typedef std::pair<std::string, boost::shared_ptr<salt::SharedLibrary> > TBundlePair; + typedef std::map<std::string, boost::shared_ptr<salt::SharedLibrary> > TBundleMap; + // // functions *************** *** 141,145 **** boost::shared_ptr<Leaf> GetRoot() const { return mRoot; } ! /** returns a reference to the object denoted by the path expression 'pathStr'. */ boost::shared_ptr<Leaf> Get(const std::string &pathStr); --- 254,260 ---- boost::shared_ptr<Leaf> GetRoot() const { return mRoot; } ! /** returns a reference to the object denoted by the path ! expression 'pathStr'. ! */ boost::shared_ptr<Leaf> Get(const std::string &pathStr); *************** *** 175,178 **** --- 290,311 ---- protected: + /** returns a cached reference to the Leaf corresponding to the + given key. If the cached reference expired the entry is + removed from the cache + */ + boost::weak_ptr<Leaf> GetCachedInternal(const CacheKey& key); + + /** returns a reference to the object denoted by the path + expression 'pathStr', relative to the node base. This method + does not lookup for a cached reference but does update the + cache accordingly + */ + boost::shared_ptr<Leaf> GetUncachedInternal(const CacheKey& key); + + /** checks that the leaf reference isn't expired and inserts the + given key,leaf pair into the cache + */ + void PutCachedInternal(const CacheKey& key, const boost::weak_ptr<Leaf>& leaf); + /** returns a reference to the object denoted by the path expression 'pathStr', relative to the node base. *************** *** 213,221 **** boost::weak_ptr<Core> mSelf; ! /** a list of all registered bundles. Whenever we load a ! bundle, we add it to this list. This is necessary, because ! we have to keep the connection to each bundle open, until ! all the class objects belonging to it are completely ! destructed. This workaround is very ugly ... it cost me about 3-4 --- 346,353 ---- boost::weak_ptr<Core> mSelf; ! /** a registry of all registered bundles. Whenever we load a ! bundle, we add it to this map. This is necessary, because we ! have to keep the connection to each bundle open, until all the ! class objects belonging to it are completely destructed. This workaround is very ugly ... it cost me about 3-4 *************** *** 239,243 **** enough. */ ! std::list<boost::shared_ptr<salt::SharedLibrary> > mBundles; //! the internal node lookup cache --- 371,375 ---- enough. */ ! TBundleMap mBundles; //! the internal node lookup cache Index: node_c.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/node_c.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** node_c.cpp 5 Dec 2005 20:59:18 -0000 1.1 --- node_c.cpp 15 Mar 2007 07:26:31 -0000 1.2 *************** *** 25,30 **** --- 25,37 ---- using namespace zeitgeist; + FUNCTION(Node,unlinkChildren) + { + obj->UnlinkChildren(); + return true; + } + void CLASS(Node)::DefineClass() { + DEFINE_FUNCTION(unlinkChildren); DEFINE_BASECLASS(zeitgeist/Leaf); } Index: leaf.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/leaf.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** leaf.cpp 5 Dec 2005 20:59:18 -0000 1.1 --- leaf.cpp 15 Mar 2007 07:26:31 -0000 1.2 *************** *** 168,175 **** } ! void Leaf::ClearCachedData() const { delete mCachedFullPath; mCachedFullPath = NULL; } --- 168,176 ---- } ! void Leaf::ClearCachedData() { delete mCachedFullPath; mCachedFullPath = NULL; + mCachedPaths.clear(); } *************** *** 242,243 **** --- 243,269 ---- { } + + void Leaf::UpdateCached() + { + shared_ptr<Core> core(GetCore()); + + for ( + TCachedPathSet::iterator iter = mCachedPaths.begin(); + iter != mCachedPaths.end(); + ++iter + ) + { + (*iter)->Update(core); + } + } + + void Leaf::RegisterCachedPath(Core::CachedLeafPath& path, const std::string& pathStr) + { + path.Cache(GetCore(), pathStr); + mCachedPaths.insert(&path); + } + + void Leaf::RegisterCachedPath(Core::CachedLeafPath& path) + { + mCachedPaths.insert(&path); + } Index: zeitgeist.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/zeitgeist.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** zeitgeist.cpp 5 Dec 2005 20:59:18 -0000 1.1 --- zeitgeist.cpp 15 Mar 2007 07:26:31 -0000 1.2 *************** *** 78,82 **** ( "zeitgeist.rb", ! "lib/zeitgeist", ScriptServer::IS_COMMON ); --- 78,82 ---- ( "zeitgeist.rb", ! "zeitgeist", ScriptServer::IS_COMMON ); Index: corecontext.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/zeitgeist/corecontext.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** corecontext.h 5 Dec 2005 20:59:18 -0000 1.1 --- corecontext.h 15 Mar 2007 07:26:31 -0000 1.2 *************** *** 102,106 **** /** returns the currently selected object */ ! boost::shared_ptr<Leaf> GetObject() const { return mObject; } /** returns the core this context belongs to */ --- 102,106 ---- /** returns the currently selected object */ ! boost::shared_ptr<Leaf> GetSelection() const { return mObject; } /** returns the core this context belongs to */ |