Skip to content

Commit fac1ba9

Browse files
committed
beginnings of hashtable implementation
1 parent 0d99421 commit fac1ba9

15 files changed

+645
-268
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ tests/*tests
33
tests/*.dSYM/
44
tests/heap_t_tests.dSYM/
55
build/
6-
tests/tests.log
6+
tests/*.log
77
*.o
88
*xcode*

Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CFLAGS=-std=c99 -g -O2 -Wall -Wextra -fPIC -Isrc -rdynamic -DNDEBUG $(OPTFLAGS)
1+
CFLAGS=-std=c99 -g -O2 -Wall -Wextra -fPIC -Isrc -DNDEBUG $(OPTFLAGS)
22
LIBS=-ldl -lm
33
PREFIX?=/usr/local
44

@@ -48,6 +48,7 @@ clean:
4848
rm -f tests/tests.log
4949
find . -name "*.gc*" -exec rm {} \;
5050
rm -rf `find . -name "*.dSYM" -print`
51+
rm -rf `find . -name "callgrind.out.*" -print`
5152

5253
# The Install
5354
install: all

include/adt.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
//Abstract Data Type headers
22
#ifndef cmsketch_adt_h
33
#define cmsketch_adt_h
4+
#include <stdlib.h>
45
#include <stdint.h>
56

67
typedef int (*comparator) (void* item, void* item2);
7-
typedef uint32_t (*hasher) (void* key);
8-
8+
typedef uint32_t (*hasher) (void* key, size_t item);
9+
typedef void (*dtor) (void* value);
910
#endif

include/heap_t.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
#include "adt.h"
1212

1313
typedef struct {
14-
comparator cmp; // Comparator function
15-
int size; // Max size
16-
int items; // Items currently in heap
17-
size_t item_size; // Size of item
18-
void **list; // Array of items
14+
comparator cmp; // Comparator function
15+
int size; // Max size
16+
int items; // Items currently in heap
17+
size_t item_size; // Size of item
18+
void** list; // Array of items
1919
} heap_t;
2020

2121
heap_t* heap_create(int size, size_t type_size, comparator cmp);

include/llist_t.h

+10-5
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,23 @@
77
//
88
#ifndef cmsketch_llist_t_h
99
#define cmsketch_llist_t_h
10+
11+
#include "adt.h"
12+
1013
typedef struct llist_node_t {
11-
void* value;
12-
struct llist_node_t* next;
14+
struct llist_node_t* next;
15+
void* value;
1316
} llist_node_t;
1417

1518
typedef struct {
16-
int size;
17-
llist_node_t* head;
19+
int size;
20+
dtor destructor;
21+
llist_node_t* head;
1822
} llist_t;
1923

20-
llist_t* llist_create();
24+
llist_t* llist_create(dtor destructor);
2125
void llist_destroy(llist_t* list);
26+
void* llist_node_destroy(llist_node_t* node);
2227
void llist_push(llist_t* list, void* item);
2328
void* llist_pop(llist_t* list);
2429

include/map_t.h

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//
2+
// map_t.h
3+
// cmsketch
4+
//
5+
// Created by Chris Guiney on 4/18/14.
6+
// Copyright (c) 2014 Chris Guiney. All rights reserved.
7+
//
8+
9+
#ifndef cmsketch_map_t_h
10+
#define cmsketch_map_t_h
11+
#include "adt.h"
12+
#include "llist_t.h"
13+
14+
typedef struct {
15+
int num_buckets;
16+
int num_entries;
17+
float load_factor;
18+
size_t key_size;
19+
hasher hash;
20+
comparator cmp;
21+
dtor destructor;
22+
llist_t** buckets;
23+
} map_t;
24+
25+
typedef struct {
26+
uint32_t hash;
27+
void* key;
28+
void* value;
29+
} map_entry_t;
30+
31+
typedef struct {
32+
size_t size;
33+
void* value;
34+
} map_key_t;
35+
36+
map_t* map_create(float load_factor, size_t key_size, int initial_bucket_count, comparator cmp, hasher hash, dtor destructor);
37+
map_t* map_create_simple(float load_factor, size_t key_size, comparator cmp, dtor destructor);
38+
void map_put(map_t* map, void* key, void* value);
39+
void* map_get(map_t* map, void* key);
40+
void* map_delete(map_t* map, void* key);
41+
42+
#endif

include/sketch_t.h

+6-10
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,14 @@
1010
#define cmsketch_sketch_t_h
1111

1212
typedef struct {
13-
int k; // Number of top-k items to keep track of
14-
int width; // Width of field
15-
int depth; // Depth of field
16-
int *field; // Int field -- width * depth length
17-
heap_t *heap; // Heap for sorting
13+
int k; // Number of top-k items to keep track of
14+
int width; // Width of field
15+
int depth; // Depth of field
16+
int *field; // Int field -- width * depth length
17+
heap_t *heap; // Heap for sorting
1818
} sketch_t;
1919

20-
sketch_t* sketch_create(size_t data_size,
21-
double delta,
22-
double epsilon,
23-
int k,
24-
comparator cmp);
20+
sketch_t* sketch_create(size_t data_size, double delta, double epsilon, int k, comparator cmp);
2521
void sketch_destroy(sketch_t *s);
2622

2723
#endif

0 commit comments

Comments
 (0)