diff options
author | Ingo Huerner <ingo.huerner@xse.de> | 2015-01-22 12:05:09 +0100 |
---|---|---|
committer | Ingo Huerner <ingo.huerner@xse.de> | 2015-01-22 12:05:09 +0100 |
commit | 9b810c249128d4c9d593445c71e0cb0f42f9e749 (patch) | |
tree | 8c12781382e0a39de180511a95c170c5338faeed | |
parent | b596d8b27f952ab1bbc049b384c465d2e139e135 (diff) | |
download | persistence-client-library-9b810c249128d4c9d593445c71e0cb0f42f9e749.tar.gz |
Added forgotten files
-rw-r--r-- | src/persistence_client_library_tree_helper.c | 160 | ||||
-rw-r--r-- | src/persistence_client_library_tree_helper.h | 145 |
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 */ |