作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下指向表示事件语音流的结构的指针哈希表的实现。
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/
我是一名优秀的程序员,十分优秀!