Grassroots Infrastructure
The Grassroots Infrastructure is a suite of computing tools to help users and developers use scientific data infrastructure that can easily be interconnected.
parameter.h
Go to the documentation of this file.
1 /*
2 ** Copyright 2014-2016 The Earlham Institute
3 **
4 ** Licensed under the Apache License, Version 2.0 (the "License");
5 ** you may not use this file except in compliance with the License.
6 ** You may obtain a copy of the License at
7 **
8 ** http://www.apache.org/licenses/LICENSE-2.0
9 **
10 ** Unless required by applicable law or agreed to in writing, software
11 ** distributed under the License is distributed on an "AS IS" BASIS,
12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ** See the License for the specific language governing permissions and
14 ** limitations under the License.
15 */
16 
24 #ifndef PARAMETER_H
25 #define PARAMETER_H
26 
27 #include "uuid_defs.h"
28 
29 #include "linked_list.h"
31 #include "data_resource.h"
32 #include "hash_table.h"
33 #include "schema_version.h"
34 #include "parameter_type.h"
36 #include "jansson.h"
37 
38 
39 /******* FORWARD DECLARATION *******/
40 struct Parameter;
41 struct ServiceData;
42 struct Service;
43 
52 typedef enum
53 {
59 
65 
72 
73 
85 typedef struct NamedParameterType
86 {
88  const char * const npt_name_s;
89 
96 
97 
104 #define SET_NAMED_PARAMETER_TYPE_TAGS(a,b) ({ .npt_name_s = a, .npt_type = b})
105 
106 /* forward declaration */
107 typedef struct Parameter Parameter;
108 
109 
110 
121 struct Parameter
122 {
125 
127  char *pa_name_s;
128 
131 
134 
135 
144 
149 
155 
162 
163 
170 
171 
177 
178 
187 
188 
193 
194 
195  void (*pa_clear_fn) (struct Parameter *param_p);
196 
197 
198  bool (*pa_add_values_to_json_fn) (const struct Parameter *param_p, json_t *param_json_p, const bool full_definition_flag);
199 
200  struct Parameter *(*pa_clone_fn) (const struct Parameter *param_p, const struct ServiceData *data_p);
201 
202  bool (*pa_set_value_from_string_fn) (struct Parameter *param_p, const char *value_s);
203 
204 
209 };
210 
211 
219 typedef struct ParameterNode
220 {
223 
226 } ParameterNode;
227 
228 
229 
230 #ifndef DOXYGEN_SHOULD_SKIP_THIS
231 
232 
233 #ifdef ALLOCATE_PARAMETER_TAGS
234  #define PARAMETER_PREFIX GRASSROOTS_SERVICE_API
235  #define PARAMETER_VAL(x) = x
236  #define PARAMETER_CONCAT_VAL(x,y) = x y
237 #else
238  #define PARAMETER_PREFIX extern GRASSROOTS_SERVICE_API
239  #define PARAMETER_VAL(x)
240  #define PARAMETER_CONCAT_VAL(x,y)
241 #endif
242 
243 #endif /* #ifndef DOXYGEN_SHOULD_SKIP_THIS */
244 
245 #ifdef __cplusplus
246 extern "C" {
247 #endif
248 
249 
250 
251 
252 PARAMETER_PREFIX const char * const PA_TABLE_COLUMN_HEADERS_PLACEMENT_S PARAMETER_VAL("Column Headers Placement");
253 
254 PARAMETER_PREFIX const char * const PA_TABLE_COLUMN_HEADINGS_S PARAMETER_VAL("Column Headings");
255 
256 PARAMETER_PREFIX const char * const PA_TABLE_ROW_HEADINGS_S PARAMETER_VAL("Row Headings");
257 
258 PARAMETER_PREFIX const char * const PA_TABLE_COLUMN_DELIMITER_S PARAMETER_VAL("Column Delimiter");
259 
260 PARAMETER_PREFIX const char * const PA_TABLE_ADD_COLUMNS_FLAG_S PARAMETER_VAL("Add User-Definable Columns");
261 
262 PARAMETER_PREFIX const char * const PA_TABLE_ROW_DELIMITER_S PARAMETER_VAL("Row Delimiter");
263 
264 PARAMETER_PREFIX const char * const PA_TABLE_DEFAULT_COLUMN_DELIMITER_S PARAMETER_VAL(",");
265 
266 PARAMETER_PREFIX const char * const PA_TABLE_DEFAULT_ROW_DELIMITER_S PARAMETER_VAL("\n");
267 
268 PARAMETER_PREFIX const char * const PA_DOUBLE_PRECISION_S PARAMETER_VAL("precision");
269 
270 PARAMETER_PREFIX const char * const PA_TYPE_STRING_ARRAY_S PARAMETER_VAL("string_array");
271 
272 PARAMETER_PREFIX const char * const PA_TYPE_TIME_ARRAY_S PARAMETER_VAL("time_array");
273 
274 PARAMETER_PREFIX const char * const PA_TYPE_STRING_S PARAMETER_VAL("string");
275 
276 PARAMETER_PREFIX const char * const PA_TYPE_BOOLEAN_S PARAMETER_VAL("boolean");
277 
278 PARAMETER_PREFIX const char * const PA_TYPE_INTEGER_S PARAMETER_VAL("integer");
279 
280 PARAMETER_PREFIX const char * const PA_TYPE_NUMBER_S PARAMETER_VAL("number");
281 
282 PARAMETER_PREFIX const char * const PA_TYPE_CHARACTER_S PARAMETER_VAL("character");
283 
284 
285 PARAMETER_PREFIX const char * const PA_TABLE_COLUMN_HEADERS_PLACEMENT_FIRST_ROW_S PARAMETER_VAL("Column Headers Placement On First Row");
286 
287 
288 
289 
310 //GRASSROOTS_PARAMS_API Parameter *AllocateParameter (const struct ServiceData *service_data_p, ParameterType type, const char * const name_s, const char * const display_name_s, const char * const description_s, LinkedList *options_p, SharedType default_value, SharedType *current_value_p, ParameterBounds *bounds_p, ParameterLevel level, const char *(*check_value_fn) (const Parameter * const parameter_p, const void *value_p));
311 
312 
313 
314 GRASSROOTS_SERVICE_API bool InitParameter (Parameter *param_p, const struct ServiceData *service_data_p, ParameterType type, const char * const name_s,
315  const char * const display_name_s, const char * const description_s, ParameterLevel level,
316  void (*clear_fn) (Parameter *param_p),
317  bool (*add_values_to_json_fn) (const Parameter *param_p, json_t *param_json_p, const bool full_definition_flag),
318  struct Parameter *(*clone_fn) (const Parameter *param_p, const struct ServiceData *service_data_p),
319  bool (*set_value_from_string_fn) (struct Parameter *param_p, const char *value_s)
320 );
321 
322 
323 
333 
334 
335 GRASSROOTS_SERVICE_API bool InitParameterFromJSON (Parameter *param_p, const json_t * const root_p, const struct Service *service_p, const bool concise_flag, const ParameterType *pt_p);
336 
337 
338 GRASSROOTS_SERVICE_API bool AddParameterValuesToJSON (const Parameter *param_p, json_t *param_json_p, const bool full_definition_flag);
339 
340 
348 GRASSROOTS_SERVICE_API Parameter *CloneParameter (const Parameter * const src_p, const struct ServiceData *data_p);
349 
350 
358 
359 
367 
368 
369 
370 
378 GRASSROOTS_SERVICE_API bool CompareParameterLevels (const ParameterLevel param_level, const ParameterLevel threshold);
379 
380 
381 
391 GRASSROOTS_SERVICE_API const char *CheckForSignedReal (const Parameter * const parameter_p, const void *value_p);
392 
393 
403 GRASSROOTS_SERVICE_API const char *CheckForNotNull (const Parameter * const parameter_p, const void *value_p);
404 
405 
418 GRASSROOTS_SERVICE_API bool AddParameterKeyStringValuePair (Parameter * const parameter_p, const char *key_s, const char *value_s);
419 
420 
421 GRASSROOTS_SERVICE_API bool AddParameterKeyJSONValuePair (Parameter * const parameter_p, const char *key_s, const json_t *value_p);
422 
423 
424 GRASSROOTS_SERVICE_API bool AddColumnParameterHint (const char *name_s, const char *description_s, const ParameterType param_type, const bool required_flag, json_t *array_p);
425 
426 
434 GRASSROOTS_SERVICE_API void RemoveParameterKeyValuePair (Parameter * const parameter_p, const char *key_s);
435 
436 
445 GRASSROOTS_SERVICE_API const char *GetParameterKeyValue (const Parameter * const parameter_p, const char *key_s);
446 
447 
464 GRASSROOTS_SERVICE_API json_t *GetParameterAsJSON (const Parameter * const parameter_p, const SchemaVersion * const sv_p, const bool full_definition_flag);
465 
466 
479 GRASSROOTS_SERVICE_API Parameter *CreateParameterFromJSON (const json_t * const root_p, struct Service *service_p, const bool concise_flag);
480 
481 
482 
493 GRASSROOTS_SERVICE_API bool IsJSONParameterConcise (const json_t * const json_p);
494 
495 
496 
505 GRASSROOTS_SERVICE_API const char *GetUIName (const Parameter * const parameter_p);
506 
507 
522 GRASSROOTS_SERVICE_API char *GetParameterValueAsString (const Parameter * const param_p, bool *alloc_flag_p);
523 
524 
534 GRASSROOTS_SERVICE_API bool SetParameterCurrentValueFromString (Parameter * const param_p, const char *value_s);
535 
536 
548 GRASSROOTS_SERVICE_API bool AddRemoteDetailsToParameter (Parameter *param_p, const char * const uri_s, const char * const name_s);
549 
550 
559 GRASSROOTS_SERVICE_API bool CopyRemoteParameterDetails (const Parameter * const src_param_p, Parameter *dest_param_p);
560 
561 
568 GRASSROOTS_SERVICE_API const char *GetGrassrootsTypeAsString (const ParameterType param_type);
569 
570 
578 GRASSROOTS_SERVICE_API bool GetGrassrootsTypeFromString (const char *param_type_s, ParameterType *param_type_p);
579 
580 
591 GRASSROOTS_SERVICE_API bool GetParameterGroupVisibility (const struct ServiceData *service_data_p, const char *group_name_s, bool *visibility_p);
592 
593 
604 GRASSROOTS_SERVICE_API bool GetParameterDescriptionFromConfig (const struct ServiceData *service_data_p, const char *param_name_s, char **description_ss);
605 
606 
617 GRASSROOTS_SERVICE_API bool GetParameterDisplayNameFromConfig (const struct ServiceData *service_data_p, const char *param_name_s, char **display_name_ss);
618 
619 
630 GRASSROOTS_SERVICE_API bool GetParameterLevelFromConfig (const struct ServiceData *service_data_p, const char *param_name_s, ParameterLevel *level_p);
631 
632 
642 
643 
644 
653 GRASSROOTS_SERVICE_API bool GetParameterLevelFromString (const char *level_s, ParameterLevel *level_p);
654 
655 
665 
666 
674 
675 
696 GRASSROOTS_SERVICE_API json_t *GetRunnableParameterAsJSON (const Parameter *param_p, const SchemaVersion * const sv_p, const bool full_definition_flag);
697 
698 
699 GRASSROOTS_SERVICE_API bool AddParameterLevelToJSON (const ParameterLevel level, json_t *root_p, const SchemaVersion * const UNUSED_PARAM (sv_p));
700 
701 
702 
703 GRASSROOTS_SERVICE_API void SetParameterCallbacks (Parameter *param_p, void (*clear_fn) (Parameter *param_p),
704  bool (*add_values_to_json_fn) (const Parameter *param_p, json_t *param_json_p, const bool full_definition_flag),
705  Parameter *(*clone_fn) (const Parameter *param_p, const struct ServiceData *data_p),
706  bool (*set_value_from_string_fn) (Parameter *param_p, const char *value_s));
707 
708 
709 GRASSROOTS_SERVICE_API const json_t *GetParameterFromConfig (const json_t *service_config_p, const char * const param_name_s);
710 
711 
712 
713 GRASSROOTS_SERVICE_LOCAL bool AddNullParameterValueToJSON (json_t *param_json_p, const char *key_s);
714 
715 
716 
717 GRASSROOTS_SERVICE_API bool SetParameterCurrentValueFromJSON (Parameter *param_p, const json_t *value_p);
718 
719 
720 GRASSROOTS_SERVICE_API const char *GetNamedParameterDefaultValueFromJSON (const char *id_param_s, const json_t *params_json_p);
721 
722 
724 
725 
726 #ifdef __cplusplus
727 }
728 #endif
729 
730 #endif /* #ifndef PARAMETER_H */
731 
Parameter
The datatype that stores all of the information about a Parameter.
Definition: parameter.h:121
ParameterGroup
A datatype to tell the system that certain parameters should be grouped together in the client's user...
Definition: parameter_group.h:85
Parameter::IsJSONParameterConcise
bool IsJSONParameterConcise(const json_t *const json_p)
Does the JSON fragment describe a full set of a Parameter's features or just enough to get its curren...
SchemaVersion
This is a datatype to store the versioning details for the Grassroots JSON schema that is being used.
Definition: schema_version.h:44
Parameter::pa_type
ParameterType pa_type
The type of the parameter.
Definition: parameter.h:124
NamedParameterType
This is a datatype that stores a read-only c-style string along with a ParameterType.
Definition: parameter.h:85
Parameter::CloneParameter
Parameter * CloneParameter(const Parameter *const src_p, const struct ServiceData *data_p)
Clone a Parameter.
ParameterType
ParameterType
The different types that a Parameter can take.
Definition: parameter_type.h:35
ParameterGroup::GetParameterGroupVisibility
bool GetParameterGroupVisibility(const struct ServiceData *service_data_p, const char *group_name_s, bool *visibility_p)
Get the configured visibility value for a given ParameterGroup.
grassroots_service_library.h
PARAMETER_VAL
const PARAMETER_PREFIX char *const PA_TABLE_COLUMN_HEADERS_PLACEMENT_S PARAMETER_VAL("Column Headers Placement")
Parameter::InitParameter
bool InitParameter(Parameter *param_p, const struct ServiceData *service_data_p, ParameterType type, const char *const name_s, const char *const display_name_s, const char *const description_s, ParameterLevel level, void(*clear_fn)(Parameter *param_p), bool(*add_values_to_json_fn)(const Parameter *param_p, json_t *param_json_p, const bool full_definition_flag), struct Parameter *(*clone_fn)(const Parameter *param_p, const struct ServiceData *service_data_p), bool(*set_value_from_string_fn)(struct Parameter *param_p, const char *value_s))
Allocate a Parameter.
GRASSROOTS_SERVICE_API
#define GRASSROOTS_SERVICE_API
Definition: grassroots_service_library.h:49
Parameter::GetParameterLevelAsString
const char * GetParameterLevelAsString(const ParameterLevel level)
Get the string representation of a given ParameterLevel.
Parameter::CheckForSignedReal
const char * CheckForSignedReal(const Parameter *const parameter_p, const void *value_p)
Check whether the value of a Parameter is a non-negative real value.
ParameterNode::pn_node
ListItem pn_node
The ListItem.
Definition: parameter.h:222
schema_version.h
Parameter::pa_display_name_s
char * pa_display_name_s
An optional user-friendly name of the parameter to use for client user interfaces.
Definition: parameter.h:130
GetGrassrootsTypeFromString
bool GetGrassrootsTypeFromString(const char *param_type_s, ParameterType *param_type_p)
Get the ParameterType from its human-readable name.
PL_ALL
The value of a ParameterLevel for Parameters that are considered the options suitable for all levels.
Definition: parameter.h:70
Parameter::pa_clear_fn
void(* pa_clear_fn)(struct Parameter *param_p)
Definition: parameter.h:195
Parameter::pa_remote_parameter_details_p
LinkedList * pa_remote_parameter_details_p
A LinkedList of RemoteParameterNodes that hold the information for Parameters for PairedServices to t...
Definition: parameter.h:169
Parameter::pa_read_only_flag
bool pa_read_only_flag
Is the Parameter read-only?
Definition: parameter.h:208
SetParameterCurrentValueFromJSON
bool SetParameterCurrentValueFromJSON(Parameter *param_p, const json_t *value_p)
GRASSROOTS_SERVICE_LOCAL
#define GRASSROOTS_SERVICE_LOCAL
Definition: grassroots_service_library.h:50
Parameter::AllocateParameterNode
ParameterNode * AllocateParameterNode(Parameter *param_p)
Allocate a ParameterNode for a given Parameter so that it can be stored upon a LinkedList.
Parameter::pa_group_p
struct ParameterGroup * pa_group_p
The ParameterGroup to which this Parameter belongs.
Definition: parameter.h:161
Parameter::GetParameterDescriptionFromConfig
bool GetParameterDescriptionFromConfig(const struct ServiceData *service_data_p, const char *param_name_s, char **description_ss)
Get the configured description for a given Parameter.
AddParameterKeyJSONValuePair
bool AddParameterKeyJSONValuePair(Parameter *const parameter_p, const char *key_s, const json_t *value_p)
Parameter::CreateParameterFromJSON
Parameter * CreateParameterFromJSON(const json_t *const root_p, struct Service *service_p, const bool concise_flag)
Create a Parameter from a json-based representation.
Parameter::CopyRemoteParameterDetails
bool CopyRemoteParameterDetails(const Parameter *const src_param_p, Parameter *dest_param_p)
Make a deep copy of all of the RemoteParameterDetails stored on one Parameter to another.
Parameter::pa_options_p
LinkedList * pa_options_p
If the parameter can only take one of a constrained set of values, this will be a LinkedList of Param...
Definition: parameter.h:143
remote_parameter_details.h
uuid_defs.h
parameter_type.h
parameter_type.h
GetGrassrootsTypeAsString
const char * GetGrassrootsTypeAsString(const ParameterType param_type)
Get the human-readable name for a given ParameterType.
NamedParameterType::npt_type
const ParameterType npt_type
The read-only ParameterType for the Parameter with the name given by npt_name_s.
Definition: parameter.h:94
Parameter::GetParameterValueAsString
char * GetParameterValueAsString(const Parameter *const param_p, bool *alloc_flag_p)
Get the current value of a Parameter as a string.
PL_SIMPLE
The value of a ParameterLevel for Parameters that are considered the most simple options.
Definition: parameter.h:58
Service
A datatype which defines an available service, its capabilities and its parameters.
Definition: service.h:153
Parameter::AddRemoteDetailsToParameter
bool AddRemoteDetailsToParameter(Parameter *param_p, const char *const uri_s, const char *const name_s)
Create a RemoteParameterDetails and add it to the given Parameter.
GetParameterStringMultiOptions
LinkedList * GetParameterStringMultiOptions(Parameter *param_p)
ParameterLevel
ParameterLevel
The ParameterLevel defines the level that a user should be to adjust the Parameter.
Definition: parameter.h:52
LinkedList
A doubly-linked list that can be traversed in either direction.
Definition: linked_list.h:56
AddParameterValuesToJSON
bool AddParameterValuesToJSON(const Parameter *param_p, json_t *param_json_p, const bool full_definition_flag)
Parameter::pa_level
ParameterLevel pa_level
The level of the parameter.
Definition: parameter.h:148
Parameter::NullifyParameter
void NullifyParameter(Parameter *param_p)
Set a given Parameter's member variables to initial empty, NULL or false values.
Parameter::GetUIName
const char * GetUIName(const Parameter *const parameter_p)
Get the name to use for a Client to use for this Parameter.
Parameter::pa_store_p
HashTable * pa_store_p
A map allowing the Parameter to store an arbitrary set of key-value pairs.
Definition: parameter.h:154
Parameter::GetParameterLevelFromConfig
bool GetParameterLevelFromConfig(const struct ServiceData *service_data_p, const char *param_name_s, ParameterLevel *level_p)
Get the configured ParameterLevel for a given Parameter.
Parameter::pa_required_flag
bool pa_required_flag
Must this Parameter contain a valid value or can it be empty?
Definition: parameter.h:192
Parameter::ClearParameter
void ClearParameter(Parameter *param_p)
Clear a Parameter.
Parameter::AddParameterKeyStringValuePair
bool AddParameterKeyStringValuePair(Parameter *const parameter_p, const char *key_s, const char *value_s)
Add a key value pair to a Parameter.
Parameter::CheckForNotNull
const char * CheckForNotNull(const Parameter *const parameter_p, const void *value_p)
Check whether the value of a Parameter is not NULL.
NamedParameterType::npt_name_s
const char *const npt_name_s
The read-only name of the Parameter.
Definition: parameter.h:88
Parameter::GetParameterLevelFromString
bool GetParameterLevelFromString(const char *level_s, ParameterLevel *level_p)
Get the ParameterLevel from a string representation.
CompareParameterLevels
bool CompareParameterLevels(const ParameterLevel param_level, const ParameterLevel threshold)
Test whether a given ParameterLevel matches or exceeds another.
Parameter::GetRunnableParameterAsJSON
json_t * GetRunnableParameterAsJSON(const Parameter *param_p, const SchemaVersion *const sv_p, const bool full_definition_flag)
Get the minimal json-based representation of a Parameter needed to run one or more ServiceJobs.
Parameter::SetParameterCurrentValueFromString
bool SetParameterCurrentValueFromString(Parameter *const param_p, const char *value_s)
Set the current value of a Parameter from a string.
Parameter::pa_description_s
char * pa_description_s
The description for this parameter.
Definition: parameter.h:133
Parameter::FreeParameter
void FreeParameter(Parameter *param_p)
Free a Parameter.
Parameter::GetParameterKeyValue
const char * GetParameterKeyValue(const Parameter *const parameter_p, const char *key_s)
Get a value from a Parameter.
Parameter::FreeParameterNode
void FreeParameterNode(ListItem *node_p)
Free a ParameterNode.
Parameter::pa_set_value_from_string_fn
bool(* pa_set_value_from_string_fn)(struct Parameter *param_p, const char *value_s)
Definition: parameter.h:202
linked_list.h
A doubly-linked list.
Parameter::RemoveParameterKeyValuePair
void RemoveParameterKeyValuePair(Parameter *const parameter_p, const char *key_s)
Remove a key value pair from a Parameter.
Parameter::GetParameterAsJSON
json_t * GetParameterAsJSON(const Parameter *const parameter_p, const SchemaVersion *const sv_p, const bool full_definition_flag)
Get the json-based representation of a Parameter.
ParameterNode
A datatype for storing Parameters in a LinkedList.
Definition: parameter.h:219
ServiceData
A datatype for holding the configuration data for a Service.
Definition: service.h:126
Parameter::pa_refresh_service_flag
bool pa_refresh_service_flag
When the value of this Parameter is changed in the client, should it make a request to the server to ...
Definition: parameter.h:186
AddColumnParameterHint
bool AddColumnParameterHint(const char *name_s, const char *description_s, const ParameterType param_type, const bool required_flag, json_t *array_p)
GetParameterFromConfig
const json_t * GetParameterFromConfig(const json_t *service_config_p, const char *const param_name_s)
SetParameterCallbacks
void SetParameterCallbacks(Parameter *param_p, void(*clear_fn)(Parameter *param_p), bool(*add_values_to_json_fn)(const Parameter *param_p, json_t *param_json_p, const bool full_definition_flag), Parameter *(*clone_fn)(const Parameter *param_p, const struct ServiceData *data_p), bool(*set_value_from_string_fn)(Parameter *param_p, const char *value_s))
Parameter::GetParameterDisplayNameFromConfig
bool GetParameterDisplayNameFromConfig(const struct ServiceData *service_data_p, const char *param_name_s, char **display_name_ss)
Get the configured display name for a given Parameter.
InitParameterFromJSON
bool InitParameterFromJSON(Parameter *param_p, const json_t *const root_p, const struct Service *service_p, const bool concise_flag, const ParameterType *pt_p)
PL_ADVANCED
The value of a ParameterLevel for Parameters that are considered the options that require the most ex...
Definition: parameter.h:64
AddParameterLevelToJSON
bool AddParameterLevelToJSON(const ParameterLevel level, json_t *root_p, const SchemaVersion *const sv_p)
Parameter::pa_add_values_to_json_fn
bool(* pa_add_values_to_json_fn)(const struct Parameter *param_p, json_t *param_json_p, const bool full_definition_flag)
Definition: parameter.h:198
Parameter::pa_visible_flag
bool pa_visible_flag
Should this Parameter be displayed to the user or is it a hidden variable.
Definition: parameter.h:176
Parameter::pa_name_s
char * pa_name_s
The name of the parameter.
Definition: parameter.h:127
hash_table.h
HashTable
A container using HashBuckets to allow for fast lookup of key-value pairs.
Definition: hash_table.h:139
data_resource.h
GetNamedParameterDefaultValueFromJSON
const char * GetNamedParameterDefaultValueFromJSON(const char *id_param_s, const json_t *params_json_p)
ParameterNode::pn_parameter_p
Parameter * pn_parameter_p
Pointer to the associated Parameter.
Definition: parameter.h:225
ListItem
A doubly-linked node that points to its predecessor and successor.
Definition: linked_list.h:43