gpt4 book ai didi

c - 哈希表遍历操作

转载 作者:行者123 更新时间:2023-11-30 17:04:04 25 4
gpt4 key购买 nike

我有以下指向表示事件语音流的结构的指针哈希表的实现。

hash_table_t stream_buffers;
struct stream_struct *streamPtr =
(struct streamPtr *) malloc(sizeof(struct stream_struct));
...
case CTRL_MSG_TYPE_STREAM_START_REQ:
(hash_table_insert(stream_buffers, stream_id, streamPtr));

当我从 UDP 套接字接收到语音数据报时,我会进行查找并将该数据报插入到目标流的本地环形缓冲区中。

if (hash_table_search(stream_buffers, _stream_id, (void **) &streamPtr))
{
streamPtr->ringBuffer.entries[streamPtr->ringBuffer.head] = datagramBuff;
memcpy(streamPtr->ringBuffer.entries[streamPtr->ringBuffer.head],
2 * sizeof(uint16_t) + datagramBuff,
streamPtr->framelegnth);
streamPtr->ringBuffer.head =
(streamPtr->ringBuffer.head + streamPtr->framelegnth)
% streamPtr->ringBuffer.size;

if (streamPtr->ringBuffer.filled < streamPtr->ringBuffer.size)
streamPtr->ringBuffer.filled++;
}

现在我想并行处理来自不同流的这些语音帧。为此,我需要遍历哈希表并收集指向公共(public)数组中事件流的所有指针,该数组将用作 PARALLEL_FOR 循环的参数以进行操作。我当前的哈希表实现没有这样的操作。我该如何实现?

最佳答案

从变量名和语音主语猜测,并假设CMU的Sphinx项目正在进行

除了该项目的 hash_table.h

typedef struct hash_entry_s {
const char *key;
size_t len;
void *val;
struct hash_entry_s *next;
} hash_entry_t;

typedef struct {
hash_entry_t *table;
int32 size;
int32 inuse;
int32 nocase;
} hash_table_t;

基于这些结构,您需要从hash_table_t记录内的hash_entry_t指针table开始。

沿着next指针链从该链的头部开始,直到到达NULL。

您想要收集的数据可能保存在每个记录的 void 指针 val 中,但我不确定。检查那里是否是指向您正在查找的数据包组的指针

编辑

我怀疑函数 hash_table_tolist( ... ) 执行了我刚才描述的操作

关于c - 哈希表遍历操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com