【发布时间】:2013-12-04 14:25:30
【问题描述】:
我是一个 C++ 应用程序团队的一员,该应用程序处理各种类型的消息并以各种格式输出它们。出于讨论的目的,可以将消息视为名称-值对的集合。这些值通常是数字,但也可以是字符串。消息的结构基本上是在处理时被发现的。 消息可以任意大,因此不允许在内存中存储表示。消息一次处理一个名称-值对。 消息可以具有内部结构,该结构由名称-值对中的名称捕获。一个很好的类比是考虑目录层次结构中的文件名。
我正在开发一个处理这些消息并使用低级 HDF5 API 生成 HDF 输出的子系统。由于我上面描述的限制,我使用的方法涉及两次传递消息。在第一遍中,我收集布局信息并构建复合数据类型和数据集。然后我再次传递消息以写出值。因为我一次写入一个值,所以我有一个这样的序列:
// name, value, dataType, dtSize, ctDataSet and ctSpace have been defined elsewhere
hid_t valueDT = H5Tcreate(H5T_COMPOUND, dtSize);
herr_t status = H5Tinsert(valueDT, name, 0, dataType);
hid_t filespace = H5Dget_space(ctDataSet);
hsize_t offset[] = { 0 };
hsize_t dim[] = [ 1 };
status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
dim, NULL);
status = H5Dwrite(ctDataSet, valueDT, ctSpace, filespace, H5P_DEFAULT, &value);
我已经完成了这项工作,现在我正在尝试扩展它以处理嵌套的复合数据类型。我已经完成了第一次传球,但我被困在第二次传球上。 sn-p 中的代码构建一个与值关联的独立数据类型,为其命名与数据集中已存在的字段对应的名称,然后哄骗 HDF5 将值作为数据集的一部分写出。 我意识到我没有明确说明所使用的名称。假设我们正在查看 position 中的字段 x。使用的名称将是 position.x。
当值属于内部复合数据类型时,我对如何建立这种关联感到困惑。任何见解都将不胜感激。
【问题讨论】: