3 #include "tableentry.h"
6 #include "ordergraph.h"
7 #include "orderelement.h"
9 #include "decomposeorderresolver.h"
10 #include "searchtuner.h"
12 #define HASHNEXT(hash, newval) {hash += newval; hash += hash << 10; hash ^= hash >> 6;}
13 #define HASHFINAL(hash) {hash += hash << 3; hash ^= hash >> 11; hash += hash << 15;}
15 unsigned int table_entry_hash_function(TableEntry *This) {
17 for (uint i = 0; i < This->inputSize; i++) {
18 HASHNEXT(h, This->inputs[i]);
24 bool table_entry_equals(TableEntry *key1, TableEntry *key2) {
25 if (key1->inputSize != key2->inputSize)
27 for (uint i = 0; i < key1->inputSize; i++)
28 if (key1->inputs[i] != key2->inputs[i])
33 unsigned int order_node_hash_function(OrderNodeKey *This) {
34 return (uint) This->id;
37 bool order_node_equals(OrderNodeKey *key1, OrderNodeKey *key2) {
38 return key1->id == key2->id;
41 unsigned int order_edge_hash_function(OrderEdge *This) {
43 HASHNEXT(hash, (uint)(uintptr_t) This->sink);
44 HASHNEXT(hash, (uint)(uintptr_t) This->source);
49 bool order_edge_equals(OrderEdge *key1, OrderEdge *key2) {
50 return key1->sink == key2->sink && key1->source == key2->source;
53 unsigned int order_element_hash_function(OrderElement *This) {
54 return This->getHash();
57 bool order_element_equals(OrderElement *key1, OrderElement *key2) {
58 return key1->equals(key2);
61 unsigned int order_pair_hash_function(OrderPair *This) {
63 HASHNEXT(hash, This->first);
64 HASHNEXT(hash, This->second);
69 bool order_pair_equals(OrderPair *key1, OrderPair *key2) {
70 return key1->first == key2->first && key1->second == key2->second;
73 unsigned int doredge_hash_function(DOREdge *key) {
75 HASHNEXT(hash, (uint) key->newfirst);
76 HASHNEXT(hash, (uint) key->newsecond);
81 bool doredge_equals(DOREdge *key1, DOREdge *key2) {
82 return key1->newfirst == key2->newfirst &&
83 key1->newsecond == key2->newsecond;
86 unsigned int tunableSettingHash(TunableSetting *setting) {
87 return setting->hasVar ^ setting->type1 ^ setting->type2 ^ setting->param;
90 bool tunableSettingEquals(TunableSetting *setting1, TunableSetting *setting2) {
91 return setting1->hasVar == setting2->hasVar &&
92 setting1->type1 == setting2->type1 &&
93 setting1->type2 == setting2->type2 &&
94 setting1->param == setting2->param;