\r\n

51Degrees Device Detection C/C++  4.5

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

String

Detailed Description

Byte array structures containing raw data bytes.

String structures containing the string and length.

Introduction

The String structure allows a string and its length to be stored in one structure. This avoids unnecessary calls to strlen. Both the string and its length are allocated in a single operation, so the size of the actual structure (when including the string terminator) is sizeof(fiftyoneDegreesString) + length. This means that the string itself starts at "value" and continues into the rest of the allocated memory.

Get

Getting a const char * from a fiftyoneDegreesString structure can be done by casting a reference to the "value" field:

(const char*)&string->value

However, this can be simplified by using the FIFTYONE_DEGREES_STRING macro which also performs a NULL check on the structure to avoid a segmentation fault.

Compare

This file contains two case insensitive string comparison methods as standards like stricmp vary across compilers.

fiftyoneDegreesStringCompare : compares two strings case insensitively

fiftyoneDegreesStringCompareLength : compares two strings case insensitively up to the length required. Any characters after this point are ignored

Collaboration diagram for String:

Structs

union  fiftyoneDegreesStoredBinaryValue
"Packed" value that can be present inside "strings" of dataset. More...
struct  fiftyoneDegreesString
struct  fiftyoneDegreesStringBuilder
String buffer for building strings with memory checks. More...

Macros

#define  FIFTYONE_DEGREES_STRING(s)   (const char*)(s == NULL ? NULL : &((fiftyoneDegreesString*)s)->value)
Macro used to check for NULL before returning the string as a const char *. More...

Typedefs

typedef union fiftyone_degrees_stored_binary_value_t  fiftyoneDegreesStoredBinaryValue
typedef struct fiftyone_degrees_var_length_byte_array_t  fiftyoneDegreesVarLengthByteArray

Functions

void *  fiftyoneDegreesStoredBinaryValueRead (const fiftyoneDegreesCollectionFile *file, const fiftyoneDegreesCollectionKey *key, fiftyoneDegreesData *data, fiftyoneDegreesException *exception)
Reads a binary value from the source file at the offset within the string structure. More...
const fiftyoneDegreesStoredBinaryValue *  fiftyoneDegreesStoredBinaryValueGet (const fiftyoneDegreesCollection *strings, uint32_t offset, fiftyoneDegreesPropertyValueType storedValueType, fiftyoneDegreesCollectionItem *item, fiftyoneDegreesException *exception)
Gets the binary value at the required offset from the collection provided. More...
int  fiftyoneDegreesStoredBinaryValueCompareWithString (const fiftyoneDegreesStoredBinaryValue *value, fiftyoneDegreesPropertyValueType storedValueType, const char *target, fiftyoneDegreesStringBuilder *tempBuilder, fiftyoneDegreesException *exception)
Function to compare the current binary value to the target string value using the text format. More...
int  fiftyoneDegreesStoredBinaryValueToIntOrDefault (const fiftyoneDegreesStoredBinaryValue *value, fiftyoneDegreesPropertyValueType storedValueType, int defaultValue)
Function to convert the binary value to int when possible. More...
double  fiftyoneDegreesStoredBinaryValueToDoubleOrDefault (const fiftyoneDegreesStoredBinaryValue *value, fiftyoneDegreesPropertyValueType storedValueType, double defaultValue)
Function to convert the binary value to double when possible. More...
bool  fiftyoneDegreesStoredBinaryValueToBoolOrDefault (const fiftyoneDegreesStoredBinaryValue *value, fiftyoneDegreesPropertyValueType storedValueType, bool defaultValue)
Function to convert the binary value to bool when possible. More...
uint32_t  fiftyoneDegreesStringGetFinalSize (const void *initial, fiftyoneDegreesException *exception)
Gets size of String with trailing characters. More...
void *  fiftyoneDegreesStringRead (const fiftyoneDegreesCollectionFile *file, const fiftyoneDegreesCollectionKey *key, fiftyoneDegreesData *data, fiftyoneDegreesException *exception)
Reads a string from the source file at the offset within the string structure. More...
const fiftyoneDegreesString *  fiftyoneDegreesStringGet (const fiftyoneDegreesCollection *strings, uint32_t offset, fiftyoneDegreesCollectionItem *item, fiftyoneDegreesException *exception)
Gets the string at the required offset from the collection provided. More...
int  fiftyoneDegreesStringCompareLength (char const *a, char const *b, size_t length)
Case insensitively compare two strings up to the length requested. More...
int  fiftyoneDegreesStringCompare (const char *a, const char *b)
Case insensitively compare two strings. More...
const char *  fiftyoneDegreesStringSubString (const char *a, const char *b)
Case insensitively searching a first occurrence of a substring. More...
fiftyoneDegreesStringBuilder *  fiftyoneDegreesStringBuilderInit (fiftyoneDegreesStringBuilder *builder)
Initializes the buffer. More...
fiftyoneDegreesStringBuilder *  fiftyoneDegreesStringBuilderAddChar (fiftyoneDegreesStringBuilder *builder, char const value)
Adds the character to the buffer. More...
fiftyoneDegreesStringBuilder *  fiftyoneDegreesStringBuilderAddInteger (fiftyoneDegreesStringBuilder *builder, int64_t const value)
Adds the integer to the buffer. More...
fiftyoneDegreesStringBuilder *  fiftyoneDegreesStringBuilderAddDouble (fiftyoneDegreesStringBuilder *builder, double value, uint8_t decimalPlaces)
Adds the double to the buffer. More...
fiftyoneDegreesStringBuilder *  fiftyoneDegreesStringBuilderAddChars (fiftyoneDegreesStringBuilder *builder, const char *value, size_t length)
Adds the string to the buffer. More...
void  fiftyoneDegreesStringBuilderAddIpAddress (fiftyoneDegreesStringBuilder *builder, const fiftyoneDegreesVarLengthByteArray *ipAddress, fiftyoneDegreesIpType type, fiftyoneDegreesException *exception)
Adds an the IP (as string) from byte "string". More...
fiftyoneDegreesStringBuilder *  fiftyoneDegreesStringBuilderAddStringValue (fiftyoneDegreesStringBuilder *builder, const fiftyoneDegreesStoredBinaryValue *value, fiftyoneDegreesPropertyValueType valueType, uint8_t decimalPlaces, fiftyoneDegreesException *exception)
Adds a potentially packed value as a proper string to the buffer. More...
fiftyoneDegreesStringBuilder *  fiftyoneDegreesStringBuilderComplete (fiftyoneDegreesStringBuilder *builder)
Adds a null terminating character to the buffer. More...

