-#include <sys/stat.h>
-#ifdef WIN32
-#include <direct.h> // _mkdir
-/* Need to define function drand48 for Windows */
-/* FIXME: use _drand48() defined in src/surf/random_mgr.c instead */
-#define drand48() (rand() / (RAND_MAX + 1.0))
-#endif
-
-#define INSTR_DEFAULT_STR_SIZE 500
-
-namespace simgrid {
-namespace instr {
-
-class Value;
-
-enum e_event_type {
- PAJE_DefineContainerType,
- PAJE_DefineVariableType,
- PAJE_DefineStateType,
- PAJE_DefineEventType,
- PAJE_DefineLinkType,
- PAJE_DefineEntityValue,
- PAJE_CreateContainer,
- PAJE_DestroyContainer,
- PAJE_SetVariable,
- PAJE_AddVariable,
- PAJE_SubVariable,
- PAJE_SetState,
- PAJE_PushState,
- PAJE_PopState,
- PAJE_ResetState,
- PAJE_StartLink,
- PAJE_EndLink,
- PAJE_NewEvent
-};
-
-//--------------------------------------------------
-enum e_entity_types { TYPE_VARIABLE, TYPE_LINK, TYPE_CONTAINER, TYPE_STATE, TYPE_EVENT };
-
-class Type {
- std::string id_;
- std::string name_;
- std::string color_;
- e_entity_types kind_;
- Type* father_;
-
-public:
- std::map<std::string, Type*> children_;
- std::map<std::string, Value*> values_; // valid for all types except variable and container
-
- Type(std::string name, std::string alias, std::string color, e_entity_types kind, Type* father);
- ~Type();
-
- std::string getName() { return name_; }
- const char* getCname() { return name_.c_str(); }
- const char* getId() { return id_.c_str(); }
- e_entity_types getKind() { return kind_; }
- bool isColored() { return not color_.empty(); }
-
- Type* byName(std::string name);
-
- Type* getOrCreateContainerType(std::string name);
- Type* getOrCreateEventType(std::string name);
- Type* getOrCreateLinkType(std::string name, Type* source, Type* dest);
- Type* getOrCreateStateType(std::string name);
- Type* getOrCreateVariableType(std::string name, std::string color);
-
- void logContainerTypeDefinition();
- void logVariableTypeDefinition();
- void logStateTypeDefinition();
- void logLinkTypeDefinition(simgrid::instr::Type* source, simgrid::instr::Type* dest);
- void logDefineEventType();
-
- static Type* createRootType();
- static Type* getRootType();
-};