greenplumn CEnumSet 源码

  • 2022-08-18
  • 浏览 (327)

greenplumn CEnumSet 代码

文件路径:/src/backend/gporca/libgpos/include/gpos/common/CEnumSet.h

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2009 Greenplum, Inc.
//
//	@filename:
//		CEnumSet.h
//
//	@doc:
//		Implementation of set of enums as bitset
//---------------------------------------------------------------------------
#ifndef GPOS_CEnumSet_H
#define GPOS_CEnumSet_H

#include "gpos/base.h"
#include "gpos/common/CBitSet.h"


namespace gpos
{
//---------------------------------------------------------------------------
//	@class:
//		CEnumSet
//
//	@doc:
//		Template derived from CBitSet
//
//---------------------------------------------------------------------------
template <class T, ULONG sentinel_index>
class CEnumSet : public CBitSet
{
private:
public:
	CEnumSet<T, sentinel_index>(const CEnumSet<T, sentinel_index> &) = delete;

	// ctor
	explicit CEnumSet<T, sentinel_index>(CMemoryPool *mp)
		: CBitSet(mp, sentinel_index)
	{
	}

	explicit CEnumSet<T, sentinel_index>(
		CMemoryPool *mp, const CEnumSet<T, sentinel_index> &enum_set)
		: CBitSet(mp, enum_set)
	{
	}

	// dtor
	~CEnumSet<T, sentinel_index>() override = default;

	// determine if bit is set
	BOOL
	Get(T t) const
	{
		GPOS_ASSERT(t >= 0);

		ULONG bit_index = static_cast<ULONG>(t);
		GPOS_ASSERT(bit_index < sentinel_index && "Out of range of enum");

		return CBitSet::Get(bit_index);
	}

	// set given bit; return previous value
	BOOL
	ExchangeSet(T t)
	{
		GPOS_ASSERT(t >= 0);

		ULONG bit_index = static_cast<ULONG>(t);
		GPOS_ASSERT(bit_index < sentinel_index && "Out of range of enum");

		return CBitSet::ExchangeSet(bit_index);
	}

	// clear given bit; return previous value
	BOOL
	ExchangeClear(T t)
	{
		GPOS_ASSERT(t >= 0);

		ULONG bit_index = static_cast<ULONG>(t);
		GPOS_ASSERT(bit_index < sentinel_index && "Out of range of enum");

		return CBitSet::ExchangeClear(bit_index);
	}

};	// class CEnumSet
}  // namespace gpos

#endif	// !GPOS_CEnumSet_H

// EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CAutoP 源码

greenplumn CAutoRef 源码

greenplumn CAutoRg 源码

greenplumn CAutoTimer 源码

greenplumn CBitSet 源码

greenplumn CBitSetIter 源码

greenplumn CBitVector 源码

greenplumn CDebugCounter 源码

greenplumn CDouble 源码

greenplumn CDynamicPtrArray 源码

0  赞