diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-06 03:52:48 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-18 11:25:42 +0900 |
commit | 776ca3085c44e6570813270df75278849c37d400 (patch) | |
tree | 6dc3f2d468cfd860347f2f9d519f49c2a38d4c64 /var.h | |
parent | a3caa8166baeb348f817eb1b4fa2e81672b3d77f (diff) | |
download | android_build_kati-776ca3085c44e6570813270df75278849c37d400.tar.gz android_build_kati-776ca3085c44e6570813270df75278849c37d400.tar.bz2 android_build_kati-776ca3085c44e6570813270df75278849c37d400.zip |
[C++] The first commit for C++ version
16 tests out of 169 are passing.
Diffstat (limited to 'var.h')
-rw-r--r-- | var.h | 101 |
1 files changed, 101 insertions, 0 deletions
@@ -0,0 +1,101 @@ +#ifndef VAR_H_ +#define VAR_H_ + +#include <memory> +#include <string> +#include <unordered_map> + +#include "string_piece.h" +#include "value.h" + +using namespace std; + +class Evaluator; +class Value; + +class Var : public Evaluable { + public: + virtual ~Var(); + + virtual const char* Flavor() const = 0; + virtual const char* Origin() const = 0; + virtual bool IsDefined() const { return true; } + + virtual string DebugString() const = 0; + + protected: + Var(); +}; + +class SimpleVar : public Var { + public: + SimpleVar(shared_ptr<string> v, const char* origin); + + virtual const char* Flavor() const { + return "simple"; + } + virtual const char* Origin() const { + return origin_; + } + + virtual shared_ptr<string> Eval(Evaluator*) const override { + return v_; + } + virtual void Eval(Evaluator* ev, string* s) const override; + + string DebugString() const override; + + private: + shared_ptr<string> v_; + const char* origin_; +}; + +class RecursiveVar : public Var { + public: + RecursiveVar(Value* v, const char* origin); + + virtual const char* Flavor() const { + return "recursive"; + } + virtual const char* Origin() const { + return origin_; + } + + virtual void Eval(Evaluator* ev, string* s) const override; + + string DebugString() const override; + + private: + Value* v_; + const char* origin_; +}; + +class UndefinedVar : public Var { + public: + UndefinedVar(); + + virtual const char* Flavor() const { + return "undefined"; + } + virtual const char* Origin() const { + return "undefined"; + } + virtual bool IsDefined() const { return false; } + + virtual void Eval(Evaluator* ev, string* s) const override; + + string DebugString() const override; +}; + +extern UndefinedVar* kUndefined; + +class Vars : public unordered_map<StringPiece, Var*> { + public: + ~Vars(); + + Var* Lookup(StringPiece name) const; + + void Assign(StringPiece name, Var* v); +}; + +#endif // VAR_H_ |