1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#pragma once
#include <iostream>
template <typename T, unsigned int N>
struct FixedVector
{
T data[N];
__host__ __device__
FixedVector()
{
for(unsigned int i = 0; i < N; i++)
data[i] = T();
}
__host__ __device__
FixedVector(T init)
{
for(unsigned int i = 0; i < N; i++)
data[i] = init;
}
__host__ __device__
FixedVector operator+(const FixedVector& bs) const
{
FixedVector output;
for(unsigned int i = 0; i < N; i++)
output.data[i] = data[i] + bs.data[i];
return output;
}
__host__ __device__
bool operator<(const FixedVector& bs) const
{
for(unsigned int i = 0; i < N; i++)
{
if(data[i] < bs.data[i])
return true;
else if(bs.data[i] < data[i])
return false;
}
return false;
}
__host__ __device__
bool operator==(const FixedVector& bs) const
{
for(unsigned int i = 0; i < N; i++)
{
if(!(data[i] == bs.data[i]))
return false;
}
return true;
}
};
template<typename Key, typename Value>
struct key_value
{
typedef Key key_type;
typedef Value value_type;
__host__ __device__
key_value(void)
: key(), value()
{}
__host__ __device__
key_value(key_type k, value_type v)
: key(k), value(v)
{}
__host__ __device__
bool operator<(const key_value &rhs) const
{
return key < rhs.key;
}
__host__ __device__
bool operator>(const key_value &rhs) const
{
return key > rhs.key;
}
__host__ __device__
bool operator==(const key_value &rhs) const
{
return key == rhs.key && value == rhs.value;
}
__host__ __device__
bool operator!=(const key_value &rhs) const
{
return !operator==(rhs);
}
friend std::ostream &operator<<(std::ostream &os, const key_value &kv)
{
return os << "(" << kv.key << ", " << kv.value << ")";
}
key_type key;
value_type value;
};
|