228 current_array_getter(NULL)
268 std::vector<TOutputValueType> values(current_num_values);
310 AutoLock l(GetLock());
315 assert (current_array_getter != NULL);
316 (this->*current_array_getter) (values);
336 if (!base_value || !selector)
342 INodeMap *node_map = base_value->GetNode()->GetNodeMap();
343 if (node_map != selector->GetNode()->GetNodeMap())
350 CStringPtr candidates_node = node_map->GetNode(
"ValueArrayCandidates");
364 GENICAM_NAMESPACE::gcstring_vector tokens;
365 Tokenize(candidates_str, tokens,
",");
369 +
"[" + selector->GetNode()->GetName() +
"]";
370 return tokens.contains (wanted);
372 catch (
const GenICam::GenericException &)
382 template<
typename TFieldType>
383 void GetArrayOfFieldValues (std::vector<TOutputValueType> &values)
385 assert (current_reg_length!=0 && current_address_step != 0);
389 values.resize (current_num_values);
396 ExtractFieldValues_Swap<TFieldType> (current_num_values,
397 static_cast<size_t>(current_address_step),
398 current_array_shadow, &values[0]);
402 ExtractFieldValues_Noswap<TFieldType> (current_num_values,
403 static_cast<size_t>(current_address_step),
404 current_array_shadow, &values[0]);
407 template<
typename TFieldType>
408 void GetArrayOfFieldBits (std::vector<TOutputValueType> &values)
410 assert (current_reg_length!=0 && current_address_step != 0);
414 values.resize (current_num_values);
421 ExtractFieldBits_Swap<TFieldType> (current_num_values,
422 static_cast<size_t>(current_address_step),
424 current_array_shadow, &values[0]);
428 ExtractFieldBits_Noswap<TFieldType> (current_num_values,
429 static_cast<size_t>(current_address_step),
431 current_array_shadow, &values[0]);
438 template<
typename TFieldType>
439 static void ExtractFieldValues_Noswap(
size_t num_values,
size_t address_step,
440 const uint8_t *src, TOutputValueType *dst)
442 for (
size_t i = 0; i < num_values; ++i)
444 const uint8_t *field_ptr = src + i * address_step;
446 TFieldType field_value = *
reinterpret_cast<const TFieldType*
>(field_ptr);
447 dst[i] =
static_cast<TOutputValueType
>(EffectiveValue (field_value));
450 template<
typename TFieldType>
451 static void ExtractFieldValues_Swap(
size_t num_values,
size_t address_step,
452 const uint8_t *src, TOutputValueType *dst)
454 for (
size_t i = 0; i < num_values; ++i)
456 const uint8_t *field_ptr = src + i * address_step;
458 TFieldType field_value = ReadSwapped<TFieldType> (field_ptr);
459 dst[i] =
static_cast<TOutputValueType
>(EffectiveValue (field_value));
462 template<
typename TFieldType>
463 static void ExtractFieldBits_Noswap(
size_t num_values,
size_t address_step,
464 uint64_t mask,
size_t shift,
465 const uint8_t *src, TOutputValueType *dst)
467 for (
size_t i = 0; i < num_values; ++i)
469 const uint8_t *field_ptr = src + i * address_step;
471 TFieldType field_value = *
reinterpret_cast<const TFieldType*
>(field_ptr);
472 uint64_t field_bits = mask & (field_value >> shift);
473 dst[i] =
static_cast<TOutputValueType
>(EffectiveValue (field_bits));
476 template<
typename TFieldType>
477 static void ExtractFieldBits_Swap(
size_t num_values,
size_t address_step,
478 uint64_t mask,
size_t shift,
479 const uint8_t *src, TOutputValueType *dst)
481 for (
size_t i = 0; i < num_values; ++i)
483 const uint8_t *field_ptr = src + i * address_step;
485 TFieldType field_value = ReadSwapped<TFieldType> (field_ptr);
486 uint64_t field_bits = mask & (field_value >> shift);
487 dst[i] =
static_cast<TOutputValueType
>(EffectiveValue (field_bits));
514 assert (
false &&
"Signed MaskeIntReg should be refused in constructor");
519 switch (current_reg_length)
522 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldBits<uint64_t>;
526 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldBits<uint32_t>;
530 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldBits<uint16_t>;
534 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldBits<uint8_t>;
547 switch (current_reg_length)
550 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<int64_t>;
554 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<int32_t>;
558 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<int16_t>;
562 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<int8_t>;
572 switch (current_reg_length)
575 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<uint64_t>;
579 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<uint32_t>;
583 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<uint16_t>;
587 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<uint8_t>;
599 switch (current_reg_length)
602 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<float64_t>;
606 current_array_getter = &CValueArrayAdapter::GetArrayOfFieldValues<float32_t>;
615 template<
typename TRawType>
616 static TEffectiveValueType EffectiveValue (TRawType raw_value)
618 return TypeConverter<TEffectiveValueType>::Convert(raw_value);
621 template<
typename TFieldType>
622 static TFieldType ReadSwapped (
const void *ptr)
625 SwapExtractor<
sizeof(TFieldType)>::Extract (ptr, &result);
630 typedef void (CValueArrayAdapter::*ArrayGetterFunction)(std::vector<TOutputValueType> &values);
631 ArrayGetterFunction current_array_getter;