13 HashTable抽象哈希表类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。
本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso/
本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso
HashTable抽象哈希表类#
HashTable
类内部嵌套定义了一个迭代器类Iterator
,这个迭代器类用于循环访问表的成员
。这也是一个抽象类
,但是其有一个静态的方法static Iterator* create(HashTable& hashTable)
;这个方法用于创建一个BasicHashTable::Iterator
对象,并返回其地址。
HashTable的定义#
class HashTable { public: virtual ~HashTable(); // The following must be implemented by a particular // implementation (subclass): static HashTable* create(int keyType); virtual void* Add(char const* key, void* value) = 0; // Returns the old value if different, otherwise 0 virtual Boolean Remove(char const* key) = 0; virtual void* Lookup(char const* key) const = 0; // Returns 0 if not found virtual unsigned numEntries() const = 0; Boolean IsEmpty() const { return numEntries() == 0; } // Used to iterate through the members of the table: class Iterator { public: // The following must be implemented by a particular // implementation (subclass): static Iterator* create(HashTable& hashTable); virtual ~Iterator(); virtual void* next(char const*& key) = 0; // returns 0 if none protected: Iterator(); // abstract base class }; // A shortcut that can be used to successively remove each of // the entries in the table (e.g., so that their values can be // deleted, if they happen to be pointers to allocated memory). void* RemoveNext(); protected: HashTable(); // abstract base class };
迭代器HashTable:: Iterator ::create方法#
这个就不说了,代码很简单。要注意的是,其创建的是BasicHashTable::Iterator
对象。BasicHashTable::Iterator
是HashTable::Iterator
的派生类。还有,这是一个static
方法。
HashTable::Iterator* HashTable::Iterator::create(HashTable& hashTable) { // "hashTable" is assumed to be a BasicHashTable return new BasicHashTable::Iterator((BasicHashTable&)hashTable); }
HashTable::create方法#
我们前面说了HashTable
是一个抽象了,其定义的create
方法是一个静态
方法,实质上是调用的派生类的构造函数来创建的对象并返回。
HashTable* HashTable::create(int keyType) { return new BasicHashTable(keyType); }
HashTable::RemoveNext方法#
RemoveNext
方法不是纯虚
接口。其先创建了一个绑定到自身的迭代器
,然后获取迭代器当前指向的节点(因为这里刚创建,所以就是第一个),然后将其从哈希表中移除(并销毁)。
void* HashTable::RemoveNext() { Iterator* iter = Iterator::create(*this); char const* key; void* removedValue = iter->next(key); if (removedValue != 0) Remove(key); delete iter; return removedValue; }
分类:
C/C++
, live555源码阅读
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理