Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 3, 2010, 2:24:14 AM (14 years ago)
Author:
scheusso
Message:

std::set<T> is now synchronisable
this was neccessary to synchronise templates (now used in the Level class)
this was neccessary to synchronise lod templates and configuration

Location:
code/branches/presentation3/src/libraries
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentation3/src/libraries/core/BaseObject.cc

    r6926 r7105  
    196196    {
    197197        this->templates_.insert(temp);
     198        if( temp->isLink() )
     199        {
     200          this->networkTemplateNames_.insert(temp->getLink());
     201          assert( !Template::getTemplate(temp->getLink())->isLink() );
     202        }
     203        else
     204          this->networkTemplateNames_.insert(temp->getName());
    198205        temp->applyOn(this);
    199206    }
  • code/branches/presentation3/src/libraries/core/BaseObject.h

    r6926 r7105  
    191191            EventState* getEventState(const std::string& name) const;
    192192
    193             std::string name_;                                 //!< The name of the object
    194             std::string oldName_;                              //!< The old name of the object
    195             mbool       bActive_;                              //!< True = the object is active
    196             mbool       bVisible_;                             //!< True = the object is visible
    197             std::string mainStateName_;
    198             Functor*    mainStateFunctor_;
     193            std::string             name_;                     //!< The name of the object
     194            std::string             oldName_;                  //!< The old name of the object
     195            mbool                   bActive_;                  //!< True = the object is active
     196            mbool                   bVisible_;                 //!< True = the object is visible
     197            std::string             mainStateName_;
     198            Functor*                mainStateFunctor_;
     199            std::set<std::string>   networkTemplateNames_;
    199200
    200201        private:
  • code/branches/presentation3/src/libraries/core/Template.h

    r6938 r7105  
    5151            inline const std::string& getLink() const
    5252                { return this->link_; }
     53            inline bool isLink() const
     54                { return this->bIsLink_; }
    5355
    5456            inline void setLoadDefaults(bool bLoadDefaults)
  • code/branches/presentation3/src/libraries/network/synchronisable/Synchronisable.h

    r6417 r7105  
    3737#include <map>
    3838#include <queue>
     39#include <set>
    3940
    4041#include "util/mbool.h"
     
    138139    Synchronisable(BaseObject* creator);
    139140    template <class T> void registerVariable(T& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false);
     141    template <class T> void registerVariable(std::set<T>& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false);
    140142
    141143    void setPriority(unsigned int freq){ objectFrequency_ = freq; }
     
    181183    }
    182184  }
     185 
     186  template <class T> void Synchronisable::registerVariable( std::set<T>& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional)
     187  {
     188    SynchronisableVariableBase* sv;
     189    if (bidirectional)
     190      sv = new SynchronisableVariableBidirectional<std::set<T> >(variable, mode, cb);
     191    else
     192      sv = new SynchronisableVariable<std::set<T> >(variable, mode, cb);
     193    syncList.push_back(sv);
     194    stringList.push_back(sv);
     195  }
    183196
    184197  template <> _NetworkExport void Synchronisable::registerVariable( std::string& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional);
     198//   template <class T> _NetworkExport void Synchronisable::registerVariable<std::set<T> >( std::set<T>& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional);
    185199
    186200
  • code/branches/presentation3/src/libraries/util/Serialise.h

    r6746 r7105  
    3838
    3939#include <cstring>
     40#include <set>
    4041#include "Math.h"
    4142#include "mbool.h"
     
    635636        return checkEquality( (unsigned char&)((mbool&)variable).getMemory(), mem );
    636637    }
     638   
     639    // =========== std::set
     640   
     641    template <class T> inline uint32_t returnSize( const std::set<T>& variable )
     642    {
     643        uint32_t tempsize = sizeof(uint32_t); // for the number of entries
     644        for( typename std::set<T>::iterator it=((std::set<T>*)(&variable))->begin(); it!=((std::set<T>*)(&variable))->end(); ++it)
     645            tempsize += returnSize( *it );
     646        return tempsize;
     647    }
     648   
     649    template <class T> inline void saveAndIncrease(  const std::set<T>& variable, uint8_t*& mem )
     650    {
     651        typename std::set<T>::const_iterator it = variable.begin();
     652        saveAndIncrease( (uint32_t)variable.size(), mem );
     653        for( ; it!=variable.end(); ++it )
     654            saveAndIncrease( *it, mem );
     655    }
     656   
     657    template <class T> inline void loadAndIncrease( const std::set<T>& variable, uint8_t*& mem )
     658    {
     659        uint32_t nrOfElements = 0;
     660        loadAndIncrease( nrOfElements, mem );
     661        typename std::set<T>::const_iterator it = variable.begin();
     662        for( uint32_t i = 0; i<nrOfElements; ++i )
     663        {
     664            T temp;
     665            loadAndIncrease(temp, mem);
     666            while( it!=variable.end() && *it!=temp )
     667            {
     668                ((std::set<T>*)(&variable))->erase(it++);
     669                ++it;
     670            }
     671            if( it==variable.end() )
     672            {
     673                ((std::set<T>*)(&variable))->insert(temp);
     674            }
     675        }
     676    }
     677   
     678    template <class T> inline bool checkEquality( const std::set<T>& variable, uint8_t* mem )
     679    {
     680        uint8_t* temp = mem;
     681        uint32_t nrOfElements;
     682        loadAndIncrease(nrOfElements, mem);
     683        if( variable.size() == nrOfElements )
     684        {
     685            T tempT;
     686            for( uint32_t i=0; i<nrOfElements; ++i )
     687            {
     688                loadAndIncrease(tempT, mem);
     689                if( variable.find(tempT) == variable.end() )
     690                {
     691                    mem = temp;
     692                    return false;
     693                }
     694            }
     695        }
     696        else
     697        {
     698            mem = temp;
     699            return false;
     700        }
     701        return true;
     702    }
    637703}
    638704
Note: See TracChangeset for help on using the changeset viewer.