30 return p1.distance <
p2.distance;
65 std::vector<int32_t>
kVector(numBins+1);
66 decimal binWidth = (max - min) / numBins;
119 binWidth = (max - min) / numBins;
176 std::vector<KVectorPair>
result;
199 std::vector<int32_t>
kVector(numBins+1);
288 std::vector<decimal>
result;
289 for (
int i = 0; i <
NumPairs(); i++) {
290 if (pairs[i*2] == star || pairs[i*2+1] == star) {
291 result.push_back(
AngleUnit(catalog[pairs[i*2]].spatial, catalog[pairs[i*2+1]].spatial));
329 #ifdef LOST_FLOAT_MODE
331 std::cerr <<
"LOST was compiled in float mode. This database was serialized in double mode and is incompatible." << std::endl;
336 std::cerr <<
"LOST was compiled in double mode. This database was serialized in float mode and is incompatible." << std::endl;
A data structure enabling constant-time range queries into fixed numerical data.
KVectorIndex(DeserializeContext *des)
Construct from serialized buffer.
long QueryLiberal(decimal minQueryDistance, decimal maxQueryDistance, long *upperIndex) const
Finds all the entries in the given range, and possibly a few just outside the range on the ends.
long NumValues() const
The number of data points in the data referred to by the kvector.
const unsigned char * SubDatabasePointer(int32_t magicValue) const
MultiDatabase memory layout:
long NumPairs() const
Exact number of stored pairs.
std::vector< decimal > StarDistances(int16_t star, const Catalog &) const
Return the distances from the given star to each star it's paired with in the database (for debugging...
PairDistanceKVectorDatabase(DeserializeContext *des)
Create the database from a serialized buffer.
static const int32_t kMagicValue
Magic value to use when storing inside a MultiDatabase.
const int16_t * FindPairsExact(const Catalog &, decimal min, decimal max, const int16_t **end) const
const int16_t * FindPairsLiberal(decimal min, decimal max, const int16_t **end) const
Return at least all the star pairs whose inter-star distance is between min and max.
#define MULTI_DB_FLOAT_FLAG
A database that contains multiple databases This is almost always the database that is actually passe...
void SerializeKVectorIndex(SerializeContext *ser, const std::vector< decimal > &values, decimal min, decimal max, long numBins)
K-vector index layout.
decimal AngleUnit(const Vec3 &vec1, const Vec3 &vec2)
Calculate the inner angle, in radians, between two /unit/ vectors.
bool CompareKVectorPairs(const KVectorPair &p1, const KVectorPair &p2)
std::vector< KVectorPair > CatalogToPairDistances(const Catalog &catalog, decimal minDistance, decimal maxDistance)
pair K-vector database layout.
void SerializePairDistanceKVector(SerializeContext *ser, const Catalog &catalog, decimal minDistance, decimal maxDistance, long numBins)
Serialize a pair-distance KVector into buffer.
bool isFlagSet(uint32_t dbFlags, uint32_t flag)
void SerializePrimitive(SerializeContext *ser, const T &val)
std::vector< MultiDatabaseEntry > MultiDatabaseDescriptor
void SerializeMultiDatabase(SerializeContext *ser, const MultiDatabaseDescriptor &dbs, uint32_t flags)
decimal Clamp(decimal num, decimal low, decimal high)
Return the value in the range [low,high] which is closest to num.
std::vector< CatalogStar > Catalog