/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* 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/. */
/* EnumeratedArray is like Array, but indexed by a typed enum. */
/** * EnumeratedArray is a fixed-size array container for use when an * array is indexed by a specific enum class. * * This provides type safety by guarding at compile time against accidentally * indexing such arrays with unrelated values. This also removes the need * for manual casting when using a typed enum value to index arrays. * * Aside from the typing of indices, EnumeratedArray is similar to Array. * * Example: * * enum class AnimalSpecies { * Cow, * Sheep, * Count * }; * * EnumeratedArray<AnimalSpecies, int, AnimalSpecies::Count> headCount; * * headCount[AnimalSpecies::Cow] = 17; * headCount[AnimalSpecies::Sheep] = 30; * * If the enum class has contiguous values and provides a specialization of * mozilla::MaxContiguousEnumValue then the size will be calculated as the max * value + 1.
*/ template <typenameEnum, typename ValueType,
size_t Size = ContiguousEnumSize<Enum>::value> class EnumeratedArray { private:
static_assert(UnderlyingValue(MinContiguousEnumValue<Enum>::value) == 0, "All indexes would need to be corrected if min != 0");
using iterator = typename ArrayType::iterator; using const_iterator = typename ArrayType::const_iterator; using reverse_iterator = typename ArrayType::reverse_iterator; using const_reverse_iterator = typename ArrayType::const_reverse_iterator;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.