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
This commit is contained in:
Charl Wentzel
2018-11-24 13:35:23 +02:00
parent 7434334280
commit a972fb9101
15 changed files with 518 additions and 469 deletions

View File

@@ -226,7 +226,7 @@ CDataMember * CDataMember::GetChild( const char * Path, bool Create )
// Create element if needed
if (!*Child && Create) {
if ((Index == -1) || (Index = Count + 1)) {
if ((Index == -1) || (Index == Count)) {
*Child = new CDataMember( Member, NULL );
}
}
@@ -271,35 +271,41 @@ CDataMember * CDataMember::GetChild( const char * Path, bool Create )
}
//---------------------------------------------------------------------------
CDataMember * CDataMember::GetChFirstChild( const char * Path )
CDataMember * CDataMember::GetChFirstChild( const char * Path, bool Create )
{
CDataMember * Member = NULL;
// Find member
Member = (!Path || !*Path)? this : GetChild( Path, false );
Member = (!Path || !*Path)? this : GetChild( Path, Create );
// Check if valid type
if (!Member || ((Member->Type != jtObject) && (Member->Type != jtNull))) {
return NULL;
}
else if (Create && (Member->Type == jtNull)) {
Member->SetObject(); // Set newly created member to object
}
return Member->FirstChild;
}
//---------------------------------------------------------------------------
CDataMember * CDataMember::GetChElement( const char * Path, const int Index )
CDataMember * CDataMember::GetChElement( const char * Path, const int Index, bool Create )
{
CDataMember * Member = NULL;
CDataMember * Child = NULL;
int Count;
// Find Member
Member = (!Path || !*Path)? this : GetChild( Path, false );
Member = (!Path || !*Path)? this : GetChild( Path, Create );
// Check if valid type
if (!Member || ((Member->Type != jtArray) && (Member->Type != jtNull))) {
return NULL;
}
else if (Create && (Member->Type == jtNull)) {
Member->SetArray(); // Set newly created member to array
}
// Find element at position
Count = 0;
@@ -526,7 +532,7 @@ const char * CDataMember::GetChStr( const char * Path, const char * Default, boo
return Member->Value;
}
else if (Member && Create && (Member->Type == jtNull)) {
Member->SetValue( jtString, Default );
Member->SetStr( Default );
return Member->Value;
}
else {
@@ -546,7 +552,7 @@ const char * CDataMember::GetChStr( const char * Path, int &Len, const char * De
return Member->Value;
}
else if (Member && Create && (Member->Type == jtNull)) {
Member->SetValue( jtString, Default );
Member->SetStr( Default );
Len = Member->Len;
return Member->Value;
}