forked from RJ/ketama
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ketamamodule.h
136 lines (111 loc) · 4.96 KB
/
ketamamodule.h
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/**
* $Id: ketamamodule.h 23 2007-07-13 01:32:00Z toxik $
*
* License: See ../LICENSE or
* svn://svn.audioscrobbler.net/misc/ketama/LICENSE
*/
#ifndef _PYKETAMA_H
#define _PYKETAMA_H
#include <Python.h>
#include <ketama.h>
/* Common idiom goes to macro, that's it. */
#define PY_DEF(name, self, args) static PyObject *(name)( \
PyObject *(self), PyObject *(args))
#define PY_KDEF(name, self, args, kwds) static PyObject *(name)( \
PyObject *(self), PyObject *(args) PyObject *(kwds))
PyObject *pyketama_error;
/* {{{ Continuum def */
typedef struct {
PyObject_HEAD
ketama_continuum cont;
char *filename;
} pyketama_Continuum;
static void pyketama_Continuum_dealloc(pyketama_Continuum *self);
PyObject * pyketama_Continuum_new(PyTypeObject *type,
PyObject *args, PyObject *kwds);
static int pyketama_Continuum_init(PyObject *self, PyObject *args,
PyObject *kwds);
static PyObject *pyketama_Continuum_repr(PyObject *o);
PY_DEF(pyketama_Continuum_get_server, self, args);
PY_DEF(pyketama_Continuum_get_points, self, args);
/* get_server could use METH_O instead of METH_VARARGS, but ParseTuple is
* a lot more flexible somehow.
*/
static PyMethodDef pyketama_Continuum_methods[] = {
{"get_server", pyketama_Continuum_get_server, METH_VARARGS,
"Return a tuple containing point on circle and address where hash is."},
{"get_points", pyketama_Continuum_get_points, METH_NOARGS,
"Return a list with all points and associated server."},
{NULL}
};
/* See http://docs.python.org/api/type-structs.html for more information
* regarding the struct's members.
*/
static PyTypeObject pyketama_ContinuumType = {
PyObject_HEAD_INIT(NULL)
0,
"ketama.Continuum", /* tp_name */
sizeof(pyketama_Continuum), /* tp_basicsize */
0, /* tp_itemsize */
/* Methods to implement standard operations */
(destructor)pyketama_Continuum_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
(reprfunc)pyketama_Continuum_repr, /* tp_repr */
/* Method suites for standard classes */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
/* More standard operations (here for binary compatibility) */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
/* Functions to access object as input/output buffer */
0, /* tp_as_buffer */
/* Flags to define presence of optional/expanded features */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
/* Documentation string */
"Ketama continuum type",
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
/* Iterator API */
0, /* tp_iter */
0, /* tp_iternext */
/* Attribute descriptor and subclassing stuff */
pyketama_Continuum_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)pyketama_Continuum_init, /* tp_init */
0, /* tp_alloc */
pyketama_Continuum_new, /* tp_new */
0, /* tp_free */
0, /* tp_is_gc */
0, /* tp_bases */
0, /* tp_mro */
0, /* tp_cache */
0, /* tp_subclasses */
0, /* tp_weaklist */
};
/* }}} Continuum def */
PY_DEF(pyketama_hashi, self, args);
/* See comment at the pyketama_Continuum_methods definition.
*/
static PyMethodDef ketamaMethods[] = {
{"hashi", pyketama_hashi, METH_VARARGS, "Calculates hash from input key"},
{NULL}
};
PyMODINIT_FUNC initketama(void);
#endif
/* vim: ts=4 sts=4 expandtab
*/