aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/dict.c')
-rw-r--r--src/dict.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/dict.c b/src/dict.c
new file mode 100644
index 0000000..29c1dea
--- /dev/null
+++ b/src/dict.c
@@ -0,0 +1,77 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "internal.h"
+#include "dict.h"
+
+/*
+ * Dict
+ */
+typedef struct DictElem DictElem;
+struct DictElem
+{
+ const char *key;
+ const char *val;
+ struct DictElem *next;
+};
+
+struct Dict
+{
+ DictElem *root;
+ int count;
+};
+
+Dict *dictCreate()
+{
+ Dict *ret = malloc(sizeof(Dict));
+ ret->count = 0;
+ ret->root = 0;
+ return ret;
+}
+
+void dictInsert(Dict* list, const char* key, const char* value)
+{
+ if (!list)
+ return;
+ DictElem *node = malloc(sizeof(DictElem));
+ node->key = key;
+ node->val = value;
+ node->next = list->root;
+ list->root = node;
+ list->count++;
+}
+
+unsigned int dictCount(Dict *list)
+{
+ return (list ? list->count : 0);
+}
+
+void dictFree(Dict *list)
+{
+ if (!list)
+ return;
+
+ DictElem *node = list->root;
+ while (node)
+ {
+ DictElem *tmp = node;
+ node = node->next;
+ free(tmp);
+ }
+
+ free(list);
+}
+
+PyObject *dictToPyDict(Dict *dict)
+{
+ PyObject *pydict = PyDict_New();
+ DictElem *node = dict->root;
+ while (node)
+ {
+ PyDict_SetItem(pydict, PyBytes_FromString(node->key), PyBytes_FromString(node->val));
+ node = node->next;
+ }
+
+ return pydict;
+}