[Orxonox-commit 5811] r10471 - code/branches/core7/src/libraries/network
landauf at orxonox.net
landauf at orxonox.net
Mon May 25 13:37:50 CEST 2015
Author: landauf
Date: 2015-05-25 13:37:50 +0200 (Mon, 25 May 2015)
New Revision: 10471
Modified:
code/branches/core7/src/libraries/network/FunctionCall.cc
code/branches/core7/src/libraries/network/NetworkFunction.cc
code/branches/core7/src/libraries/network/NetworkFunction.h
code/branches/core7/src/libraries/network/NetworkFunctionIncludes.h
code/branches/core7/src/libraries/network/NetworkFunctionManager.cc
code/branches/core7/src/libraries/network/NetworkFunctionManager.h
Log:
moved static maps from NetworkFunctionStatic and NetworkMemberFunctionBase to NetworkFunctionManager
Modified: code/branches/core7/src/libraries/network/FunctionCall.cc
===================================================================
--- code/branches/core7/src/libraries/network/FunctionCall.cc 2015-05-25 10:25:29 UTC (rev 10470)
+++ code/branches/core7/src/libraries/network/FunctionCall.cc 2015-05-25 11:37:50 UTC (rev 10471)
@@ -31,6 +31,7 @@
#include <cassert>
#include "util/MultiType.h"
#include "NetworkFunction.h"
+#include "NetworkFunctionManager.h"
namespace orxonox {
@@ -47,7 +48,7 @@
bool FunctionCall::execute(){
if( this->bIsStatic_ )
{
- NetworkFunctionStatic *fct = NetworkFunctionStatic::getFunction( this->functionID_ );
+ NetworkFunctionStatic *fct = static_cast<NetworkFunctionStatic*>(NetworkFunctionManager::getFunction( this->functionID_ ));
assert( this->nrOfArguments_==this->arguments_.size() );
switch(this->nrOfArguments_)
{
@@ -75,7 +76,7 @@
}
else // not a static function, so also handle with the objectID
{
- NetworkMemberFunctionBase *fct = NetworkMemberFunctionBase::getFunction( this->functionID_ );
+ NetworkMemberFunctionBase *fct = static_cast<NetworkMemberFunctionBase*>(NetworkFunctionManager::getFunction( this->functionID_ ));
switch(this->nrOfArguments_)
{
case 0:
Modified: code/branches/core7/src/libraries/network/NetworkFunction.cc
===================================================================
--- code/branches/core7/src/libraries/network/NetworkFunction.cc 2015-05-25 10:25:29 UTC (rev 10470)
+++ code/branches/core7/src/libraries/network/NetworkFunction.cc 2015-05-25 11:37:50 UTC (rev 10471)
@@ -31,53 +31,21 @@
namespace orxonox
{
- std::map<NetworkFunctionPointer, NetworkMemberFunctionBase*> NetworkMemberFunctionBase::functorMap_;
- std::map<uint32_t, NetworkMemberFunctionBase*> NetworkMemberFunctionBase::idMap_;
+ NetworkFunctionBase::NetworkFunctionBase(const std::string& name, const NetworkFunctionPointer& p)
+ {
+ static uint32_t networkID = 0;
+ this->networkID_ = networkID++;
- NetworkFunctionBase::NetworkFunctionBase(const std::string& name)
- {
- static uint32_t networkID = 0;
- this->networkID_ = networkID++;
+ this->name_ = name;
+ NetworkFunctionManager::getNameMap()[name] = this;
+ NetworkFunctionManager::getFunctorMap()[p] = this;
+ NetworkFunctionManager::getIdMap()[this->getNetworkID()] = this;
+ }
- this->name_ = name;
- NetworkFunctionManager::getNameMap()[name] = this;
- }
- NetworkFunctionBase::~NetworkFunctionBase()
- {
- }
-
-
- NetworkFunctionStatic::NetworkFunctionStatic(const FunctorStaticPtr& functor, const std::string& name, const NetworkFunctionPointer& p):
- NetworkFunctionBase(name)
- {
- this->functor_ = functor;
- NetworkFunctionStatic::getFunctorMap()[p] = this;
- NetworkFunctionStatic::getIdMap()[ this->getNetworkID() ] = this;
- }
-
- /*static*/ std::map<NetworkFunctionPointer, NetworkFunctionStatic*>& NetworkFunctionStatic::getFunctorMap()
- {
- static std::map<NetworkFunctionPointer, NetworkFunctionStatic*> functorMap_;
- return functorMap_;
- }
-
- /*static*/ std::map<uint32_t, NetworkFunctionStatic*>& NetworkFunctionStatic::getIdMap()
- {
- static std::map<uint32_t, NetworkFunctionStatic*> idMap_;
- return idMap_;
- }
-
-
- NetworkMemberFunctionBase::NetworkMemberFunctionBase(const std::string& name, const NetworkFunctionPointer& p):
- NetworkFunctionBase(name)
- {
- this->functorMap_[p] = this;
- this->idMap_[ this->getNetworkID() ] = this;
- }
-
- NetworkMemberFunctionBase::~NetworkMemberFunctionBase()
- {
- }
-
-
+ void NetworkFunctionBase::setNetworkID(uint32_t id)
+ {
+ NetworkFunctionManager::getIdMap().erase(this->networkID_); // remove old id
+ this->networkID_ = id;
+ NetworkFunctionManager::getIdMap()[this->networkID_] = this; // add new id
+ }
}
Modified: code/branches/core7/src/libraries/network/NetworkFunction.h
===================================================================
--- code/branches/core7/src/libraries/network/NetworkFunction.h 2015-05-25 10:25:29 UTC (rev 10470)
+++ code/branches/core7/src/libraries/network/NetworkFunction.h 2015-05-25 11:37:50 UTC (rev 10471)
@@ -68,10 +68,10 @@
class _NetworkExport NetworkFunctionBase {
public:
- NetworkFunctionBase(const std::string& name);
- virtual ~NetworkFunctionBase();
+ NetworkFunctionBase(const std::string& name, const NetworkFunctionPointer& p);
+ virtual ~NetworkFunctionBase() {}
- virtual void setNetworkID(uint32_t id) { this->networkID_ = id; }
+ void setNetworkID(uint32_t id);
inline uint32_t getNetworkID() const { return this->networkID_; }
inline const std::string& getName() const { return name_; }
@@ -84,7 +84,10 @@
class _NetworkExport NetworkFunctionStatic: public NetworkFunctionBase {
public:
- NetworkFunctionStatic(const FunctorStaticPtr& functor, const std::string& name, const NetworkFunctionPointer& p);
+ NetworkFunctionStatic(const FunctorStaticPtr& functor, const std::string& name, const NetworkFunctionPointer& p)
+ : NetworkFunctionBase(name, p)
+ , functor_(functor)
+ { }
inline void call(){ (*this->functor_)(); }
inline void call(const MultiType& mt1){ (*this->functor_)(mt1); }
@@ -93,16 +96,7 @@
inline void call(const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4){ (*this->functor_)(mt1, mt2, mt3, mt4); }
inline void call(const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5){ (*this->functor_)(mt1, mt2, mt3, mt4, mt5); }
- virtual void setNetworkID( uint32_t id )
- { NetworkFunctionBase::setNetworkID( id ); NetworkFunctionStatic::getIdMap()[id] = this; }
- static NetworkFunctionStatic* getFunction( uint32_t id )
- { assert( NetworkFunctionStatic::getIdMap().find(id) != NetworkFunctionStatic::getIdMap().end() ); return NetworkFunctionStatic::getIdMap()[id]; }
- static NetworkFunctionStatic* getFunction( const NetworkFunctionPointer& p )
- { assert( NetworkFunctionStatic::getFunctorMap().find(p) != NetworkFunctionStatic::getFunctorMap().end() ); return NetworkFunctionStatic::getFunctorMap()[p]; }
-
private:
- static std::map<NetworkFunctionPointer, NetworkFunctionStatic*>& getFunctorMap();
- static std::map<uint32_t, NetworkFunctionStatic*>& getIdMap();
FunctorStaticPtr functor_;
};
@@ -110,13 +104,10 @@
class _NetworkExport NetworkMemberFunctionBase: public NetworkFunctionBase {
public:
- NetworkMemberFunctionBase(const std::string& name, const NetworkFunctionPointer& p);
- ~NetworkMemberFunctionBase();
+ NetworkMemberFunctionBase(const std::string& name, const NetworkFunctionPointer& p)
+ : NetworkFunctionBase(name, p)
+ { }
- virtual void setNetworkID( uint32_t id ){ NetworkFunctionBase::setNetworkID( id ); idMap_[id] = this; }
- static NetworkMemberFunctionBase* getFunction( uint32_t id ){ assert( idMap_.find(id) != idMap_.end() ); return idMap_[id]; }
- static NetworkMemberFunctionBase* getFunction( const NetworkFunctionPointer& p ){ assert( functorMap_.find(p) != functorMap_.end() ); return functorMap_[p]; }
-
//
virtual bool call(uint32_t objectID)=0;
virtual bool call(uint32_t objectID, const MultiType& mt1)=0;
@@ -124,16 +115,15 @@
virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3)=0;
virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4)=0;
virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5)=0;
-
- private:
- static std::map<NetworkFunctionPointer, NetworkMemberFunctionBase*> functorMap_;
- static std::map<uint32_t, NetworkMemberFunctionBase*> idMap_;
};
template <class T> class NetworkMemberFunction: public NetworkMemberFunctionBase {
public:
- NetworkMemberFunction(const FunctorMemberPtr<T>& functor, const std::string& name, const NetworkFunctionPointer& p);
+ NetworkMemberFunction(const FunctorMemberPtr<T>& functor, const std::string& name, const NetworkFunctionPointer& p)
+ : NetworkMemberFunctionBase(name, p)
+ , functor_(functor)
+ { }
inline bool call(uint32_t objectID)
{
@@ -200,11 +190,6 @@
FunctorMemberPtr<T> functor_;
};
-template <class T> NetworkMemberFunction<T>::NetworkMemberFunction(const FunctorMemberPtr<T>& functor, const std::string& name, const NetworkFunctionPointer& p):
- NetworkMemberFunctionBase(name, p), functor_(functor)
-{
-}
-
template<class T> inline void copyPtr( T ptr, NetworkFunctionPointer& destptr)
{
if( sizeof(NetworkFunctionPointer)-sizeof(T) > 0)
Modified: code/branches/core7/src/libraries/network/NetworkFunctionIncludes.h
===================================================================
--- code/branches/core7/src/libraries/network/NetworkFunctionIncludes.h 2015-05-25 10:25:29 UTC (rev 10470)
+++ code/branches/core7/src/libraries/network/NetworkFunctionIncludes.h 2015-05-25 11:37:50 UTC (rev 10471)
@@ -35,6 +35,7 @@
#include <boost/static_assert.hpp>
#include "NetworkFunction.h"
+#include "NetworkFunctionManager.h"
namespace orxonox
{
@@ -49,7 +50,7 @@
{ \
NetworkFunctionPointer p1; \
copyPtr( functionPointer, p1 ); \
- FunctionCallManager::addCallStatic(NetworkFunctionStatic::getFunction(p1)->getNetworkID(), __VA_ARGS__); \
+ FunctionCallManager::addCallStatic(NetworkFunctionManager::getFunction(p1)->getNetworkID(), __VA_ARGS__); \
}
// call it with class, function, objectID, clientID, args
@@ -57,7 +58,7 @@
{ \
NetworkFunctionPointer p1; \
copyPtr( &class::function, p1 ); \
- FunctionCallManager::addCallMember(NetworkMemberFunctionBase::getFunction(p1)->getNetworkID(), objectID, __VA_ARGS__); \
+ FunctionCallManager::addCallMember(NetworkFunctionManager::getFunction(p1)->getNetworkID(), objectID, __VA_ARGS__); \
}
template<class T> inline void* registerStaticNetworkFunctionFct( T ptr, const std::string& name )
Modified: code/branches/core7/src/libraries/network/NetworkFunctionManager.cc
===================================================================
--- code/branches/core7/src/libraries/network/NetworkFunctionManager.cc 2015-05-25 10:25:29 UTC (rev 10470)
+++ code/branches/core7/src/libraries/network/NetworkFunctionManager.cc 2015-05-25 11:37:50 UTC (rev 10471)
@@ -31,6 +31,9 @@
namespace orxonox
{
+ std::map<NetworkFunctionPointer, NetworkFunctionBase*> NetworkFunctionManager::functorMap_;
+ std::map<uint32_t, NetworkFunctionBase*> NetworkFunctionManager::idMap_;
+
/* static */NetworkFunctionManager& NetworkFunctionManager::getInstance()
{
static NetworkFunctionManager instance;
@@ -57,4 +60,18 @@
static std::map<std::string, NetworkFunctionBase*> nameMap_;
return nameMap_;
}
+
+ /*static*/NetworkFunctionBase* NetworkFunctionManager::getFunction(const NetworkFunctionPointer& p)
+ {
+ std::map<NetworkFunctionPointer, NetworkFunctionBase*>::iterator it = functorMap_.find(p);
+ assert(it != functorMap_.end());
+ return it->second;
+ }
+
+ /*static*/NetworkFunctionBase* NetworkFunctionManager::getFunction(uint32_t id)
+ {
+ std::map<uint32_t, NetworkFunctionBase*>::iterator it = idMap_.find(id);
+ assert(it != idMap_.end());
+ return it->second;
+ }
}
Modified: code/branches/core7/src/libraries/network/NetworkFunctionManager.h
===================================================================
--- code/branches/core7/src/libraries/network/NetworkFunctionManager.h 2015-05-25 10:25:29 UTC (rev 10470)
+++ code/branches/core7/src/libraries/network/NetworkFunctionManager.h 2015-05-25 11:37:50 UTC (rev 10471)
@@ -44,6 +44,18 @@
static void setNetworkID(const std::string& name, uint32_t id);
static void destroyAllNetworkFunctions();
static std::map<std::string, NetworkFunctionBase*>& getNameMap();
+
+ static inline std::map<NetworkFunctionPointer, NetworkFunctionBase*>& getFunctorMap()
+ { return functorMap_; }
+ static inline std::map<uint32_t, NetworkFunctionBase*>& getIdMap()
+ { return idMap_; }
+
+ static NetworkFunctionBase* getFunction(const NetworkFunctionPointer& p);
+ static NetworkFunctionBase* getFunction(uint32_t id);
+
+ private:
+ static std::map<NetworkFunctionPointer, NetworkFunctionBase*> functorMap_;
+ static std::map<uint32_t, NetworkFunctionBase*> idMap_;
};
}
More information about the Orxonox-commit
mailing list