51Degrees Common C/C++  4.1

A shared functionality library that is used by 51Degrees products

dataset.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_DATASET_H_INCLUDED
17 #define FIFTYONE_DEGREES_DATASET_H_INCLUDED
18 
82 #include "exceptions.h"
83 #include "file.h"
84 #include "memory.h"
85 #include "resource.h"
86 #include "properties.h"
87 #include "headers.h"
88 #include "config.h"
89 #include "overrides.h"
90 
94 typedef struct fiftyone_degrees_dataset_base_t {
95  const char fileName[FIFTYONE_DEGREES_FILE_MAX_PATH];
102  const char masterFileName[FIFTYONE_DEGREES_FILE_MAX_PATH];
106  void *memoryToFree;
111  bool isInMemory;
121  const void *config;
123 
141  void *dataSet,
142  const void *config,
144  void *memory,
145  long size,
146  fiftyoneDegreesException *exception);
147 
165  void *dataSet,
166  const void *config,
168  const char *fileName,
169  fiftyoneDegreesException *exception);
170 
186  void *state,
187  fiftyoneDegreesPropertiesGetMethod getPropertyMethod);
188 
203  void *state,
204  fiftyoneDegreesHeadersGetMethod getHeaderMethod);
205 
221  const char *fileName,
222  long bytesToCompare);
223 
235 
241 
251 
258 
265 
290  void *source,
291  long length,
292  size_t dataSetSize,
294  fiftyoneDegreesException *exception);
295 
318  const char *fileName,
319  size_t dataSetSize,
321  fiftyoneDegreesException *exception);
322 
330 #define FIFTYONE_DEGREES_DATASET_RELOAD(t) \
331  \
349 fiftyoneDegreesStatusCode fiftyoneDegrees##t##ReloadManagerFromMemory( \
350 fiftyoneDegreesResourceManager *manager, \
351 void *source, \
352 long length, \
353 fiftyoneDegreesException *exception) { \
354  return fiftyoneDegreesDataSetReloadManagerFromMemory( \
355  manager, \
356  source, \
357  length, \
358  sizeof(DataSet##t), \
359  initDataSetFromMemory, \
360  exception); \
361 } \
362  \
378 fiftyoneDegreesStatusCode fiftyoneDegrees##t##ReloadManagerFromFile( \
379 fiftyoneDegreesResourceManager* manager, \
380 const char *fileName, \
381 fiftyoneDegreesException *exception) { \
382  return fiftyoneDegreesDataSetReloadManagerFromFile( \
383  manager, \
384  fileName, \
385  sizeof(DataSet##t), \
386  initDataSetFromFile, \
387  exception); \
388 } \
389  \
404 fiftyoneDegreesStatusCode fiftyoneDegrees##t##ReloadManagerFromOriginalFile( \
405 fiftyoneDegreesResourceManager* manager, \
406 fiftyoneDegreesException *exception) { \
407  fiftyoneDegreesStatusCode status = FIFTYONE_DEGREES_STATUS_NOT_SET; \
408  DataSet##t* dataSet = fiftyoneDegreesDataSet##t##Get(manager); \
409  status = fiftyoneDegrees##t##ReloadManagerFromFile( \
410  manager, \
411  dataSet->b.b.masterFileName, \
412  exception); \
413  fiftyoneDegreesDataSet##t##Release(dataSet); \
414  return status; \
415 }
416 
421 #endif
bool isInMemory
True if the data file has been read into continuous memory.
Definition: dataset.h:111
fiftyoneDegreesFilePool filePool
Linked list of file readers.
Definition: dataset.h:113
fiftyoneDegreesStatusCode
Status returned from the initialisation of a resource.
Definition: status.h:75
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitHeaders(fiftyoneDegreesDataSetBase *dataSet, void *state, fiftyoneDegreesHeadersGetMethod getHeaderMethod)
Initialises the HTTP headers in the data set.
Definition: dataset.c:139
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetReloadManagerFromMemory(fiftyoneDegreesResourceManager *manager, void *source, long length, size_t dataSetSize, fiftyoneDegreesDataSetInitFromMemoryMethod initDataSet, fiftyoneDegreesException *exception)
Reload the data set being used by the resource manager using a data file loaded into contiguous memor...
Definition: dataset.c:221
fiftyoneDegreesResourceHandle * handle
Pointer to the handle that tracks this data set instance.
Definition: dataset.h:114
fiftyoneDegreesStatusCode(* fiftyoneDegreesDataSetInitFromMemoryMethod)(void *dataSet, const void *config, fiftyoneDegreesPropertiesRequired *properties, void *memory, long size, fiftyoneDegreesException *exception)
Initialses the data set from data stored in continuous memory.
Definition: dataset.h:140
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitInMemory(fiftyoneDegreesDataSetBase *dataSet, fiftyoneDegreesMemoryReader *reader)
Initialses the data set from data stored in continuous memory.
Definition: dataset.c:197
void * memoryToFree
A pointer to the memory where the data within the data set is held.
Definition: dataset.h:106
void fiftyoneDegreesDataSetFree(fiftyoneDegreesDataSetBase *dataSet)
Closes the data set by freeing anything which has been initialised at creation.
Definition: dataset.c:63
Used to read data from memory in a similar manner to a file handle.
Definition: memory.h:51
fiftyoneDegreesPropertiesAvailable * available
Available properties.
Definition: dataset.h:116
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetReloadManagerFromFile(fiftyoneDegreesResourceManager *manager, const char *fileName, size_t dataSetSize, fiftyoneDegreesDataSetInitFromFileMethod initDataSet, fiftyoneDegreesException *exception)
Reload the data set being used by the resource manager using the data file location specified.
Definition: dataset.c:264
Array of items of type fiftyoneDegreesHeader used to easily access and track the size of the array.
Definition: headers.h:124
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitFromFile(fiftyoneDegreesDataSetBase *dataSet, const char *fileName, long bytesToCompare)
Initialses the data set from data stored on file.
Definition: dataset.c:158
fiftyoneDegreesString *(* fiftyoneDegreesPropertiesGetMethod)(void *state, uint32_t index, fiftyoneDegreesCollectionItem *item)
Returns a string for the property at the index provided or NULL if there is no property available at ...
Definition: properties.h:170
Array of items of type fiftyoneDegreesPropertyAvailable used to easily access and track the size of t...
Definition: properties.h:140
Tracks the number of active uses of the resource within the manager.
Definition: resource.h:151
const void * config
Pointer to the config used to create the dataset.
Definition: dataset.h:121
fiftyoneDegreesOverridePropertyArray * overridable
Array of properties that can be overridden.
Definition: dataset.h:118
fiftyoneDegreesStatusCode(* fiftyoneDegreesDataSetInitFromFileMethod)(void *dataSet, const void *config, fiftyoneDegreesPropertiesRequired *properties, const char *fileName, fiftyoneDegreesException *exception)
Initialses the data set from data stored on file.
Definition: dataset.h:164
Defines a set of properties which are required by a caller.
Definition: properties.h:150
Manager structure used to provide access to a shared and changing resource.
Definition: resource.h:163
Base data set structure which contains the 'must have's for all data sets.
Definition: dataset.h:94
void fiftyoneDegreesDataSetReset(fiftyoneDegreesDataSetBase *dataSet)
Resets a newly allocated data set structure ready for initialisation.
Definition: dataset.c:92
fiftyoneDegreesDataSetBase * fiftyoneDegreesDataSetGet(fiftyoneDegreesResourceManager *manager)
Gets a pointer to the active data set from a resource manager.
Definition: dataset.c:212
fiftyoneDegreesHeaders * uniqueHeaders
Related HTTP headers.
Definition: dataset.h:117
Structure used to represent a 51Degrees exception and passed into methods that might generate excepti...
Definition: exceptions.h:109
fiftyoneDegreesStatusCode fiftyoneDegreesDataSetInitProperties(fiftyoneDegreesDataSetBase *dataSet, fiftyoneDegreesPropertiesRequired *properties, void *state, fiftyoneDegreesPropertiesGetMethod getPropertyMethod)
Initialises the properties in the data set.
Definition: dataset.c:105
Stack of handles used to read data from a single source file.
Definition: file.h:215
void fiftyoneDegreesDataSetRelease(fiftyoneDegreesDataSetBase *dataSet)
Releases a reference to a data set which has been fetched via the DataSetGet method.
Definition: dataset.c:217
#define FIFTYONE_DEGREES_FILE_MAX_PATH
Define the max path length on the target system.
Definition: file.h:195
long(* fiftyoneDegreesHeadersGetMethod)(void *state, uint32_t index, fiftyoneDegreesCollectionItem *nameItem)
Gets the unique id and name of the header at the requested index.
Definition: headers.h:139
Array of items of type fiftyoneDegreesOverrideProperty used to easily access and track the size of th...
Definition: overrides.h:95