Macro Definition Documentation

◆ FIFTYONE_DEGREES_STRING

#define FIFTYONE_DEGREES_STRING (   s )    (const char*)(s == NULL ? NULL : &((fiftyoneDegreesString*)s)->value)

Macro used to check for NULL before returning the string as a const char *.

Parameters
s - pointer to the fiftyoneDegreesString
Returns
const char * string or NULL
Examples
Hash/StronglyTyped.c.

Function Documentation

◆ fiftyoneDegreesStoredBinaryValueCompareWithString()

int fiftyoneDegreesStoredBinaryValueCompareWithString ( const fiftyoneDegreesStoredBinaryValue *   value,
fiftyoneDegreesPropertyValueType   storedValueType,
const char *   target,
fiftyoneDegreesStringBuilder *   tempBuilder,
fiftyoneDegreesException *   exception  
)

Function to compare the current binary value to the target string value using the text format.

Parameters
value - the current binary value item
storedValueType - format of byte array representation
target - the target search value.
tempBuilder - temporary builder to stringify value into.
Returns
0 if they are equal, otherwise negative for smaller and positive for bigger
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/storedBinaryValue.h.

◆ fiftyoneDegreesStoredBinaryValueGet()

const fiftyoneDegreesStoredBinaryValue* fiftyoneDegreesStoredBinaryValueGet ( const fiftyoneDegreesCollection *   strings,
uint32_t   offset,
fiftyoneDegreesPropertyValueType   storedValueType,
fiftyoneDegreesCollectionItem *   item,
fiftyoneDegreesException *   exception  
)

Gets the binary value at the required offset from the collection provided.

Parameters
strings - collection to get the string from
offset - of the binary value in the collection
storedValueType - format of byte array representation
item - to store the string in
exception - pointer to an exception data structure to be used if an exception occurs. See exceptions.h.
Returns
a pointer to binary value or NULL if the offset is not valid
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/storedBinaryValue.h.

