data_source.c
Go to the documentation of this file.
1 
10 #include "data_source.h"
11 #include "mcl_core/mcl_memory.h"
13 
15 {
16  mcl_error_t code;
17 
18  MCL_DEBUG_ENTRY("mcl_data_source_t **data_source = <%p>", data_source);
19 
20  // Null check.
21  MCL_ASSERT_NOT_NULL(data_source, code);
22 
23  // Allocate memory for data source.
24  if (MCL_NULL != MCL_NEW(*data_source))
25  {
26  // Set initial values.
27  (*data_source)->custom_data = MCL_NULL;
28  (*data_source)->data_points = MCL_NULL;
29  (*data_source)->description = MCL_NULL;
30  (*data_source)->name = MCL_NULL;
31 
32  // Initialize list for data points.
33  code = mcl_list_initialize(&(*data_source)->data_points);
34  }
35  else
36  {
37  code = MCL_OUT_OF_MEMORY;
38  }
39 
40  // Error check.
41  if (MCL_OK != code)
42  {
43  mcl_data_source_destroy(data_source);
44  }
45 
47  MCL_DEBUG_LEAVE("retVal = <%d>", code);
48  return code;
49 }
50 
52 {
53  mcl_error_t code;
54 
55  MCL_DEBUG_ENTRY("mcl_data_source_t *data_source = <%p>, E_MCL_DATA_SOURCE_PARAMETER parameter = <%d>, const void *value = <%p>",
56  data_source, parameter, value);
57 
58  // Null check.
59  MCL_ASSERT_NOT_NULL(data_source, code);
60  MCL_ASSERT_NOT_NULL(value, code);
61 
62  switch (parameter)
63  {
65  code = mcl_string_util_reset(value, &data_source->name);
66  break;
67 
69  code = mcl_string_util_reset(value, &data_source->description);
70  break;
71 
73  mcl_json_util_destroy(&data_source->custom_data);
74  code = mcl_json_util_duplicate((const mcl_json_t *) value, &data_source->custom_data);
75  break;
76 
77  default:
78  code = MCL_INVALID_PARAMETER;
79  break;
80  }
81 
83  MCL_DEBUG_LEAVE("retVal = <%d>", code);
84  return code;
85 }
86 
88 {
89  mcl_error_t code;
90 
91  MCL_DEBUG_ENTRY("mcl_data_source_t *data_source = <%p>, mcl_data_point_t *data_point = <%p>", data_source, data_point);
92 
93  // Null check.
94  MCL_ASSERT_NOT_NULL(data_source, code);
95  MCL_ASSERT_NOT_NULL(data_point, code);
96 
97  // Add data point to data source.
98  code = mcl_list_add(data_source->data_points, data_point);
99 
101  MCL_DEBUG_LEAVE("retVal = <%d>", code);
102  return code;
103 }
104 
106 {
107  mcl_error_t code = MCL_OK;
108  mcl_list_t *data_points = data_source->data_points;
109  mcl_size_t index;
110 
111  MCL_DEBUG_ENTRY("data_source_t *data_source = <%p>", data_source);
112 
113  // Check data source name.
114  if (MCL_NULL == data_source->name)
115  {
116  code = MCL_INVALID_PARAMETER;
117  MCL_ERROR_STRING("Data source name is not set.");
118  }
119  else if (0 == data_points->count)
120  {
121  code = MCL_INVALID_PARAMETER;
122  MCL_ERROR_STRING("Data source has no data point.");
123  }
124  else
125  {
126  mcl_list_reset(data_points);
127  }
128 
129  // Validate each data point.
130  for (index = 0; (index < data_points->count) && (MCL_OK == code); ++index)
131  {
132  mcl_list_node_t *node = MCL_NULL;
133 
134  (void) mcl_list_next(data_points, &node);
135 
136  if ((MCL_NULL == node) || (MCL_OK != data_point_validate((data_point_t *) (node->data))))
137  {
138  code = MCL_INVALID_PARAMETER;
139  MCL_ERROR_STRING("Data point is not valid.");
140  }
141  }
142 
143  MCL_DEBUG_LEAVE("retVal = <%d>", code);
144  return code;
145 }
146 
148 {
149  MCL_DEBUG_ENTRY("mcl_data_source_t **data_source = <%p>", data_source);
150 
151  // Destroys the data source data structure.
152  if ((MCL_NULL != data_source) && (MCL_NULL != *data_source))
153  {
154  MCL_FREE((*data_source)->name);
155  MCL_FREE((*data_source)->description);
157  mcl_json_util_destroy(&(*data_source)->custom_data);
158  MCL_FREE(*data_source);
159  }
160 
161  MCL_DEBUG_LEAVE("retVal = void");
162 }
#define MCL_FUNCTION_LEAVE_LABEL
size_t mcl_size_t
MCL_OK
struct mcl_data_point_t mcl_data_point_t
void mcl_json_t
struct mcl_data_source_t mcl_data_source_t
MCL_CORE_EXPORT mcl_error_t mcl_string_util_reset(const void *value, char **target)
Data source module header file.
mcl_int32_t mcl_error_t
mcl_error_t mcl_data_source_initialize(mcl_data_source_t **data_source)
Definition: data_source.c:14
mcl_list_t * data_points
List of data points in the data source.
Definition: data_source.h:22
#define MCL_DEBUG_ENTRY(...)
void mcl_data_source_destroy(mcl_data_source_t **data_source)
Definition: data_source.c:147
E_MCL_DATA_SOURCE_PARAMETER
void(* mcl_list_item_destroy_callback)(void **item)
Data source module interface header file.
MCL_CORE_EXPORT mcl_error_t mcl_list_next(mcl_list_t *list, mcl_list_node_t **node)
#define MCL_ERROR_STRING(string)
MCL_CORE_EXPORT void mcl_json_util_destroy(mcl_json_t **root)
Data source name parameter as char*.
#define MCL_NEW(p)
mcl_error_t data_point_validate(data_point_t *data_point)
Definition: data_point.c:92
#define MCL_NULL
MCL_CONNECTIVITY_EXPORT void mcl_data_point_destroy(mcl_data_point_t **data_point)
Definition: data_point.c:108
MCL_CORE_EXPORT mcl_error_t mcl_list_add(mcl_list_t *list, void *data)
#define MCL_FREE(p)
MCL_CORE_EXPORT void mcl_list_destroy_with_content(mcl_list_t **list, mcl_list_item_destroy_callback callback)
#define MCL_ASSERT_NOT_NULL(argument, return_variable)
mcl_error_t data_source_validate(data_source_t *data_source)
Definition: data_source.c:105
char * name
Name of the data source.
Definition: data_source.h:20
MCL_CORE_EXPORT void mcl_list_reset(mcl_list_t *list)
mcl_error_t mcl_data_source_set_parameter(mcl_data_source_t *data_source, E_MCL_DATA_SOURCE_PARAMETER parameter, const void *value)
Definition: data_source.c:51
MCL_CORE_EXPORT mcl_error_t mcl_json_util_duplicate(const mcl_json_t *source_json, mcl_json_t **duplicated_json)
mcl_error_t mcl_data_source_add_data_point(mcl_data_source_t *data_source, mcl_data_point_t *data_point)
Definition: data_source.c:87
Data source custom data parameter as mcl_json_t*.
MCL_OUT_OF_MEMORY
MCL_CORE_EXPORT mcl_error_t mcl_list_initialize(mcl_list_t **list)
mcl_size_t count
MCL_INVALID_PARAMETER
#define MCL_DEBUG_LEAVE(...)
Data source description parameter as char*.