summaryrefslogtreecommitdiffstats
path: root/libcnary/include
diff options
context:
space:
mode:
Diffstat (limited to 'libcnary/include')
-rw-r--r--libcnary/include/iterator.h49
-rw-r--r--libcnary/include/list.h40
-rw-r--r--libcnary/include/node.h62
-rw-r--r--libcnary/include/node_iterator.h55
-rw-r--r--libcnary/include/node_list.h23
5 files changed, 45 insertions, 184 deletions
diff --git a/libcnary/include/iterator.h b/libcnary/include/iterator.h
deleted file mode 100644
index a33c4ff..0000000
--- a/libcnary/include/iterator.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * iterator.h
- *
- * Created on: Mar 8, 2011
- * Author: posixninja
- *
- * Copyright (c) 2011 Joshua Hill. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef ITERATOR_H_
-#define ITERATOR_H_
-
-struct list_t;
-struct object_t;
-
-typedef struct iterator_t {
- struct object_t*(*next)(struct iterator_t* iterator);
- int(*bind)(struct iterator_t* iterator, struct list_t* list);
-
- unsigned int count;
- unsigned int position;
-
- struct list_t* list;
- struct object_t* end;
- struct object_t* begin;
- struct object_t* value;
-} iterator_t;
-
-void iterator_destroy(struct iterator_t* iterator);
-struct iterator_t* iterator_create(struct list_t* list);
-
-struct object_t* iterator_next(struct iterator_t* iterator);
-int iterator_bind(struct iterator_t* iterator, struct list_t* list);
-
-#endif /* ITERATOR_H_ */
diff --git a/libcnary/include/list.h b/libcnary/include/list.h
deleted file mode 100644
index 6b18e6f..0000000
--- a/libcnary/include/list.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * list.h
- *
- * Created on: Mar 8, 2011
- * Author: posixninja
- *
- * Copyright (c) 2011 Joshua Hill. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef LIST_H_
-#define LIST_H_
-
-#include "object.h"
-
-typedef struct list_t {
- void* next;
- void* prev;
-} list_t;
-
-void list_init(struct list_t* list);
-void list_destroy(struct list_t* list);
-
-int list_add(struct list_t* list, struct object_t* object);
-int list_remove(struct list_t* list, struct object_t* object);
-
-#endif /* LIST_H_ */
diff --git a/libcnary/include/node.h b/libcnary/include/node.h
index f9afdd6..5b3ae37 100644
--- a/libcnary/include/node.h
+++ b/libcnary/include/node.h
@@ -24,52 +24,54 @@
#ifndef NODE_H_
#define NODE_H_
+#include "node_list.h"
#include "object.h"
#define NODE_TYPE 1;
-struct node_list_t;
+#ifndef NODE_MAX_DEPTH
+#define NODE_MAX_DEPTH 512
+#endif
+
+#define NODE_ERR_SUCCESS 0
+#define NODE_ERR_INVALID_ARG -1
+#define NODE_ERR_NO_MEM -2
+#define NODE_ERR_PARENT -3
+#define NODE_ERR_CIRCULAR_REF -4
+#define NODE_ERR_MAX_DEPTH -5
+#define NODE_ERR_NOT_FOUND -6
// This class implements the abstract iterator class
-typedef struct node_t {
+typedef struct node* node_t;
+struct node {
// Super class
- struct node_t* next;
- struct node_t* prev;
+ node_t next;
+ node_t prev;
unsigned int count;
- // Local Properties
- int isRoot;
- int isLeaf;
-
// Local Members
void *data;
- unsigned int depth;
- struct node_t* parent;
- struct node_list_t* children;
-
- // Virtual Functions
- int(*attach)(struct node_t* parent, struct node_t* child);
- int(*detach)(struct node_t* parent, struct node_t* child);
-
-} node_t;
+ node_t parent;
+ node_list_t children;
+};
-void node_destroy(struct node_t* node);
-struct node_t* node_create(struct node_t* parent, void* data);
+void node_destroy(node_t node);
+node_t node_create(node_t parent, void* data);
-int node_attach(struct node_t* parent, struct node_t* child);
-int node_detach(struct node_t* parent, struct node_t* child);
-int node_insert(struct node_t* parent, unsigned int index, struct node_t* child);
+int node_attach(node_t parent, node_t child);
+int node_detach(node_t parent, node_t child);
+int node_insert(node_t parent, unsigned int index, node_t child);
-unsigned int node_n_children(struct node_t* node);
-node_t* node_nth_child(struct node_t* node, unsigned int n);
-node_t* node_first_child(struct node_t* node);
-node_t* node_prev_sibling(struct node_t* node);
-node_t* node_next_sibling(struct node_t* node);
-int node_child_position(struct node_t* parent, node_t* child);
+unsigned int node_n_children(node_t node);
+node_t node_nth_child(node_t node, unsigned int n);
+node_t node_first_child(node_t node);
+node_t node_prev_sibling(node_t node);
+node_t node_next_sibling(node_t node);
+int node_child_position(node_t parent, node_t child);
typedef void* (*copy_func_t)(const void *src);
-node_t* node_copy_deep(node_t* node, copy_func_t copy_func);
+node_t node_copy_deep(node_t node, copy_func_t copy_func);
-void node_debug(struct node_t* node);
+void node_debug(node_t node);
#endif /* NODE_H_ */
diff --git a/libcnary/include/node_iterator.h b/libcnary/include/node_iterator.h
deleted file mode 100644
index d3bce3a..0000000
--- a/libcnary/include/node_iterator.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * node_iterator.h
- *
- * Created on: Mar 8, 2011
- * Author: posixninja
- *
- * Copyright (c) 2011 Joshua Hill. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef NODE_ITERATOR_H_
-#define NODE_ITERATOR_H_
-
-#include "iterator.h"
-#include "node_list.h"
-
-// This class implements the abstract iterator class
-typedef struct node_iterator_t {
- // Super class
- struct iterator_t super;
-
- // Local members
- struct node_t*(*next)(struct node_iterator_t* iterator);
- int(*bind)(struct node_iterator_t* iterator, struct node_list_t* list);
-
- unsigned int count;
- unsigned int position;
-
- struct node_list_t* list;
- struct node_t* end;
- struct node_t* begin;
- struct node_t* value;
-
-} node_iterator_t;
-
-void node_iterator_destroy(node_iterator_t* iterator);
-node_iterator_t* node_iterator_create(node_list_t* list);
-
-struct node_t* node_iterator_next(struct node_iterator_t* iterator);
-int node_iterator_bind(struct node_iterator_t* iterator, struct node_list_t* list);
-
-#endif /* NODE_ITERATOR_H_ */
diff --git a/libcnary/include/node_list.h b/libcnary/include/node_list.h
index 7b9e311..d566b00 100644
--- a/libcnary/include/node_list.h
+++ b/libcnary/include/node_list.h
@@ -24,24 +24,27 @@
#ifndef NODE_LIST_H_
#define NODE_LIST_H_
-struct node_t;
+#include "node.h"
+
+typedef struct node* node_t;
// This class implements the list_t abstract class
-typedef struct node_list_t {
+struct node_list {
// list_t members
- struct node_t* begin;
- struct node_t* end;
+ node_t begin;
+ node_t end;
// node_list_t members
unsigned int count;
-} node_list_t;
+};
+typedef struct node_list* node_list_t;
-void node_list_destroy(struct node_list_t* list);
-struct node_list_t* node_list_create(struct node_t* node);
+void node_list_destroy(node_list_t list);
+node_list_t node_list_create();
-int node_list_add(node_list_t* list, node_t* node);
-int node_list_insert(node_list_t* list, unsigned int index, node_t* node);
-int node_list_remove(node_list_t* list, node_t* node);
+int node_list_add(node_list_t list, node_t node);
+int node_list_insert(node_list_t list, unsigned int index, node_t node);
+int node_list_remove(node_list_t list, node_t node);
#endif /* NODE_LIST_H_ */