A device detection library that is used natively or by 51Degrees products

EngineBase.hpp

1/* *********************************************************************
2 * This Original Work is copyright of 51 Degrees Mobile Experts Limited.
3 * Copyright 2026 51 Degrees Mobile Experts Limited, Davidson House,
4 * Forbury Square, Reading, Berkshire, United Kingdom RG1 3EU.
5 *
6 * This Original Work is licensed under the European Union Public Licence
7 * (EUPL) v.1.2 and is subject to its terms as set out below.
8 *
9 * If a copy of the EUPL was not distributed with this file, You can obtain
10 * one at https://opensource.org/licenses/EUPL-1.2.
11 *
12 * The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
13 * amended by the European Commission) shall be deemed incompatible for
14 * the purposes of the Work and the provisions of the compatibility
15 * clause in Article 5 of the EUPL shall not apply.
16 *
17 * If using the Work as, or as part of, a network application, by
18 * including the attribution notice(s) required under Article 5 of the EUPL
19 * in the end user terms of the application under an appropriate heading,
20 * such notice(s) shall fulfill the requirements of that article.
21 * ********************************************************************* */
22
23#ifndef FIFTYONE_DEGREES_ENGINE_BASE_HPP
24#define FIFTYONE_DEGREES_ENGINE_BASE_HPP
25
26#include <string>
27#include <vector>
28#include <sstream>
29#include <memory>
30#include <algorithm>
31#include "Exceptions.hpp"
32#include "RequiredPropertiesConfig.hpp"
33#include "Date.hpp"
34#include "ConfigBase.hpp"
35#include "MetaData.hpp"
36#include "EvidenceBase.hpp"
37#include "ResultsBase.hpp"
38#include "dataset.h"
39#include "property.h"
40#include "collection.h"
41
42
43namespace FiftyoneDegrees {
44 namespace Common {
45 FIFTYONE_DEGREES_COMMON_CXX_BEGIN
78 class EngineBase {
79 public:
84
94 RequiredPropertiesConfig *properties);
95
100 virtual ~EngineBase();
101
107
116
121 virtual void refreshData() const = 0;
122
127 virtual void refreshData(const char *fileName) const = 0;
128
134 virtual void refreshData(void *data, fiftyoneDegreesFileOffset length) const = 0;
135
141 virtual void refreshData(unsigned char data[], fiftyoneDegreesFileOffset length) const = 0;
142
148
153 void setLicenseKey(const string &licenseKey);
154
159 void setDataUpdateUrl(const string &updateUrl);
160
166
174
182
188 virtual string getDataFilePath() const = 0;
189
195 virtual string getDataFileTempPath() const = 0;
196
202 virtual string getDataUpdateUrl() const;
203
208 virtual Date getPublishedTime() const = 0;
209
215 virtual Date getUpdateAvailableTime() const = 0;
216
221 virtual string getProduct() const = 0;
222
228 virtual string getType() const = 0;
229
236 const vector<string>* getKeys() const;
237
248 vector<string> getRequiredProperties() const;
249
255 bool getIsThreadSafe() const;
256
260 protected:
263
270 shared_ptr<fiftyoneDegreesResourceManager> manager;
271
274
278
281
283 string updateUrl;
284
287
289 vector<string> keys;
290
298 virtual void appendValue(
299 stringstream &stream,
301 uint32_t offset,
302 fiftyoneDegreesPropertyValueType storedValueType) const;
303
310 virtual void appendString(
311 stringstream &stream,
313 uint32_t offset) const;
314
321 virtual void initHttpHeaderKeys(fiftyoneDegreesHeaders *uniqueHeaders);
322
330 fiftyoneDegreesOverridePropertyArray *overrideProperties);
331
337 void addKey(string key);
338 };
339 FIFTYONE_DEGREES_COMMON_CXX_END
340 }
341}
342
343#endif
C++ class wrapper for the fiftyoneDegreesConfigBase configuration structure.
Definition ConfigBase.hpp:61
The Date class wraps the C fiftyoneDegreesDate structure and is used to represent dates in engines.
Definition Date.hpp:49
virtual void appendString(stringstream &stream, fiftyoneDegreesCollection *strings, uint32_t offset) const
Gets a string from a strings collection, and appends to a stream.
EngineBase(ConfigBase *config, RequiredPropertiesConfig *properties)
Construct a new instance of the engine class with the configuration and properties provided.
virtual void appendValue(stringstream &stream, fiftyoneDegreesCollection *strings, uint32_t offset, fiftyoneDegreesPropertyValueType storedValueType) const
Gets a string from a strings collection, and appends to a stream.
const vector< string > * getKeys() const
Get the list of keys which the engine accepts as evidence.
virtual string getDataFileTempPath() const =0
Get the path to the temporary data file created by the engine, or an empty string if one was not crea...
virtual string getDataFilePath() const =0
Get the path to the data file the current data set was initialised from.
vector< string > keys
Keys which should be added to evidence.
Definition EngineBase.hpp:289
vector< string > getRequiredProperties() const
Get the names of the required properties in required property index order, so position i in the vecto...
void setLicenseKey(const string &licenseKey)
Sets the license key to be used when updating the data set.
RequiredPropertiesConfig * requiredProperties
Pointer to the properties which are going to be used.
Definition EngineBase.hpp:273
virtual void refreshData(const char *fileName) const =0
Refresh the data set from the file location provided.
ConfigBase * config
Pointer to the configuration used to build the engine.
Definition EngineBase.hpp:262
virtual Date getPublishedTime() const =0
Get the date at which the current data set was published.
bool getAutomaticUpdatesEnabled() const
Gets whether or not automatic updates are enabled.
void addKey(string key)
Adds a key to the list of keys which should be added as evidence.
MetaData * metaData
Pointer to the meta data relating to the contents of the engine's data set.
Definition EngineBase.hpp:277
virtual void initHttpHeaderKeys(fiftyoneDegreesHeaders *uniqueHeaders)
Initialise the HTTP header keys which are used by this engine.
virtual void refreshData(unsigned char data[], fiftyoneDegreesFileOffset length) const =0
Refresh the data set from the memory location provided.
bool getIsThreadSafe() const
Get whether or not the engine was compiled with thread-safe support.
virtual string getType() const =0
Get the tier of the data set being used e.g.
virtual Date getUpdateAvailableTime() const =0
Get the date at which a new data file will be available to download from the URL returned by getDataU...
string updateUrl
URL used to update the data set.
Definition EngineBase.hpp:283
MetaData * getMetaData() const
Return the a pointer to the meta data class which contains meta data for the properties,...
virtual string getDataUpdateUrl() const
Get the URL to be used when updating the data file, or an empty string if this is not set.
virtual void refreshData(void *data, fiftyoneDegreesFileOffset length) const =0
Refresh the data set from the memory location provided.
shared_ptr< fiftyoneDegreesResourceManager > manager
A shared pointer to the manager is passed around and referenced by all instances that hold open a res...
Definition EngineBase.hpp:270
string licenceKey
License key used to update the data set.
Definition EngineBase.hpp:280
string defaultDataKey
The default key to use when adding the results to a dictionary.
Definition EngineBase.hpp:286
virtual void refreshData() const =0
Refresh the data set from the original file location.
virtual string getProduct() const =0
Get the name of the data set being used e.g.
void setDataUpdateUrl(const string &updateUrl)
Sets the URL to be used when updating the data set.
void initOverrideKeys(fiftyoneDegreesOverridePropertyArray *overrideProperties)
Initialise the override keys which are used by this engine.
virtual ~EngineBase()
Frees the meta data class and the data set resource created by the extending class.
virtual ResultsBase * processBase(EvidenceBase *evidence) const =0
Processes the evidence provided and returns the result.
Base evidence class containing evidence to be processed by an engine.
Definition EvidenceBase.hpp:68
Contains meta data for the properties, values, profiles and components that exist within the engine i...
Definition MetaData.hpp:71
C++ class wrapper for the fiftyoneDegreesPropertiesRequired structure.
Definition RequiredPropertiesConfig.hpp:59
Encapsulates the results of an engine's processing.
Definition ResultsBase.hpp:97
long fiftyoneDegreesFileOffset
Type for file offset in API.
Definition fileOffset.h:73
fiftyoneDegreesHeaderArray fiftyoneDegreesHeaders
Array of headers used to easily access and track the size of the array.
Definition headers.h:171
Shared classes.
Definition Collection.hpp:31
A C++ wrapper class for transform.h conversion routines.
Definition ComponentMetaDataBuilderHash.hpp:33
Definition GettingStarted.c:67
All the shared methods and fields required by file, memory and cached collections.
Definition collection.h:408
Array of items of type fiftyoneDegreesOverrideProperty used to easily access and track the size of th...
Definition overrides.h:107