From 53de92ca887e4386d8d6acb462be4e4a7978a90b Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Sun, 9 Dec 2012 09:34:27 +0100 Subject: Initial check-in. --- dynvars.hpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 dynvars.hpp (limited to 'dynvars.hpp') diff --git a/dynvars.hpp b/dynvars.hpp new file mode 100644 index 0000000..fbe852a --- /dev/null +++ b/dynvars.hpp @@ -0,0 +1,46 @@ +// Copyright 2012, Matthias Andreas Benkard. + +#pragma once + +#ifndef DYNVARS_HPP +#define DYNVARS_HPP + +#include +#include + +#define thread_local __thread + +namespace dynvars { + +template +class dynvar { +private: + std::list value_stack; +public: + dynvar() { }; + dynvar(T val); + dynvar& operator =(T val); + void push(T val); + void pop(); + T& operator *(); + T* operator ->(); + operator bool() const; +}; + +template +class dyn { + dynvar& myvar; +public: + dyn(dynvar& var, R val); + ~dyn(); +}; + +template +T +with(dynvar& var, R val, std::function f); + +} + +#endif //DYNVARS_HPP + +#include "dynvars-impl.hpp" -- cgit v1.2.3