#ifndef CONFIGURATION_H_ #define CONFIGURATION_H_ #include #include #include "SharedRef.h" template class ConfigData { public: ConfigData(const Type& w) : IsSet(false), Value(w) { } ConfigData& operator=(const Type& w) { IsSet = true; Value = w; return *this; } void stealthSet(const Type& w) { Value = w; } const Type& get() const { return Value; } bool isSet() const { return IsSet; } private: bool IsSet; Type Value; }; class Configuration { public: Configuration(); void setPartName(const std::string& N); const std::string& partName() const; void setParent(Configuration* aParent); const Configuration* parent() const; Configuration* parent(); void setBuildDir(const std::string& BD); const std::string buildDir() const; void setSourcePath(const std::string& S); const std::string sourcePath() const; bool includeDebugInformation() const; void setIncludeDebugInformation(bool b); void setToolChain(const std::string& TC); const std::string toolChain() const; void addIncludeDirectory(const std::string& D); unsigned int includeDirectories() const; std::string includeDirectory(unsigned int i) const; void addLibraryDirectory(const std::string& D); unsigned int libraryDirectories() const; std::string libraryDirectory(unsigned int i) const; void addLibrary(const std::string& D); unsigned int libraries() const; std::string library(unsigned int i) const; void addDefine(const std::string& D); unsigned int defines() const; std::string define(unsigned int i) const; void addIncludeSearchPath(const std::string& D); unsigned int includeSearchPaths() const; std::string includeSearchPath(unsigned int i) const; void addLibrarySearchPath(const std::string& D); unsigned int librarySearchPaths() const; std::string librarySearchPath(unsigned int i) const; private: Configuration* Parent; std::string PartName; ConfigData BuildDir; ConfigData SourcePath; ConfigData IncludeDebug; ConfigData ToolChain; std::vector IncludeDirectories; std::vector LibraryDirectories; std::vector Libraries; std::vector Defines; std::vector IncludeSearchPaths; std::vector LibrarySearchPaths; }; class Configurable { public: Configuration& configuration(); const Configuration& configuration() const; private: Configuration Config; }; #endif