in cpp/src/TypedIndex.h [253:285]
float getDistance(std::vector<float> _a, std::vector<float> _b) {
if ((int)_a.size() != dimensions || (int)_b.size() != dimensions) {
throw std::runtime_error("Index has " + std::to_string(dimensions) +
" dimensions, but received vectors of size: " +
std::to_string(_a.size()) + " and " +
std::to_string(_b.size()) + ".");
}
int actualDimensions =
useOrderPreservingTransform ? dimensions + 1 : dimensions;
std::vector<data_t> a(actualDimensions);
std::vector<data_t> b(actualDimensions);
if (useOrderPreservingTransform) {
size_t dotFactorA = getDotFactorAndUpdateNorm(_a.data());
_a.push_back(dotFactorA);
size_t dotFactorB = getDotFactorAndUpdateNorm(_b.data());
_b.push_back(dotFactorB);
}
if (normalize) {
normalizeVector<dist_t, data_t, scalefactor>(_a.data(), a.data(),
a.size());
normalizeVector<dist_t, data_t, scalefactor>(_b.data(), b.data(),
b.size());
} else {
floatToDataType<data_t, scalefactor>(_a.data(), a.data(), a.size());
floatToDataType<data_t, scalefactor>(_b.data(), b.data(), b.size());
}
return spaceImpl->get_dist_func()(a.data(), b.data(), actualDimensions);
}