zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    雪妖现世:给SAP Fiori Launchpad增添雪花纷飞的效果
    ABAP开发环境语法高亮的那些事儿
    如何使用Prometheus采集SAP ABAP Netweaver的应用日志数据
    如何免费试用SAP的Fiori应用
    使用ABAP绘制可伸缩矢量图
    背景建模
    C# 属性和索引
    Equation
    Phone numbers
    BerOS file system
  • 原文地址:https://www.cnblogs.com/oloroso/p/4599643.html
Copyright © 2011-2022 走看看