Files
redAcore/DataTreeCore.h
Charl Wentzel a972fb9101 Major Update:
- Implement consistent Function addition to application
  - Use TYPE_XXX constants to declare function type
  - Use NewXXXX() methods to call constructor correctly
  - Add FunctionType list (with constructor) to Application
  - Create Function by comparison to FunctionType list
- Simplify LoadConfig() and Init() methods for functions
  - Combine methods into Init() method
  - Pass relevant data member to Init() method
  - Remove all CDataMember references on functions
- ApplicationCore:
  - Split ReadParam() method from LoadConfig() method
  - Split main configuration into separate files:
    - config/ - main config file, general application settings
    - definition/ - application definition, e.g. function blocks
  - Definition and Address List files specified in config file
  - Load address file in address/ branch
  - Made DataTree & JSONparser private
  - Made Config, Definition & Address branches public
  - Removed unnecessary branch references
  - Improved event logging
- DataTreeCore:
  - Allow GetChFirstChild & GetChElement to create parent branches
    with correct type, ie. Object/Array
  - Remove unnecessary Create param from GetXxx functions
  - Bug fix: Print empty objects/arrays correct, ie. empty brackets
  - Bug fix: Adding element at specific index
  - Bug fix: Error when get/create string value with "null"
- FunctionCore:
  - Type param now set as constant via constructor
  - Create empty Handles & Channels objects if none in Config
- SelectableCore:
  - Add Queue length parameter to handles for UNIX and TCP sockets
- DeviceCore:
  - Bug fix: missing Process() method
2018-11-24 13:35:23 +02:00

117 lines
5.1 KiB
C++

/*
* DataTreeCore.h
*
* Created on: 5 Mar 2017
* Author: wentzelc
*/
#ifndef REDACORE_DATATREECORE_H_
#define REDACORE_DATATREECORE_H_
// Standard C/C++ Libraries
#include <stdlib.h>
// redA Libraries
#include "CharBufferCore.h"
//---------------------------------------------------------------------------
typedef enum { jtNull = 0, jtBool = 1, jtInt = 2, jtFloat = 3, jtString = 4, jtArray = 5, jtObject = 6 } EDataType;
//---------------------------------------------------------------------------
// One Config Members
class CDataMember
{
char * Name;
unsigned short NameLen;
EDataType Type;
char * Value;
unsigned short Len;
CDataMember * FirstChild;
CDataMember * LastChild;
CDataMember * Parent;
CDataMember * PrevPeer;
CDataMember * NextPeer;
// Manage Members
CDataMember * CreateChild( const char * Name, const int Len = -1 );
// Set Member value
bool SetValue( EDataType Type, const char * Value = NULL, int Len = -1 );
bool SetValuePtr( EDataType pType, const char * pValue, int pLen = -1 );
public:
CDataMember( const char * pName = NULL, const int pLen = -1 );
CDataMember( CDataMember * pParent, const char * pName = NULL, const int pLen = -1 );
~CDataMember();
EDataType GetType() { return Type; };
EDataType GetType( const char * Path );
inline bool isNull() { return (Type == jtNull); };
inline bool isBool() { return (Type == jtBool); };
inline bool isInt() { return (Type == jtInt); };
inline bool isFloat() { return (Type == jtFloat); };
inline bool isString() { return (Type == jtString); };
inline bool isArray() { return (Type == jtArray); };
inline bool isObject() { return (Type == jtObject); };
const char * GetName() { return Name; };
const char * GetName( const char * Path );
const int GetLen() { return Len; };
const int GetLen( const char * Path );
CDataMember * GetChild( const char * Path, bool Create = false );
CDataMember * GetChFirstChild( const char * Path, bool Create = false );
CDataMember * GetChElement( const char * Path, const int Index, bool Create = false );
inline CDataMember * GetFirstChild() { return GetChFirstChild( NULL, false ); };
inline CDataMember * GetElement( const int Index ) { return GetChElement( NULL, Index, false ); };
inline CDataMember * GetParent() { return Parent; };
inline CDataMember * GetPrevPeer() { return PrevPeer; };
inline CDataMember * GetNextPeer() { return NextPeer; };
const char * GetChStr( const char * Path, const char * Default = NULL, bool Create = false );
const char * GetChStr( const char * Path, int &Len, const char * Default = NULL, bool Create = false );
const bool GetChBool( const char * Path, bool Default = false, bool Create = false );
const long GetChInt( const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL );
const double GetChFloat( const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL );
inline const char * GetStr( const char * Default = NULL ) { return GetChStr( NULL, Default, false ); };
inline const char * GetStr( int &Len, const char * Default = NULL ) { return GetChStr( NULL, Len, Default, false ); };
inline const bool GetBool( bool Default = false ) { return GetChBool( NULL, Default, false ); };
inline const long GetInt( long Default = 0, const char * Mask = NULL ) { return GetChInt( NULL, Default, false, Mask ); };
inline const double GetFloat( double Default = 0.0, const char * Mask = NULL ) { return GetChFloat( NULL, Default, false, Mask ); };
bool SetChBool( const char * Path, const bool Value );
bool SetChInt( const char * Path, const long Value, const char * Mask = NULL );
bool SetChFloat( const char * Path, const double Value, const char * Mask = NULL );
bool SetChStr( const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
inline bool SetBool( const bool Value ) { return SetChBool( NULL, Value ); };
inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetChInt( NULL, Value, Mask ); };
inline bool SetFloat( const double Value, const char * Mask = NULL ) { return SetChFloat( NULL, Value, Mask ); };
inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetChStr( NULL, Value, Len ); };
bool SetChNull( const char * Path );
bool SetChObject( const char * Path );
bool SetChArray( const char * Path );
inline bool SetNull() { return SetChNull( NULL ); };
inline bool SetObject() { return SetChObject( NULL ); };
inline bool SetArray() { return SetChArray( NULL ); };
bool Clear();
bool Delete( const char * Path );
friend class CJSONparse;
};
#endif /* REDACORE_DATATREECORE_H_ */