summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Huerner <ingo.huerner@xse.de>2015-01-22 12:05:09 +0100
committerIngo Huerner <ingo.huerner@xse.de>2015-01-22 12:05:09 +0100
commit9b810c249128d4c9d593445c71e0cb0f42f9e749 (patch)
tree8c12781382e0a39de180511a95c170c5338faeed
parentb596d8b27f952ab1bbc049b384c465d2e139e135 (diff)
downloadpersistence-client-library-9b810c249128d4c9d593445c71e0cb0f42f9e749.tar.gz
Added forgotten files
-rw-r--r--src/persistence_client_library_tree_helper.c160
-rw-r--r--src/persistence_client_library_tree_helper.h145
2 files changed, 305 insertions, 0 deletions
diff --git a/src/persistence_client_library_tree_helper.c b/src/persistence_client_library_tree_helper.c
new file mode 100644
index 0000000..dc84171
--- /dev/null
+++ b/src/persistence_client_library_tree_helper.c
@@ -0,0 +1,160 @@
+/******************************************************************************
+ * Project Persistency
+ * (c) copyright 2015
+ * Company XS Embedded GmbH
+ *****************************************************************************/
+/******************************************************************************
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
+ * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+******************************************************************************/
+ /**
+ * @file persistence_client_library_tree_helper.c
+ * @ingroup Persistence client library
+ * @author Ingo Huerner
+ * @brief Implementation of persistence client library tree helper functions
+ * @see
+ */
+
+#include "persistence_client_library_tree_helper.h"
+
+
+
+jsw_rbtree_t *gKeyHandleTree = NULL;
+
+jsw_rbtree_t *gFileHandleTree = NULL;
+
+jsw_rbtree_t *gOssFileHandleTree = NULL;
+
+/**
+ * File handle helper functions
+ */
+
+
+// compare function for tree item
+int fh_key_val_cmp(const void *p1, const void *p2)
+{
+ int rval = -1;
+
+ FileHandleTreeItem_s* first;
+ FileHandleTreeItem_s* second;
+
+ first = (FileHandleTreeItem_s*)p1;
+ second = (FileHandleTreeItem_s*)p2;
+
+ if(second->key == first->key)
+ {
+ rval = 0;
+ }
+ else if(second->key < first->key)
+ {
+ rval = -1;
+ }
+ else
+ {
+ rval = 1;
+ }
+
+ return rval;
+ }
+
+
+
+/// duplicate function for tree item
+void* fh_key_val_dup(void *p)
+{
+ FileHandleTreeItem_s* dst = NULL;
+ FileHandleTreeItem_s* src = (FileHandleTreeItem_s*)p;
+
+ // allocate memory for node
+ dst = malloc(sizeof(FileHandleTreeItem_s));
+
+ if(dst != NULL)
+ {
+ dst->key = src->key; // duplicate hash key
+
+ if(dst->value.payload != NULL)
+ {
+ memcpy(dst->value.payload , src->value.payload, sizeof(FileHandleData_u) ); // duplicate value
+ }
+ }
+
+ return dst;
+}
+
+/// release function for tree item
+void fh_key_val_rel(void *p)
+{
+ FileHandleTreeItem_s* rel = (FileHandleTreeItem_s*)p;
+
+ if(rel != NULL)
+ free(rel);
+}
+
+
+
+
+/**
+ * Key handle helper functions
+ */
+
+/// compare function for tree item
+int kh_key_val_cmp(const void *p1, const void *p2)
+{
+ int rval = -1;
+
+ KeyHandleTreeItem_s* first;
+ KeyHandleTreeItem_s* second;
+
+ first = (KeyHandleTreeItem_s*)p1;
+ second = (KeyHandleTreeItem_s*)p2;
+
+ if(second->key == first->key)
+ {
+ rval = 0;
+ }
+ else if(second->key < first->key)
+ {
+ rval = -1;
+ }
+ else
+ {
+ rval = 1;
+ }
+ return rval;
+ }
+
+
+
+/// duplicate function for tree item
+void* kh_key_val_dup(void *p)
+{
+ KeyHandleTreeItem_s* dst = NULL;
+ KeyHandleTreeItem_s* src = (KeyHandleTreeItem_s*)p;
+
+ // allocate memory for node
+ dst = malloc(sizeof(KeyHandleTreeItem_s));
+
+ if(dst != NULL)
+ {
+ dst->key = src->key; // duplicate hash key
+
+ if(dst->value.payload != NULL)
+ {
+ memcpy(dst->value.payload , src->value.payload, sizeof(KeyHandleData_u) ); // duplicate value
+ }
+ }
+ return dst;
+}
+
+
+
+/// release function for tree item
+void kh_key_val_rel(void *p)
+{
+ KeyHandleTreeItem_s* rel = (KeyHandleTreeItem_s*)p;
+
+ if(rel != NULL)
+ free(rel);
+}
+
diff --git a/src/persistence_client_library_tree_helper.h b/src/persistence_client_library_tree_helper.h
new file mode 100644
index 0000000..60ae99f
--- /dev/null
+++ b/src/persistence_client_library_tree_helper.h
@@ -0,0 +1,145 @@
+#ifndef PERSISTENCE_CLIENT_LIBRARY_TREE_HELPER_H
+#define PERSISTENCE_CLIENT_LIBRARY_TREE_HELPER_H
+
+/******************************************************************************
+ * Project Persistency
+ * (c) copyright 2015
+ * Company XS Embedded GmbH
+ *****************************************************************************/
+/******************************************************************************
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
+ * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+******************************************************************************/
+ /**
+ * @file persistence_client_library_tree_helper.h
+ * @ingroup Persistence client library
+ * @author Ingo Huerner
+ * @brief Header of persistence client library tree helper functions
+ * @see
+ */
+
+
+#include<stdio.h>
+#include<stdlib.h>
+
+#include "persistence_client_library_handle.h"
+#include "rbtree.h"
+
+
+/// tree to store key handle information
+extern jsw_rbtree_t *gKeyHandleTree;
+
+/// tree to store file handle information
+extern jsw_rbtree_t *gFileHandleTree;
+
+/// tree to store OSS file handle information
+extern jsw_rbtree_t *gOssFileHandleTree;
+
+
+/// key handle data union definition
+typedef union KeyHandleData_u_
+{
+ /// key handle data definition
+ PersistenceKeyHandle_s keyHandle;
+
+ /// key handle data payload
+ char payload[sizeof(struct _PersistenceKeyHandle_s)];
+
+} KeyHandleData_u;
+
+/// type definition of a key tree item
+typedef struct _KeyHandleTreeItem_s
+{
+ /// key handle key
+ int key;
+
+ /// key handle data
+ KeyHandleData_u value;
+
+} KeyHandleTreeItem_s;
+
+
+
+/// file handle data union definition
+typedef union FileHandleData_u_
+{
+ /// file handle data definition
+ PersistenceFileHandle_s fileHandle;
+
+ /// file handle data payload
+ char payload[sizeof(struct _PersistenceFileHandle_s)];
+
+} FileHandleData_u;
+
+/// type definition of a file tree item
+typedef struct _FileHandleTreeItem_s
+{
+ /// file handle key
+ int key;
+
+ /// file handle data
+ FileHandleData_u value;
+
+} FileHandleTreeItem_s;
+
+
+
+/**
+ * @brief Compare function for file handle tree item
+ *
+ * @param p1 pointer to the first item to compare
+ * @param p2 pointer to the second item to compare
+ *
+ * @return 0 if key is equal; -1 if p1 < p2; 1 if p1 > p2
+ */
+int fh_key_val_cmp(const void *p1, const void *p2 );
+
+
+/**
+ * @brief Duplicate function for file handle tree item
+ *
+ * @param p the pointer of the item to duplicate
+ *
+ * @return pointer to the duplicated item, on failure NULL
+ */
+void* fh_key_val_dup(void *p);
+
+/**
+ * @brief Release function for file handle tree item
+ *
+ * @param p pointer tp the item to release
+ */
+void fh_key_val_rel(void *p );
+
+
+
+/**
+ * @brief Compare function for key handle tree item
+ *
+ * @param p1 pointer to the first item to compare
+ * @param p2 pointer to the second item to compare
+ *
+ * @return 0 if key is equal; -1 if p1 < p2; 1 if p1 > p2
+ */
+int kh_key_val_cmp(const void *p1, const void *p2 );
+
+/**
+ * @brief Duplicate function for key handle tree item
+ *
+ * @param p the pointer of the item to duplicate
+ *
+ * @return pointer to the duplicated item, on failure NULL
+ */
+void* kh_key_val_dup(void *p);
+
+/**
+ * @brief Release function for key handle tree item
+ *
+ * @param p pointer tp the item to release
+ */
+void kh_key_val_rel(void *p );
+
+
+
+#endif /* PERSISTENCE_CLIENT_LIBRARY_TREE_HELPER_H */