◆ fiftyoneDegreesStoredBinaryValueRead()

void* fiftyoneDegreesStoredBinaryValueRead ( const fiftyoneDegreesCollectionFile *   file,
const fiftyoneDegreesCollectionKey *   key,
fiftyoneDegreesData *   data,
fiftyoneDegreesException *   exception  
)

Reads a binary value from the source file at the offset within the string structure.

Parameters
file - collection to read from
key - of the binary value in the collection
data - to store the new string in
exception - pointer to an exception data structure to be used if an exception occurs. See exceptions.h.
Returns
a pointer to the string collection item or NULL if can't be found
Note
expects data to contain fiftyoneDegreesPropertyValueType matching the stored value type of the property this value belongs to.
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/storedBinaryValue.h.

◆ fiftyoneDegreesStoredBinaryValueToBoolOrDefault()

bool fiftyoneDegreesStoredBinaryValueToBoolOrDefault ( const fiftyoneDegreesStoredBinaryValue *   value,
fiftyoneDegreesPropertyValueType   storedValueType,
bool   defaultValue  
)

Function to convert the binary value to bool when possible.

Parameters
value - the current binary value item
storedValueType - format of byte array representation
defaultValue - fallback result.
Returns
converted value (when possible) or default one (when type is not convertible).
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/storedBinaryValue.h.

◆ fiftyoneDegreesStoredBinaryValueToDoubleOrDefault()

double fiftyoneDegreesStoredBinaryValueToDoubleOrDefault ( const fiftyoneDegreesStoredBinaryValue *   value,
fiftyoneDegreesPropertyValueType   storedValueType,
double   defaultValue  
)

Function to convert the binary value to double when possible.

Parameters
value - the current binary value item
storedValueType - format of byte array representation
defaultValue - fallback result.
Returns
converted value (when possible) or default one (when type is not convertible).
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/storedBinaryValue.h.

◆ fiftyoneDegreesStoredBinaryValueToIntOrDefault()

int fiftyoneDegreesStoredBinaryValueToIntOrDefault ( const fiftyoneDegreesStoredBinaryValue *   value,
fiftyoneDegreesPropertyValueType   storedValueType,
int   defaultValue  
)

Function to convert the binary value to int when possible.

Parameters
value - the current binary value item
storedValueType - format of byte array representation
defaultValue - fallback result.
Returns
converted value (when possible) or default one (when type is not convertible).
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/storedBinaryValue.h.

◆ fiftyoneDegreesStringBuilderAddChar()

fiftyoneDegreesStringBuilder* fiftyoneDegreesStringBuilderAddChar ( fiftyoneDegreesStringBuilder *   builder,
char const   value  
)

Adds the character to the buffer.

Parameters
builder - to add the character to
value - character to add
Returns
pointer to the builder passed

◆ fiftyoneDegreesStringBuilderAddChars()

fiftyoneDegreesStringBuilder* fiftyoneDegreesStringBuilderAddChars ( fiftyoneDegreesStringBuilder *   builder,
const char *   value,
size_t   length  
)

Adds the string to the buffer.

Parameters
builder - to add the character to
value - of chars to add
length - of chars to add
Returns
pointer to the buffer passed

◆ fiftyoneDegreesStringBuilderAddDouble()

fiftyoneDegreesStringBuilder* fiftyoneDegreesStringBuilderAddDouble ( fiftyoneDegreesStringBuilder *   builder,
double   value,
uint8_t   decimalPlaces  
)

Adds the double to the buffer.

Parameters
builder - to add the character to
value - floating-point number to add
decimalPlaces - precision (places after decimal dot)
Returns
pointer to the buffer passed

◆ fiftyoneDegreesStringBuilderAddInteger()

fiftyoneDegreesStringBuilder* fiftyoneDegreesStringBuilderAddInteger ( fiftyoneDegreesStringBuilder *   builder,
int64_t const   value  
)

Adds the integer to the buffer.

Parameters
builder - to add the character to
value - integer to add
Returns
pointer to the buffer passed

◆ fiftyoneDegreesStringBuilderAddIpAddress()

