diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-18 16:18:13 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-19 12:49:19 +0900 |
commit | cf0cd68ef4d2b8268ade22418c17e0079e9c85e1 (patch) | |
tree | 2901ced625193a66e3f993ba981f92a7375cf6e5 /var.cc | |
parent | 0ec7dacff3bd7b106ad68deb29013405da1409bf (diff) | |
download | kati-cf0cd68ef4d2b8268ade22418c17e0079e9c85e1.tar.gz |
[C++] Implement foreach
Diffstat (limited to 'var.cc')
-rw-r--r-- | var.cc | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -82,3 +82,21 @@ void Vars::Assign(StringPiece name, Var* v) { p.first->second = v; } } + +ScopedVar::ScopedVar(Vars* vars, StringPiece name, Var* var) + : vars_(vars), orig_(NULL) { + auto p = vars->insert(make_pair(name, var)); + iter_ = p.first; + if (!p.second) { + orig_ = iter_->second; + iter_->second = var; + } +} + +ScopedVar::~ScopedVar() { + if (orig_) { + iter_->second = orig_; + } else { + vars_->erase(iter_); + } +} |