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); }