/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright: * 2014-2018 Danny Robson * 2022 Danny Robson */ #pragma once #include "view.hpp" #include #include namespace cruft { class stringid { public: typedef size_t id_t; /////////////////////////////////////////////////////////////////////// /// Returns the ID for the supplied string, or creates and returns a /// new ID if the string is not present. id_t operator[] (std::string_view const&); // provided for symmetry with std member names id_t at (std::string_view const &name) const { return find (name); } /////////////////////////////////////////////////////////////////////// id_t add (std::string); //--------------------------------------------------------------------- template id_t add (cruft::view key) { return add ( std::string{ std::cbegin (key), std::cend (key) } ); } /////////////////////////////////////////////////////////////////////// id_t find (std::string_view const&) const; //--------------------------------------------------------------------- template id_t find (cruft::view key) const { return find ( std::string_view { std::cbegin (key), std::cend (key) } ); } /////////////////////////////////////////////////////////////////////// /// Returns the underlying string that an id maps to. /// /// If there is no such id then a std::out_of_range exception is /// thrown. std::string const& key (id_t id) const&; /////////////////////////////////////////////////////////////////////// void clear (void) noexcept; std::size_t size (void) const noexcept; private: std::map> m_map; }; }