51Degrees Common C/C++  4.1

A shared functionality library that is used by 51Degrees products

resource.h

1 /* *********************************************************************
2  * This Source Code Form is copyright of 51 Degrees Mobile Experts Limited.
3  * Copyright 2019 51 Degrees Mobile Experts Limited, 5 Charlotte Close,
4  * Caversham, Reading, Berkshire, United Kingdom RG4 7BY
5  *
6  * This Source Code Form is subject to the terms of the Mozilla Public
7  * License, v. 2.0.
8  *
9  * If a copy of the MPL was not distributed with this file, You can obtain
10  * one at http://mozilla.org/MPL/2.0/.
11  *
12  * This Source Code Form is "Incompatible With Secondary Licenses", as
13  * defined by the Mozilla Public License, v. 2.0.
14  * ******************************************************************** */
15 
16 #ifndef FIFTYONE_DEGREES_MANAGER_INCLUDED
17 #define FIFTYONE_DEGREES_MANAGER_INCLUDED
18 
125 /* Define NDEBUG if needed, to ensure asserts are disabled in release builds */
126 #if !defined(DEBUG) && !defined(_DEBUG) && !defined(NDEBUG)
127 #define NDEBUG
128 #endif
129 
130 #include <stdlib.h>
131 #include <stdint.h>
132 #include <assert.h>
133 #ifndef FIFTYONE_DEGREES_NO_THREADING
134 #include "threading.h"
135 #endif
136 
137 #ifdef __cplusplus
138 #define EXTERNAL extern "C"
139 #else
140 #define EXTERNAL
141 #endif
142 
144 typedef struct fiftyone_degrees_resource_manager_t
151 typedef struct fiftyone_degrees_resource_handle_t {
152  const void *resource;
155  void(*freeResource)(void*);
157  volatile long inUse;
159 
163 typedef struct fiftyone_degrees_resource_manager_t {
164 #ifndef FIFTYONE_DEGREES_NO_THREADING
168 #else
171 #endif
173 
193  void *resource,
194  fiftyoneDegreesResourceHandle **resourceHandle,
195  void(*freeResource)(void*));
196 
211 
222 
231 
242 EXTERNAL void fiftyoneDegreesResourceReplace(
244  void *newResource,
245  fiftyoneDegreesResourceHandle **newResourceHandle);
246 
251 #endif
const fiftyoneDegreesResourceManager * manager
Pointer to the manager the handle relates to.
Definition: resource.h:153
const void * resource
Pointer to the resource being managed.
Definition: resource.h:152
EXTERNAL void fiftyoneDegreesResourceManagerInit(fiftyoneDegreesResourceManager *manager, void *resource, fiftyoneDegreesResourceHandle **resourceHandle, void(*freeResource)(void *))
Initialise a preallocated resource manager structure with a resource for it to manage access to.
Definition: resource.c:64
EXTERNAL fiftyoneDegreesResourceHandle * fiftyoneDegreesResourceHandleIncUse(fiftyoneDegreesResourceManager *manager)
Increments the usage counter for the resource and returns a handle that can be used to reference it.
Definition: resource.c:102
EXTERNAL void fiftyoneDegreesResourceReplace(fiftyoneDegreesResourceManager *manager, void *newResource, fiftyoneDegreesResourceHandle **newResourceHandle)
Replaces the resource with the new resource.
Definition: resource.c:120
Tracks the number of active uses of the resource within the manager.
Definition: resource.h:151
volatile long inUse
Tracks active use count of the resource.
Definition: resource.h:157
EXTERNAL void fiftyoneDegreesResourceHandleDecUse(fiftyoneDegreesResourceHandle *handle)
Decrements the usage counter.
Definition: resource.c:86
EXTERNAL void fiftyoneDegreesResourceManagerFree(fiftyoneDegreesResourceManager *manager)
Frees any data associated with the manager and releases the resource making it eligible for freeing.
Definition: resource.c:75
Manager structure used to provide access to a shared and changing resource.
Definition: resource.h:163
fiftyoneDegreesResourceHandle volatile * active
Current handle for resource used by the manager.
Definition: resource.h:165