5#ifndef BALL_CONCEPT_EMBEDDABLE_H
6#define BALL_CONCEPT_EMBEDDABLE_H
12#ifndef BALL_DATATYPE_STRINGHASHMAP_H
16#ifndef BALL_DATATYPE_HASHMAP_H
31 #define BALL_EMBEDDABLE(TYPE,BASE)\
32 virtual void registerThis() \
34 if (typeid(*this) != typeid(TYPE))\
36 Log.error() << "Warning: derived class " << typeid(*this).name() << " was derived from BALL::Embeddable, but the macro\n"\
37 << "BALL_EMBEDDABLE(...) was not specified in the class declaration!" << std::endl;\
39 Embeddable::registerInstance_(typeid(TYPE), this);\
40 Embeddable::registerInstance_(typeid(BASE), this);\
43 static TYPE* getInstance(Position index) \
45 Embeddable* ptr = Embeddable::getInstance_(typeid(TYPE), index);\
48 return dynamic_cast<TYPE*>(ptr); \
55 static TYPE* getInstance(const String& identifier) \
57 Embeddable* ptr = Embeddable::getInstance_(typeid(TYPE), identifier);\
60 return dynamic_cast<TYPE*>(ptr); \
67 static Size countInstances() { return (Embeddable::countInstances_(typeid(TYPE))); };
147 virtual void dump(std::ostream& s = std::cout,
Size depth = 0)
const
Embeddable(const Embeddable &embeddable)
virtual void registerThis()
void setIdentifier(const String &identifier)
Embeddable(const String &identifier="<Embeddable>")
static Size countInstances_(const std::type_info &type)
static Embeddable * getInstance_(const std::type_info &type, Position index)
std::vector< Embeddable * > EmbeddableVector
static Embeddable * getInstance_(const std::type_info &type, const String &identifier)
const String & getIdentifier() const
virtual void dump(std::ostream &s=std::cout, Size depth=0) const
static void unregisterInstance_(const Embeddable *instance)
static void registerInstance_(const std::type_info &type, const Embeddable *instance)
HashMap class based on the STL map (containing serveral convenience functions)