void
FieldInstructionStaticTemplateRef::finalize(TemplateRegistry & templateRegistry)
{
  TemplatePtr target;
  if(!templateRegistry.findNamedTemplate(templateName_, templateNamespace_, target))
  {
    std::stringstream exception;
    exception << "[ERR D9] Unknown template name for static templateref." << identity_->name();
    throw QuickFAST::TemplateDefinitionError(exception.str());
  }
  target->finalize(templateRegistry);
  // subtract one for the template ID
  presenceMapBitsUsed_ = target->presenceMapBitCount() - 1;
  fieldCount_ = target->fieldCount();
  isFinalized_ = true;
}
Пример #2
0
void
TemplateRegistry::addTemplate(TemplatePtr value)
{
  template_id_t id = value->getId();
  if(id != 0)
  {
    templates_[id] = value;
  }
  std::string name;
  value->qualifyName(name);
  if(!name.empty())
  {
    namedTemplates_[name] = value;
  }
  mutableTemplates_.push_back(value);
  // TODO: resolve templateRefs before calculating presence map bits.
  //       but that must be deferred to "finalize"
  size_t bits = value->presenceMapBitCount();
  if(bits > presenceMapBits_)
  {
    presenceMapBits_ = bits;
  }
}