From 2b152d09881559a0330b3ff923e03e715777c6c3 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Wed, 27 Feb 2019 20:45:17 -0500 Subject: Initial commit (by Pink!) --- identifier.h | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 identifier.h (limited to 'identifier.h') diff --git a/identifier.h b/identifier.h new file mode 100644 index 0000000..74d83ce --- /dev/null +++ b/identifier.h @@ -0,0 +1,59 @@ +#ifndef IDENTIFIER_H_D7EE5679 +#define IDENTIFIER_H_D7EE5679 + +#include +#include + +template +class identifier { +public: + + using value_type = T; + +private: + + using vector_type = std::vector; + +public: + + using key_type = typename vector_type::size_type; + + key_type add(const value_type& val) + { + auto it = ids_.find(val); + + if (it == std::end(ids_)) + { + key_type ret = ids_.size(); + ids_[val] = ret; + + uniq_.push_back(val); + + return ret; + } else { + return it->second; + } + } + + void compile() + { + ids_.clear(); + } + + inline const value_type& get(key_type i) const + { + return uniq_.at(i); + } + + inline key_type size() const + { + return uniq_.size(); + } + +private: + + std::map ids_; + vector_type uniq_; +}; + +#endif /* end of include guard: IDENTIFIER_H_D7EE5679 */ -- cgit 1.4.1