From ec688b4723a041044226358bcd4dd6e2da39da49 Mon Sep 17 00:00:00 2001 From: Luca Muscariello Date: Thu, 23 Feb 2017 17:01:02 +0100 Subject: Initial commit: cframework. Longbow and Libparc Change-Id: I90378dbd30da6033b20fb1f829b3b822cf366c59 Signed-off-by: Luca Muscariello --- libparc/parc/algol/parc_Dictionary.c | 134 +++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100755 libparc/parc/algol/parc_Dictionary.c (limited to 'libparc/parc/algol/parc_Dictionary.c') diff --git a/libparc/parc/algol/parc_Dictionary.c b/libparc/parc/algol/parc_Dictionary.c new file mode 100755 index 00000000..628b08e2 --- /dev/null +++ b/libparc/parc/algol/parc_Dictionary.c @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + */ + +#include + +#include + +#include + +#include +#include +#include + +struct parc_dictionary { + PARCDictionary_CompareKey keyCompareFunction; + PARCDictionary_KeyHashFunc keyHashFunction; + PARCDictionary_FreeKey keyFreeFunction; + PARCDictionary_FreeValue valueFreeFunction; + PARCDictionary_ValueEquals valueEqualsFunction; + PARCTreeRedBlack *tree; +}; + + +PARCDictionary * +parcDictionary_Create(PARCDictionary_CompareKey keyCompareFunction, + PARCDictionary_KeyHashFunc keyHashFunction, + PARCDictionary_FreeKey keyFreeFunction, + PARCDictionary_ValueEquals valueEqualsFunction, + PARCDictionary_FreeValue valueFreeFunction) +{ + assertNotNull(keyCompareFunction, "KeyCompareFunction can't be null"); + assertNotNull(keyHashFunction, "KeyHashFunction can't be null"); + PARCDictionary *dictionary = parcMemory_Allocate(sizeof(PARCDictionary)); + assertNotNull(dictionary, "parcMemory_Allocate(%zu) returned NULL", sizeof(PARCDictionary)); + dictionary->keyCompareFunction = keyCompareFunction; + dictionary->keyHashFunction = keyHashFunction; + dictionary->keyFreeFunction = keyFreeFunction; + dictionary->valueFreeFunction = valueFreeFunction; + dictionary->valueEqualsFunction = valueEqualsFunction; + dictionary->tree = parcTreeRedBlack_Create(keyCompareFunction, + keyFreeFunction, + NULL, + valueEqualsFunction, + valueFreeFunction, + NULL); + return dictionary; +} + + +void +parcDictionary_Destroy(PARCDictionary **dictionaryPointer) +{ + assertNotNull(dictionaryPointer, "Pointer to dictionary pointer can't be NULL"); + assertNotNull(*dictionaryPointer, "Pointer to dictionary can't be NULL"); + parcTreeRedBlack_Destroy(&((*dictionaryPointer)->tree)); + parcMemory_Deallocate((void **) dictionaryPointer); + *dictionaryPointer = NULL; +} + +void +parcDictionary_SetValue(PARCDictionary *dictionary, void *key, void *value) +{ + assertNotNull(dictionary, "dictionary pointer can't be NULL"); + assertNotNull(key, "Key pointer can't be NULL"); + parcTreeRedBlack_Insert(dictionary->tree, key, value); +} + +void * +parcDictionary_GetValue(PARCDictionary *dictionary, const void *key) +{ + assertNotNull(dictionary, "dictionary pointer can't be NULL"); + assertNotNull(key, "Key pointer can't be NULL"); + return parcTreeRedBlack_Get(dictionary->tree, key); +} + +void * +parcDictionary_RemoveValue(PARCDictionary *dictionary, const void *key) +{ + assertNotNull(dictionary, "dictionary pointer can't be NULL"); + assertNotNull(key, "Key pointer can't be NULL"); + return parcTreeRedBlack_Remove(dictionary->tree, key); +} + +void +parcDictionary_RemoveAndDestroyValue(PARCDictionary *dictionary, const void *key) +{ + assertNotNull(dictionary, "dictionary pointer can't be NULL"); + assertNotNull(key, "Key pointer can't be NULL"); + parcTreeRedBlack_RemoveAndDestroy(dictionary->tree, key); +} + +PARCArrayList * +parcDictionary_Keys(const PARCDictionary *dictionary) +{ + assertNotNull(dictionary, "dictionary pointer can't be NULL"); + return parcTreeRedBlack_Keys(dictionary->tree); +} + +PARCArrayList * +parcDictionary_Values(const PARCDictionary *dictionary) +{ + assertNotNull(dictionary, "dictionary pointer can't be NULL"); + return parcTreeRedBlack_Values(dictionary->tree); +} + +size_t +parcDictionary_Size(const PARCDictionary *dictionary) +{ + assertNotNull(dictionary, "dictionary pointer can't be NULL"); + return parcTreeRedBlack_Size(dictionary->tree); +} + +int +parcDictionary_Equals(const PARCDictionary *dictionary1, const PARCDictionary *dictionary2) +{ + assertNotNull(dictionary1, "dictionary pointer can't be NULL"); + assertNotNull(dictionary2, "dictionary pointer can't be NULL"); + return parcTreeRedBlack_Equals(dictionary1->tree, dictionary2->tree); +} -- cgit 1.2.3-korg