summaryrefslogtreecommitdiffstats
path: root/include/framework/RecordInterface.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/framework/RecordInterface.h')
-rw-r--r--include/framework/RecordInterface.h214
1 files changed, 0 insertions, 214 deletions
diff --git a/include/framework/RecordInterface.h b/include/framework/RecordInterface.h
deleted file mode 100644
index 1ef1984..0000000
--- a/include/framework/RecordInterface.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * include/framework/RecordInterface.h
- *
- * Copyright (C) 2023 Douglas Rumbaugh <drumbaugh@psu.edu>
- * Dong Xie <dongx@psu.edu>
- *
- * All rights reserved. Published under the Modified BSD License.
- *
- */
-#pragma once
-
-#include <cstring>
-#include <concepts>
-#include <cmath>
-
-#include "psu-util/hash.h"
-
-namespace de {
-
-template<typename R>
-concept RecordInterface = requires(R r, R s) {
- { r < s } ->std::convertible_to<bool>;
- { r == s } ->std::convertible_to<bool>;
-};
-
-template<typename R>
-concept WeightedRecordInterface = requires(R r) {
- {r.weight} -> std::convertible_to<double>;
-};
-
-template<typename R>
-concept NDRecordInterface = RecordInterface<R> && requires(R r, R s) {
- {r.calc_distance(s)} -> std::convertible_to<double>;
-};
-
-template <typename R>
-concept KVPInterface = RecordInterface<R> && requires(R r) {
- r.key;
- r.value;
-};
-
-template<typename R>
-concept AlexInterface = KVPInterface<R> && requires(R r) {
- {r.key} -> std::convertible_to<size_t>;
- {r.value} -> std::convertible_to<size_t>;
-};
-
-template<typename R>
-concept WrappedInterface = RecordInterface<R> && requires(R r, R s, bool b) {
- {r.header} -> std::convertible_to<uint32_t>;
- r.rec;
- {r.set_delete()};
- {r.is_deleted()} -> std::convertible_to<bool>;
- {r.set_tombstone(b)};
- {r.is_tombstone()} -> std::convertible_to<bool>;
- {r < s} -> std::convertible_to<bool>;
- {r == s} ->std::convertible_to<bool>;
-};
-
-template<RecordInterface R>
-struct Wrapped {
- uint32_t header;
- R rec;
-
- inline void set_delete() {
- header |= 2;
- }
-
- inline bool is_deleted() const {
- return header & 2;
- }
-
- inline void set_tombstone(bool val=true) {
- if (val) {
- header |= val;
- } else {
- header &= 0;
- }
- }
-
- inline bool is_tombstone() const {
- return header & 1;
- }
-
- inline bool operator<(const Wrapped& other) const {
- return rec < other.rec || (rec == other.rec && header < other.header);
- }
-
- inline bool operator==(const Wrapped& other) const {
- return rec == other.rec;
- }
-
-};
-
-template <typename K, typename V>
-struct Record {
- K key;
- V value;
- uint32_t header = 0;
-
- inline bool operator<(const Record& other) const {
- return key < other.key || (key == other.key && value < other.value);
- }
-
- inline bool operator==(const Record& other) const {
- return key == other.key && value == other.value;
- }
-};
-
-template <typename K, typename V, typename W>
-struct WeightedRecord {
- K key;
- V value;
- W weight = 1;
-
- inline bool operator==(const WeightedRecord& other) const {
- return key == other.key && value == other.value;
- }
-
- inline bool operator<(const WeightedRecord& other) const {
- return key < other.key || (key == other.key && value < other.value);
- }
-};
-
-
-template <typename V, size_t D=2>
-struct CosinePoint{
- V data[D];
-
- inline bool operator==(const CosinePoint& other) const {
- for (size_t i=0; i<D; i++) {
- if (data[i] != other.data[i]) {
- return false;
- }
- }
-
- return true;
- }
-
- // lexicographic order
- inline bool operator<(const CosinePoint& other) const {
- for (size_t i=0; i<D; i++) {
- if (data[i] < other.data[i]) {
- return true;
- } else if (data[i] > other.data[i]) {
- return false;
- }
- }
-
- return false;
- }
-
- inline double calc_distance(const CosinePoint& other) const {
-
- double prod = 0;
- double asquared = 0;
- double bsquared = 0;
-
- for (size_t i=0; i<D; i++) {
- prod += data[i] * other.data[i];
- asquared += data[i]*data[i];
- bsquared += other.data[i]*other.data[i];
- }
-
- return prod / std::sqrt(asquared * bsquared);
- }
-};
-
-
-template <typename V, size_t D=2>
-struct EuclidPoint{
- V data[D];
-
- inline bool operator==(const EuclidPoint& other) const {
- for (size_t i=0; i<D; i++) {
- if (data[i] != other.data[i]) {
- return false;
- }
- }
-
- return true;
- }
-
- // lexicographic order
- inline bool operator<(const EuclidPoint& other) const {
- for (size_t i=0; i<D; i++) {
- if (data[i] < other.data[i]) {
- return true;
- } else if (data[i] > other.data[i]) {
- return false;
- }
- }
-
- return false;
- }
-
- inline double calc_distance(const EuclidPoint& other) const {
- double dist = 0;
- for (size_t i=0; i<D; i++) {
- dist += (data[i] - other.data[i]) * (data[i] - other.data[i]);
- }
-
- return std::sqrt(dist);
- }
-};
-
-template<RecordInterface R>
-struct RecordHash {
- size_t operator()(R const &rec) const {
- return psudb::hash_bytes((std::byte *) &rec, sizeof(R));
- }
-};
-
-}