16 BasicHashTable基本哈希表类(三)——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类。
本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso/
本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso
哈希表的增删查改#
这是BasicHashTable基本哈希表类源码分析的最后一个部分,即哈希表的基本操作方法。这里时间没有直接给出修改条目的方法,因为它包含在了add
方法中。
Add方法(增加条目)#
Add
方法先从哈希表中查找参数key
对应的条目是否存在,存在
的话替换value
,不存在
就创建一个条目
,并加入哈希表。如果加入后哈希表的条目过多了,就重建哈希表。其返回值为原来key
对应条目的value
,如果不存在,返回NULL
。
void* BasicHashTable::Add(char const* key, void* value) { void* oldValue; unsigned index; TableEntry* entry = lookupKey(key, index); if (entry != NULL) { // There's already an item with this key oldValue = entry->value; } else { // There's no existing entry; create a new one: entry = insertNewEntry(index, key); oldValue = NULL; } entry->value = value; // If the table has become too large, rebuild it with more buckets: // 如果该表已经变得太大,重建更多的桶给它: if (fNumEntries >= fRebuildSize) rebuild(); return oldValue; }
Remove方法(删除条目)#
Remove
方法从哈希表中移除key对应的条目
,并进行回收
。如果key
对应的条目在哈希表中存在,返回true
,不存在返回false
。
Boolean BasicHashTable::Remove(char const* key) { unsigned index; TableEntry* entry = lookupKey(key, index); if (entry == NULL) return False; // no such entry deleteEntry(index, entry); return True; } Lookup方法(查找条目) Lookup方法用于从哈希表中查找key对应的条目,如果存在,返回条目的value,如果不存在,返回NULL。 void* BasicHashTable::Lookup(char const* key) const { unsigned index; TableEntry* entry = lookupKey(key, index); if (entry == NULL) return NULL; // no such entry return entry->value; }
Lookup方法(查找条目)#
Lookup方法用于从哈希表中查找key对应的条目,如果存在,返回条目的value,如果不存在,返回NULL。
void* BasicHashTable::Lookup(char const* key) const { unsigned index; TableEntry* entry = lookupKey(key, index); if (entry == NULL) return NULL; // no such entry return entry->value; }
分类:
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编程运行原理