380 {
381 if (linkIndex == 0 && linkKey == 0)
382 {
384 return;
385 }
386
387 unsigned targetIndex = 0
u;
389 ++ targetIndex;
390
391
392
393
394
395
396
397
398
400 {
402 {
405 {
407 allowedSet.insert(i);
408 }
409 }
411 for (auto iter = allowedSet.begin(); iter != allowedSet.end();)
412 {
415 if (eventIndex + 1 >= targetOffsetColumn.size())
416 throw std::runtime_error (
"target offset column not yet filled for: " +
m_targetNames.at(index));
417 if (targetOffsetColumn.at(eventIndex) + linkIndex >= targetOffsetColumn.at(eventIndex + 1))
418 iter = allowedSet.erase(iter);
419 else
421 }
422
423
424
425
426
427
428
429
431 {
433 targetIndex = *allowedSet.begin();
434 else
435 {
436 std::ostringstream
error;
437 error <<
"target key mismatch: read sgkey " << std::hex << linkKey << std::dec;
440 {
443 {
444 error <<
", alternate key found for non-variant link:";
446 {
447 if (key != linkKey)
448 error <<
" " << std::hex <<
key << std::dec;
449 }
450 } else
451 {
453 }
454 throw std::runtime_error (std::move (error).
str());
455 }
456 }
457 }
458
460 {
461
462
464 return;
465 }
466
468 if (eventIndex + 1 >= targetOffsetColumn.size())
469 throw std::runtime_error (
"target offset column not yet filled for: " +
m_targetNames.at(targetIndex));
470 auto myLinkIndex =
linkIndex + targetOffsetColumn.at(eventIndex);
471 if (myLinkIndex >= targetOffsetColumn.at(eventIndex + 1))
472 throw std::runtime_error (
"index out of range for link: " +
m_columnName +
" with element index " + std::to_string(linkIndex) +
" targeting " +
m_targetNames.at(targetIndex) +
" with offset " + std::to_string(targetOffsetColumn.at(eventIndex)) +
" and next offset " + std::to_string(targetOffsetColumn.at(eventIndex + 1)));
473
475 }
std::vector< SG::sgkey_t > m_targetKeys
std::vector< const std::vector< ColumnarOffsetType > * > m_targetOffsetColumns
std::vector< std::vector< typename CM::LinkKeyType > > m_keysColumns
@ u
Enums for curvilinear frames.
@ linkIndex
link index for multiple track and vertex matches
static LinkIndexType mergeLinkKeyIndex(LinkIndexType key, LinkIndexType index)
merge a key and index value into a link value