33 MetaData(
const MetaData &other)
noexcept =
delete;
34 MetaData &operator=(
const MetaData &other) =
delete;
35 MetaData(MetaData &&other)
noexcept =
default;
36 MetaData &operator=(MetaData &&other) =
default;
37 ~MetaData() =
default;
60 GetField(fieldId, val);
83 WriteFieldTyped(fieldId, value);
96 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetFieldnameAsStringTyped(
97 handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId),
reinterpret_cast<Char *
>(NULL), sz));
99 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetFieldnameAsStringTyped(
100 handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), cvbVal.data(), sz));
101 return String(cvbVal.data());
113 auto fieldType = CFieldType(fieldId);
125 auto valOut = Internal::DoResCallValueOut<size_t>(
126 [&](
size_t &val) {
return CVB_CALL_CAPI(CVSMetaDataGetNumberOfFields(handle_.Handle(), val)); });
127 return static_cast<int>(valOut);
138 Internal::DoResCall([&]() {
139 return CVB_CALL_CAPI(CVSMetaDataClearField(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId)));
152 auto valOut = Internal::DoResCallValueOut<CExports::cvbbool_t>([&](CExports::cvbbool_t &isDefined) {
153 return CVB_CALL_CAPI(
154 CVSMetaDataIsFieldDefined(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), isDefined));
156 return valOut ? true :
false;
201 std::transform(interleaveStr.begin(), interleaveStr.end(), interleaveStr.begin(),
202 [](String::value_type ch) { return static_cast<String::value_type>(std::toupper(ch)); });
203 if (interleaveStr == CVB_LIT(
"BIL"))
205 if (interleaveStr == CVB_LIT(
"BSQ"))
207 if (interleaveStr == CVB_LIT(
"BIP"))
232 return Internal::DoResCallObjectOut<MetaData>(
233 [&](
void *&metaDataOut) {
return CVB_CALL_CAPI(CVSCreateMetaData(metaDataOut)); });
243 return handle_.Handle();
263 explicit MetaData(HandleGuard<MetaData> &&guard) noexcept
268 void GetField(
FieldID fieldId,
int &valueOut)
const
270 CExports::cvbint64_t cvbVal = 0;
271 CVB_CALL_CAPI_CHECKED(
272 CVSMetaDataGetAsInteger(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), cvbVal));
273 valueOut =
static_cast<int>(cvbVal);
276 void GetField(
FieldID fieldId,
double &valueOut)
const
279 CVB_CALL_CAPI_CHECKED(
280 CVSMetaDataGetAsFloat(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), cvbVal));
287 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetAsStringTyped(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId),
288 reinterpret_cast<char *
>(NULL), sz));
289 std::vector<char> cvbVal(sz);
290 CVB_CALL_CAPI_CHECKED(
291 CVSMetaDataGetAsStringTyped(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), cvbVal.data(), sz));
292 std::string str(cvbVal.data());
293 valueOut =
String(str.begin(), str.end());
296 void GetField(
FieldID fieldId, std::vector<int> &valueOut)
const
299 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetArraySize(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), sz));
300 std::vector<int> cvbVal(sz);
301 for (CExports::cvbval_t i = 0; i < static_cast<CExports::cvbval_t>(sz); ++i)
303 CExports::cvbint64_t cvbElement = 0;
304 CVB_CALL_CAPI_CHECKED(
305 CVSMetaDataGetAsIntegerArray(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), i, cvbElement));
306 cvbVal.at(i) =
static_cast<int>(cvbElement);
308 valueOut = std::move(cvbVal);
311 void GetField(
FieldID fieldId, std::vector<double> &valueOut)
const
314 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetArraySize(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), sz));
315 std::vector<double> cvbVal(sz);
316 for (CExports::cvbval_t i = 0; i < static_cast<CExports::cvbval_t>(sz); ++i)
318 double cvbElement = 0;
319 CVB_CALL_CAPI_CHECKED(
320 CVSMetaDataGetAsFloatArray(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), i, cvbElement));
321 cvbVal.at(i) =
static_cast<double>(cvbElement);
323 valueOut = std::move(cvbVal);
326 void GetField(
FieldID fieldId, std::vector<String> &valueOut)
const
329 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetArraySize(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), sz));
330 std::vector<String> cvbVal(sz);
332 for (CExports::cvbval_t i = 0; i < static_cast<CExports::cvbval_t>(sz); ++i)
335 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetAsStringArrayTyped(
336 handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), i,
reinterpret_cast<char *
>(NULL), szString));
337 std::vector<char> cvbElement(szString);
338 CVB_CALL_CAPI_CHECKED(CVSMetaDataGetAsStringArrayTyped(
339 handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), i, cvbElement.data(), szString));
340 std::string tmpStr(cvbElement.data());
341 cvbVal.at(i) =
String(tmpStr.begin(), tmpStr.end());
344 valueOut = std::move(cvbVal);
347 void WriteFieldTyped(
FieldID fieldId,
const int &value)
349 CVB_CALL_CAPI_CHECKED(CVSMetaDataSetAsInteger(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId),
350 static_cast<CExports::cvbint64_t
>(value)));
353 void WriteFieldTyped(
FieldID fieldId,
const double &value)
355 CVB_CALL_CAPI_CHECKED(CVSMetaDataSetAsFloat(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), value));
360 CVB_CALL_CAPI_CHECKED(
361 CVSMetaDataSetAsStringTyped(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), value.c_str()));
364 void WriteFieldTyped(
FieldID fieldId,
const std::vector<int> &value)
366 CVB_CALL_CAPI_CHECKED(CVSMetaDataClearField(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId)));
368 CVB_CALL_CAPI_CHECKED(CVSMetaDataAddToIntegerArray(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId),
369 static_cast<CExports::cvbint64_t
>(e)));
372 void WriteFieldTyped(
FieldID fieldId,
const std::vector<double> &value)
374 CVB_CALL_CAPI_CHECKED(CVSMetaDataClearField(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId)));
376 CVB_CALL_CAPI_CHECKED(CVSMetaDataAddToFloatArray(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId),
377 static_cast<double>(e)));
380 void WriteFieldTyped(
FieldID fieldId,
const std::vector<String> &value)
382 CVB_CALL_CAPI_CHECKED(CVSMetaDataClearField(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId)));
384 CVB_CALL_CAPI_CHECKED(
385 CVSMetaDataAddToStringArrayTyped(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), e.c_str()));
394 CExports::CVSFieldType CFieldType(
FieldID fieldId)
const
396 return Internal::DoResCallValueOut<CExports::CVSFieldType>([&](CExports::CVSFieldType &val) {
397 return CVB_CALL_CAPI(
398 CVSMetaDataGetFieldType(handle_.Handle(),
static_cast<CExports::CVSField
>(fieldId), val));
403 HandleGuard<MetaData> handle_;