4 #include "tableentry.h"
7 #include "ordergraph.h"
9 VectorImpl(Table, Table *, 4);
10 VectorImpl(Set, Set *, 4);
11 VectorImpl(Boolean, Boolean *, 4);
12 VectorImpl(BooleanOrder, BooleanOrder *, 4);
13 VectorImpl(Function, Function *, 4);
14 VectorImpl(Predicate, Predicate *, 4);
15 VectorImpl(Element, Element *, 4);
16 VectorImpl(Order, Order *, 4);
17 VectorImpl(TableEntry, TableEntry *, 4);
18 VectorImpl(ASTNode, ASTNode *, 4);
19 VectorImpl(Int, uint64_t, 4);
20 VectorImpl(OrderNode, OrderNode*, 4);
21 VectorImpl(OrderGraph, OrderGraph*, 4);
23 inline unsigned int Ptr_hash_function(void * hash) {
24 return (unsigned int)((int64)hash >> 4);
27 inline bool Ptr_equals(void * key1, void * key2) {
31 static inline unsigned int order_pair_hash_Function(OrderPair* This){
32 return (uint) (This->first << 2) ^ This->second;
35 static inline unsigned int order_pair_equals(OrderPair* key1, OrderPair* key2){
36 return key1->first== key2->first && key1->second == key2->second;
39 static inline unsigned int table_entry_hash_Function(TableEntry* This){
41 for(uint i=0; i<This->inputSize; i++){
48 static inline bool table_entry_equals(TableEntry* key1, TableEntry* key2){
49 if(key1->inputSize != key2->inputSize)
51 for(uint i=0; i<key1->inputSize; i++)
52 if(key1->inputs[i]!=key2->inputs[i])
57 static inline unsigned int order_node_hash_Function(OrderNode* This){
58 return (uint) This->id;
62 static inline bool order_node_equals(OrderNode* key1, OrderNode* key2){
63 return key1->id == key2->id;
66 static inline unsigned int order_edge_hash_Function(OrderEdge* This){
67 return (uint) (( (uintptr_t)This->sink)^((uintptr_t)This->source << 4) );
70 static inline bool order_edge_equals(OrderEdge* key1, OrderEdge* key2){
71 return key1->sink == key2->sink && key1->source == key2->source;
74 HashTableImpl(OrderPair, OrderPair *, OrderPair *, order_pair_hash_Function, order_pair_equals, ourfree);
76 HashSetImpl(TableEntry, TableEntry*, table_entry_hash_Function, table_entry_equals);
77 HashSetImpl(OrderNode, OrderNode*, order_node_hash_Function, order_node_equals);
78 HashSetImpl(OrderEdge, OrderEdge*, order_edge_hash_Function, order_edge_equals);