blob: b9574e28818d3d0972a3ec0b5ad50be1a8fde013 [file] [log] [blame] [edit]
#ifndef VTR_SENTINELS_H
#define VTR_SENTINELS_H
namespace vtr {
//Some specialized containers like vtr::linear_map and
//vtr::vector_map require sentinel values to mark invalid/uninitialized
//values. By convention, such containers query the sentinel objects static
//INVALID() member function to retrieve the sentinel value.
//
//These classes allows users to specify a custom sentinel value.
//
//Usually the containers default to DefaultSentinel
//The sentinel value is the default constructed value of the type
template<class T>
class DefaultSentinel {
public:
constexpr static T INVALID() { return T(); }
};
//Specialization for pointer types
template<class T>
class DefaultSentinel<T*> {
public:
constexpr static T* INVALID() { return nullptr; }
};
//The sentile value is a specified value of the type
template<class T, T val>
class CustomSentinel {
public:
constexpr static T INVALID() { return T(val); }
};
//The common case where -1 is used as the sentinel value
template<class T>
using MinusOneSentinel = CustomSentinel<T,-1>;
} //namespace
#endif