X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5ab070a2054636f5dcf5f0b56d691b089c5d16e4..c6bbeb1829c36ff45b43ab25f9d8d3f53f554d98:/include/xbt/Extendable.hpp diff --git a/include/xbt/Extendable.hpp b/include/xbt/Extendable.hpp index d95d186b65..369e3a3462 100644 --- a/include/xbt/Extendable.hpp +++ b/include/xbt/Extendable.hpp @@ -19,12 +19,12 @@ template class Extendable; template class Extension { - static const std::size_t INVALID_ID = std::numeric_limits::max(); - std::size_t id_; + static constexpr std::size_t INVALID_ID = std::numeric_limits::max(); + std::size_t id_ = INVALID_ID; friend class Extendable; explicit constexpr Extension(std::size_t id) : id_(id) {} public: - explicit constexpr Extension() : id_(INVALID_ID) {} + explicit constexpr Extension() {} std::size_t id() const { return id_; } bool valid() const { return id_ != INVALID_ID; } }; @@ -48,7 +48,8 @@ template class Extendable { private: static std::vector deleters_; - std::vector extensions_; + std::vector extensions_{(deleters_.size() > 0 ? deleters_.size() : 1), nullptr}; + public: static size_t extension_create(void (*deleter)(void*)) { @@ -68,7 +69,7 @@ public: { return Extension(extension_create([](void* p) { delete static_cast(p); })); } - Extendable() : extensions_((deleters_.size() > 0 ? deleters_.size() : 1), nullptr) {} + Extendable() {} Extendable(const Extendable&) = delete; Extendable& operator=(const Extendable&) = delete; ~Extendable() @@ -110,9 +111,7 @@ public: void set_data(void* data){ extensions_[0]=data; } - void* get_data(){ - return extensions_[0]; - } + void* get_data() const { return extensions_[0]; } // Convenience extension access when the type has a associated EXTENSION ID: template U* extension() const { return extension(U::EXTENSION_ID); } template void extension_set(U* p) { extension_set(U::EXTENSION_ID, p); }