greenplumn CHashMapIter 源码
greenplumn CHashMapIter 代码
文件路径:/src/backend/gporca/libgpos/include/gpos/common/CHashMapIter.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 EMC Corp.
//
// @filename:
// CHashMapIter.h
//
// @doc:
// Hash map iterator
//---------------------------------------------------------------------------
#ifndef GPOS_CHashMapIter_H
#define GPOS_CHashMapIter_H
#include "gpos/base.h"
#include "gpos/common/CDynamicPtrArray.h"
#include "gpos/common/CHashMap.h"
#include "gpos/common/CStackObject.h"
namespace gpos
{
//---------------------------------------------------------------------------
// @class:
// CHashMapIter
//
// @doc:
// Hash map iterator
//
//---------------------------------------------------------------------------
template <class K, class T, ULONG (*HashFn)(const K *),
BOOL (*EqFn)(const K *, const K *), void (*DestroyKFn)(K *),
void (*DestroyTFn)(T *)>
class CHashMapIter : public CStackObject
{
// short hand for hashmap type
using TMap = CHashMap<K, T, HashFn, EqFn, DestroyKFn, DestroyTFn>;
private:
// map to iterate
const TMap *m_map;
// current hashchain
ULONG m_chain_idx;
// current key
ULONG m_key_idx;
// is initialized?
BOOL m_is_initialized;
// method to return the current element
const typename TMap::CHashMapElem *
Get() const
{
typename TMap::CHashMapElem *elem = nullptr;
K *k = (*(m_map->m_keys))[m_key_idx - 1];
elem = m_map->Lookup(k);
return elem;
}
public:
CHashMapIter(const CHashMapIter<K, T, HashFn, EqFn, DestroyKFn, DestroyTFn>
&) = delete;
// ctor
CHashMapIter<K, T, HashFn, EqFn, DestroyKFn, DestroyTFn>(TMap *ptm)
: m_map(ptm), m_chain_idx(0), m_key_idx(0)
{
GPOS_ASSERT(nullptr != ptm);
}
// dtor
virtual ~CHashMapIter<K, T, HashFn, EqFn, DestroyKFn, DestroyTFn>() =
default;
// advance iterator to next element
BOOL
Advance()
{
if (m_key_idx < m_map->m_keys->Size())
{
m_key_idx++;
return true;
}
return false;
}
// current key
const K *
Key() const
{
const typename TMap::CHashMapElem *elem = Get();
if (nullptr != elem)
{
return elem->Key();
}
return nullptr;
}
// current value
const T *
Value() const
{
const typename TMap::CHashMapElem *elem = Get();
if (nullptr != elem)
{
return elem->Value();
}
return nullptr;
}
}; // class CHashMapIter
} // namespace gpos
#endif // !GPOS_CHashMapIter_H
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