Esempio n. 1
0
static TRI_key_generator_t* CreateGenerator (const TRI_json_t* const parameters) {
  TRI_key_generator_t* generator;
  generator_type_e     type;

  type = GeneratorType(parameters);

  if (type == TYPE_UNKNOWN) {
    return NULL;
  }

  generator = (TRI_key_generator_t*) TRI_Allocate(TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_key_generator_t), false);

  if (generator == NULL) {
    return NULL;
  }

  generator->_data         = NULL;

  if (type == TYPE_TRADITIONAL) {
    generator->init        = &TraditionalInit;
    generator->generate    = &TraditionalGenerate;
    generator->free        = &TraditionalFree;
    generator->track       = NULL;
    generator->toJson      = &TraditionalToJson;
  }
  else if (type == TYPE_AUTOINCREMENT) {
    generator->init        = &AutoIncrementInit;
    generator->generate    = &AutoIncrementGenerate;
    generator->free        = &AutoIncrementFree;
    generator->track       = &AutoIncrementTrack;
    generator->toJson      = &AutoIncrementToJson;
  }

  return generator;
}
 inline TargetType operator()(const SourceType& source) const {
     const auto center = source.getCenter();
     const auto radius = source.getRadius();
     static const auto extend = typename VectorSpaceType::VectorType(GeneratorType(ScalarFieldType::multiplicativeNeutral()),
                                                                     std::make_index_sequence<VectorSpaceType::VectorType::dimensionality()>{}) * radius;
     return TargetType(center - extend, center + extend);
 }