// Different kinds of abstract storage locations: Constants, Global and Local Storage, Temporaries, ... #pragma once #include "data.h" #include "scope.h" #include #include #include #include namespace FlowGraph { // Parameter to Data class, defining where the data is stored // Explicitely not including size // But including label/data/pointer // -> includes identity of certain data point class Storage { public: virtual ~Storage() {} // force class to be polymorphic, for smart pointers }; class Constant: public Storage { public: Constant(const std::vector& value): m_value(value) {} // little endian data const std::vector& value() const { return m_value; } private: std::vector m_value; }; class GlobalStorage : public Storage { public: GlobalStorage(const std::string& name): m_name(name) {} const std::string& name() const { return m_name; } private: std::string m_name; }; // named values class LocalStorage : public Storage { public: LocalStorage(const std::string& name); const std::string& name() const { return m_name; } private: std::string m_name; }; // intermediate results, anonymous values // use generated name class TemporaryStorage : public Storage { public: TemporaryStorage(); }; }