40 lines
863 B
C++
40 lines
863 B
C++
|
|
/*
|
|||
|
|
* ObjectAddress.hh
|
|||
|
|
*
|
|||
|
|
* Created on: 15 <EFBFBD><EFBFBD><EFBFBD>. 2022 <EFBFBD>.
|
|||
|
|
* Author: titov
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef UMLIBRARY_SCHEMATIC_OBJECTADDRESS_HH_
|
|||
|
|
#define UMLIBRARY_SCHEMATIC_OBJECTADDRESS_HH_
|
|||
|
|
|
|||
|
|
#include <typeinfo>
|
|||
|
|
|
|||
|
|
namespace systemic {
|
|||
|
|
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> POD <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
struct Addressable {
|
|||
|
|
|
|||
|
|
virtual const void * address() const = 0;
|
|||
|
|
virtual std::size_t size() const = 0;
|
|||
|
|
virtual std::size_t type_hash() const = 0;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
template<typename Object>
|
|||
|
|
class ObjectAddress : public Addressable {
|
|||
|
|
|
|||
|
|
const Object * object = nullptr;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
ObjectAddress( const Object * object ) : object(object) {}
|
|||
|
|
|
|||
|
|
const void * address() const { return object; }
|
|||
|
|
std::size_t size() const { return sizeof(Object); }
|
|||
|
|
std::size_t type_hash() const { return sizeof(Object); }
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif /* UMLIBRARY_SCHEMATIC_OBJECTADDRESS_HH_ */
|