Generated on for Gecode by doxygen 1.17.0
symboltable.hh
Go to the documentation of this file.
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2/*
3 * Main authors:
4 * Guido Tack <tack@gecode.dev>
5 *
6 * Copyright:
7 * Guido Tack, 2007
8 *
9 * This file is part of Gecode, the generic constraint
10 * development environment:
11 * http://www.gecode.dev
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this software and associated documentation files (the
15 * "Software"), to deal in the Software without restriction, including
16 * without limitation the rights to use, copy, modify, merge, publish,
17 * distribute, sublicense, and/or sell copies of the Software, and to
18 * permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be
22 * included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 *
32 */
33
34#ifndef GECODE_FLATZINC_SYMBOLTABLE_HH
35#define GECODE_FLATZINC_SYMBOLTABLE_HH
36
37#include <unordered_map>
38#include <vector>
39
40namespace Gecode { namespace FlatZinc {
41
43 template<class Val>
45 private:
46 std::unordered_map<std::string,Val> m;
47 public:
49 bool put(const std::string& key, const Val& val);
51 bool get(const std::string& key, Val& val) const;
52 };
53
54 template<class Val>
55 bool
56 SymbolTable<Val>::put(const std::string& key, const Val& val) {
57 const auto& i = m.find(key);
58 bool fresh = (i == m.end());
59 m[key] = val;
60 return fresh;
61 }
62
63 template<class Val>
64 bool
65 SymbolTable<Val>::get(const std::string& key, Val& val) const {
66 const auto& i = m.find(key);
67 if (i == m.end())
68 return false;
69 val = i->second;
70 return true;
71 }
72
73}}
74#endif
75
76// STATISTICS: flatzinc-any
Symbol table mapping identifiers (strings) to values.
bool put(const std::string &key, const Val &val)
Insert val with key.
bool get(const std::string &key, Val &val) const
Return whether key exists, and set val if it does exist.
Interpreter for the FlatZinc language.
Gecode toplevel namespace