#pragma once
#include <memory>
#include <new>
#include <type_traits>
#include <utility>
#include <folly/Memory.h>
#include <folly/Portability.h>
#include <folly/Traits.h>
#include <folly/Unit.h>
#include <folly/container/HeterogeneousAccess.h>
#include <folly/container/detail/F14Table.h>
#include <folly/hash/Hash.h>
#include <folly/lang/Align.h>
#include <folly/lang/SafeAssert.h>
#include <folly/memory/Malloc.h>
#if FOLLY_F14_VECTOR_INTRINSICS_AVAILABLE
namespace folly {
namespace f14 {
namespace detail {
NonConstPtr;
MapValueType;
SetOrMapValueType;
IsNothrowMoveAndDestroy;
template <
char Tag,
typename T,
bool Inherit = std::is_empty<T>::value && !std::is_final<T>::value>
struct ObjectHolder { … };
ObjectHolder<Tag, T, true>;
template <
typename KeyType,
typename MappedTypeOrVoid,
typename HasherOrVoid,
typename KeyEqualOrVoid,
typename AllocOrVoid,
typename ItemType>
struct FOLLY_MSVC_DECLSPEC(empty_bases) BasePolicy
: private ObjectHolder<
'H',
Defaulted<HasherOrVoid, DefaultHasher<KeyType>>>,
private ObjectHolder<
'E',
Defaulted<KeyEqualOrVoid, DefaultKeyEqual<KeyType>>>,
private ObjectHolder<
'A',
Defaulted<
AllocOrVoid,
DefaultAlloc<SetOrMapValueType<KeyType, MappedTypeOrVoid>>>> { … };
template <typename ValuePtr, typename Item>
class BaseIter { … };
template <
typename Key,
typename Mapped,
typename HasherOrVoid,
typename KeyEqualOrVoid,
typename AllocOrVoid>
class ValueContainerPolicy;
ValueContainerIteratorBase;
template <typename ValuePtr>
class ValueContainerIterator : public ValueContainerIteratorBase<ValuePtr> { … };
template <
typename Key,
typename MappedTypeOrVoid,
typename HasherOrVoid,
typename KeyEqualOrVoid,
typename AllocOrVoid>
class ValueContainerPolicy : public BasePolicy<
Key,
MappedTypeOrVoid,
HasherOrVoid,
KeyEqualOrVoid,
AllocOrVoid,
SetOrMapValueType<Key, MappedTypeOrVoid>> { … };
template <
typename Key,
typename Mapped,
typename HasherOrVoid,
typename KeyEqualOrVoid,
typename AllocOrVoid>
class NodeContainerPolicy;
template <typename ValuePtr>
class NodeContainerIterator : public BaseIter<ValuePtr, NonConstPtr<ValuePtr>> { … };
template <
typename Key,
typename MappedTypeOrVoid,
typename HasherOrVoid,
typename KeyEqualOrVoid,
typename AllocOrVoid>
class NodeContainerPolicy
: public BasePolicy<
Key,
MappedTypeOrVoid,
HasherOrVoid,
KeyEqualOrVoid,
AllocOrVoid,
typename std::allocator_traits<Defaulted<
AllocOrVoid,
DefaultAlloc<std::conditional_t<
std::is_void<MappedTypeOrVoid>::value,
Key,
MapValueType<Key, MappedTypeOrVoid>>>>>::pointer> { … };
template <
typename Key,
typename MappedTypeOrVoid,
typename HasherOrVoid,
typename KeyEqualOrVoid,
typename AllocOrVoid,
typename EligibleForPerturbedInsertionOrder>
class VectorContainerPolicy;
template <typename ValuePtr>
class VectorContainerIterator : public BaseIter<ValuePtr, uint32_t> { … };
struct VectorContainerIndexSearch { … };
template <
typename Key,
typename MappedTypeOrVoid,
typename HasherOrVoid,
typename KeyEqualOrVoid,
typename AllocOrVoid,
typename EligibleForPerturbedInsertionOrder>
class VectorContainerPolicy : public BasePolicy<
Key,
MappedTypeOrVoid,
HasherOrVoid,
KeyEqualOrVoid,
AllocOrVoid,
uint32_t> { … };
MapPolicyWithDefaults;
SetPolicyWithDefaults;
}
}
}
#endif