// Basic Data types, abstract (not yet machine specific) #pragma once #include #include #include namespace FlowGraph { // Data models: // 64 bit Linux: LLP64 // 64 bit Windows: LP64 // // Explicitely NOT defined here: // * Size (same as Pointer, LongLong on Linux and Windows) // * Bool (Byte) // * Long (different on Linux (64 bit) and Windows (32 bit)) enum class DataType: int { Char, // 8 bit UChar, // 8 bit Short, // 16 bit on 64 bit Linux and Windows UShort, Int, // 32 bit on 64 bit Linux and Windows UInt, LongLong, // 64 bit on 64 bit Linux and Windows ULongLong, Pointer, // 64 bit on 64 bit Linux and Windows, size is same size Float, // 32 bit, IEEE 754 Double // 64 bit, IEEE 754 }; class Storage; ///< forward declaration // Argument for Operations // -> includes identity of data point, e.g. a local int variable // Built up as a list of Data instances for global and local data points in parallel to FlowGraph class Data { public: Data(DataType type, std::shared_ptr storage); DataType type() const; std::shared_ptr storage() const; bool operator==(const Data& other) const; private: const DataType m_type; std::shared_ptr m_storage; }; } namespace GlobalData { #if 0 // variable of simple or struct type class Element { private: size_t size; std::vector data; // may be empty if uninitialized }; class Segment: public std::vector { }; #endif }