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 --- longbow/src/LongBow/longBow_ClipBoard.c | 155 ++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 longbow/src/LongBow/longBow_ClipBoard.c (limited to 'longbow/src/LongBow/longBow_ClipBoard.c') diff --git a/longbow/src/LongBow/longBow_ClipBoard.c b/longbow/src/LongBow/longBow_ClipBoard.c new file mode 100644 index 00000000..a3264d44 --- /dev/null +++ b/longbow/src/LongBow/longBow_ClipBoard.c @@ -0,0 +1,155 @@ +/* + * 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 +#include + +struct LongBowClipBoard { + LongBowArrayList *list; +}; + +typedef struct Property { + const char *name; + char *value; +} _Property; + +static void +_property_Destroy(_Property **pointer) +{ + _Property *property = *pointer; + longBowMemory_Deallocate((void **) &property->name); + longBowMemory_Deallocate((void **) property); +} + +void +longBowClipBoard_Destroy(LongBowClipBoard **pointer) +{ + LongBowClipBoard *clipboard = *pointer; + + longBowArrayList_Destroy(&clipboard->list); + longBowMemory_Deallocate((void **) pointer); +} + +LongBowClipBoard * +longBowClipBoard_Create(void) +{ + LongBowClipBoard *result = longBowMemory_Allocate(sizeof(LongBowClipBoard)); + + if (result != NULL) { + result->list = longBowArrayList_Create((void (*)(void **))_property_Destroy); + } + + return result; +} + +static _Property * +_longBowClipBoard_Get(const LongBowClipBoard *clipBoard, const char *name) +{ + _Property *result = NULL; + + for (size_t index = 0; index < longBowArrayList_Length(clipBoard->list); index++) { + _Property *property = longBowArrayList_Get(clipBoard->list, index); + if (strcmp(property->name, name) == 0) { + result = property; + break; + } + } + return result; +} + +void * +longBowClipBoard_Get(const LongBowClipBoard *clipBoard, const char *name) +{ + _Property *property = _longBowClipBoard_Get(clipBoard, name); + + if (property != NULL) { + return property->value; + } + + return NULL; +} + +char * +longBowClipBoard_GetAsCString(const LongBowClipBoard *clipBoard, const char *name) +{ + return (char *) longBowClipBoard_Get(clipBoard, name); +} + +uint64_t +longBowClipBoard_GetAsInt(const LongBowClipBoard *clipBoard, const char *name) +{ + return (uint64_t) longBowClipBoard_Get(clipBoard, name); +} + +void * +longBowClipBoard_Set(LongBowClipBoard *clipBoard, const char *name, void *value) +{ + void *result = NULL; + + _Property *property = _longBowClipBoard_Get(clipBoard, name); + if (property == NULL) { + property = longBowMemory_Allocate(sizeof(_Property)); + property->name = longBowMemory_StringCopy(name); + property->value = value; + longBowArrayList_Add(clipBoard->list, property); + } else { + result = property->value; + property->value = value; + } + return result; +} + +void * +longBowClipBoard_SetInt(LongBowClipBoard *clipBoard, const char *name, uint64_t value) +{ + return longBowClipBoard_Set(clipBoard, name, (void *) (uintptr_t) value); +} + +void * +longBowClipBoard_SetCString(LongBowClipBoard *clipBoard, const char *name, char *value) +{ + return longBowClipBoard_Set(clipBoard, name, (char *) value); +} + +bool +longBowClipBoard_Exists(const LongBowClipBoard *clipBoard, const char *name) +{ + return (_longBowClipBoard_Get(clipBoard, name) != NULL); +} + +bool +longBowClipBoard_Delete(LongBowClipBoard *clipBoard, const char *name) +{ + bool result = false; + + for (size_t index = 0; index < longBowArrayList_Length(clipBoard->list); index++) { + _Property *property = longBowArrayList_Get(clipBoard->list, index); + if (strcmp(property->name, name) == 0) { + longBowArrayList_RemoveAtIndex(clipBoard->list, index); + result = true; + } + } + + return result; +} -- cgit 1.2.3-korg