// Copyright 2014 The Crashpad Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef CRASHPAD_CLIENT_SIMPLE_STRING_DICTIONARY_H_ #define CRASHPAD_CLIENT_SIMPLE_STRING_DICTIONARY_H_ #include <string.h> #include <sys/types.h> #include <algorithm> #include <string_view> #include <type_traits> #include "base/check_op.h" #include "util/misc/implicit_cast.h" namespace crashpad { //! \brief A map/dictionary collection implementation using a fixed amount of //! storage, so that it does not perform any dynamic allocations for its //! operations. //! //! The actual map storage (TSimpleStringDictionary::Entry) is guaranteed to be //! POD, so that it can be transmitted over various IPC mechanisms. //! //! The template parameters control the amount of storage used for the key, //! value, and map. The \a KeySize and \a ValueSize are measured in bytes, not //! glyphs, and include space for a trailing `NUL` byte. This gives space for //! `KeySize - 1` and `ValueSize - 1` characters in an entry. \a NumEntries is //! the total number of entries that will fit in the map. template <size_t KeySize = 256, size_t ValueSize = 256, size_t NumEntries = 64> class TSimpleStringDictionary { … }; //! \brief A TSimpleStringDictionary with default template parameters. //! //! For historical reasons this specialized version is available with the same //! size factors as a previous implementation. SimpleStringDictionary; static_assert …; } // namespace crashpad #endif // CRASHPAD_CLIENT_SIMPLE_STRING_DICTIONARY_H_