void fiftyoneDegreesStringBuilderAddIpAddress ( fiftyoneDegreesStringBuilder *   builder,
const fiftyoneDegreesVarLengthByteArray *   ipAddress,
fiftyoneDegreesIpType   type,
fiftyoneDegreesException *   exception  
)

Adds an the IP (as string) from byte "string".

Parameters
builder - to add the IP to
ipAddress - binary (packed) "string" with IP to add
type - type of IP inside
exception - pointer to exception struct

◆ fiftyoneDegreesStringBuilderAddStringValue()

fiftyoneDegreesStringBuilder* fiftyoneDegreesStringBuilderAddStringValue ( fiftyoneDegreesStringBuilder *   builder,
const fiftyoneDegreesStoredBinaryValue *   value,
fiftyoneDegreesPropertyValueType   valueType,
uint8_t   decimalPlaces,
fiftyoneDegreesException *   exception  
)

Adds a potentially packed value as a proper string to the buffer.

Parameters
builder - to add the character to
value - from data file to add
decimalPlaces - precision for numbers (places after decimal dot)
exception - pointer to exception struct
Returns
pointer to the buffer passed

◆ fiftyoneDegreesStringBuilderComplete()

fiftyoneDegreesStringBuilder* fiftyoneDegreesStringBuilderComplete ( fiftyoneDegreesStringBuilder *   builder )

Adds a null terminating character to the buffer.

Parameters
builder - to terminate
Returns
pointer to the buffer passed

◆ fiftyoneDegreesStringBuilderInit()

fiftyoneDegreesStringBuilder* fiftyoneDegreesStringBuilderInit ( fiftyoneDegreesStringBuilder *   builder )

Initializes the buffer.

Parameters
builder - to initialize
Returns
pointer to the builder passed

◆ fiftyoneDegreesStringCompare()

int fiftyoneDegreesStringCompare ( const char *   a,
const char *   b  
)

Case insensitively compare two strings.

Parameters
a - string to compare
b - other string to compare
Returns
0 if same
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/string.h.

◆ fiftyoneDegreesStringCompareLength()

int fiftyoneDegreesStringCompareLength ( char const *   a,
char const *   b,
size_t   length  
)

Case insensitively compare two strings up to the length requested.

Parameters
a - string to compare
b - other string to compare
length - of the strings to compare
Returns
0 if same
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/string.h.

◆ fiftyoneDegreesStringGet()

const fiftyoneDegreesString* fiftyoneDegreesStringGet ( const fiftyoneDegreesCollection *   strings,
uint32_t   offset,
fiftyoneDegreesCollectionItem *   item,
fiftyoneDegreesException *   exception  
)

Gets the string at the required offset from the collection provided.

Parameters
strings - collection to get the string from
offset - of the string in the collection
item - to store the string in
exception - pointer to an exception data structure to be used if an exception occurs. See exceptions.h.
Returns
a pointer to string of NULL if the offset is not valid
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/string.h.

◆ fiftyoneDegreesStringGetFinalSize()

uint32_t fiftyoneDegreesStringGetFinalSize ( const void *   initial,
fiftyoneDegreesException *   exception  
)

Gets size of String with trailing characters.

Parameters
initial - pointer to string "head"
Returns
full (with tail) struct size
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/string.h.

◆ fiftyoneDegreesStringRead()

void* fiftyoneDegreesStringRead ( const fiftyoneDegreesCollectionFile *   file,
const fiftyoneDegreesCollectionKey *   key,
fiftyoneDegreesData *   data,
fiftyoneDegreesException *   exception  
)

Reads a string from the source file at the offset within the string structure.

Parameters
file - collection to read from
key - of the string in the collection
data - to store the new string in
exception - pointer to an exception data structure to be used if an exception occurs. See exceptions.h.
Returns
a pointer to the string collection item or NULL if can't be found
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/string.h.

◆ fiftyoneDegreesStringSubString()

const char* fiftyoneDegreesStringSubString ( const char *   a,
const char *   b  
)

Case insensitively searching a first occurrence of a substring.

Parameters
a - string to search
b - substring to be searched for
Returns
pointer to the first occurrence or NULL if not found
Examples
/home/runner/work/device-detection-cxx/device-detection-cxx/common/device-detection-cxx/src/common-cxx/string.h.
On This Page