HDF5に別の構造体へのポインタを含む構造体を書き込もうとしています。このような何か:HDF5:別の構造体へのポインタを含む構造体を書き込む複合データ型
typedef struct{
int32_t method;
void* methodParams;
float result;
}Measure;
typedef struct{
int32_t param1;
int32_t param2;
}OneMethod;
複合データ型が動作しない記述するために、次のコード:
Measure value;
hid_t method_tid;
hid_t measure_tid;
method_tid = H5Tcreate(H5T_COMPOUND, sizeof(OneMethod));
H5Tinsert(method_tid, "P1", HOFFSET(OneMethod, param1), H5T_NATIVE_INT32);
H5Tinsert(method_tid, "P2", HOFFSET(OneMethod, param2), H5T_NATIVE_INT32);
measure_tid = H5Tcreate(H5T_COMPOUND, sizeof(Measure));
H5Tinsert(measure_tid, "Method", HOFFSET(Measure, method), H5T_NATIVE_INT32);
H5Tinsert(measure_tid, "Params", HOFFSET(Measure, methodParams), method_tid);
H5Tinsert(measure_tid, "Result", HOFFSET(Measure, result), H5T_NATIVE_FLOAT);
hsize_t dim[] = { 1 };
hid_t space = H5Screate_simple(1, dim, NULL);
hid_t dataset = H5Dcreate(objid, name, measure_tid, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
herr_t ret = H5Dwrite(dataset, measure_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &value);
H5Tclose(method_tid);
H5Tclose(measure_tid);
H5Sclose(space);
H5Dclose(dataset);
複合データ型が書かれているが、methodParams
フィールドが欠落しています。私はライブラリがその位置にポインタを期待するように指示していないので推測します。どうすればいいですか?
EDIT
は、(最初の構造体のフィールドによって与えられた)それぞれの方法が異なる量と種類のパラメータのを持っているので、構造体のポインタであることをご検討ください。もちろん、構造体の最初のレベルのすべてのメソッドのすべてのパラメータをマージする方法がありますが、これは避けたいものです。
ありがとう、私はそれを理解していますが、これは私がすでに考えているものであり、避けたいものです。私の編集内容を見てください。他のアイデア? –
あなたがしたいことをするための簡単な方法はありません。 –
HDF5ライブラリのI/Oコールは、最小限の変換でデータのバッファを消費し、放出します。基本的に変換と(圧縮)フィルタを入力するだけです。ポインタを追跡したり、複雑なデータ構造を平坦化することはありません。データのパッキングとアンパックは、クライアントに任されます。 –