timeseries.c
Go to the documentation of this file.
1 
10 #include "timeseries.h"
11 #include "mcl_core/mcl_memory.h"
13 
15 
17 {
18  mcl_error_t code;
19 
20  MCL_DEBUG_ENTRY("E_MCL_TIMESERIES_VERSION version = <%d>, mcl_time_series_t **timeseries = <%p>", version, timeseries);
21 
22  // Null check.
23  MCL_ASSERT_NOT_NULL(timeseries, code);
24 
25  // Check meta version parameter.
26  MCL_ASSERT_CODE_MESSAGE(MCL_TIMESERIES_VERSION_1_0 <= version && MCL_TIMESERIES_VERSION_END > version, MCL_INVALID_PARAMETER,
27  "Invalid meta payload version parameter.");
28 
29  // Allocate memory for timeseries.
30  if (MCL_NULL != MCL_NEW(*timeseries))
31  {
32  // Set base parameters for timeseries.
33  (*timeseries)->item_base.preamble = MCL_ITEM_PREAMBLE;
34  (*timeseries)->item_base.type = MCL_ITEM_TYPE_TIMESERIES;
35  (*timeseries)->item_base.version = (mcl_uint32_t)version;
36 
37  // Allocate memory for timeseries payload.
38  MCL_NEW((*timeseries)->payload);
39  }
40 
41  if ((MCL_NULL != (*timeseries)) && (MCL_NULL != (*timeseries)->payload))
42  {
43  (*timeseries)->payload->configuration_id = MCL_NULL;
44  (*timeseries)->payload->value_lists = MCL_NULL;
45 
46  code = mcl_list_initialize(&((*timeseries)->payload->value_lists));
47  }
48  else
49  {
50  code = MCL_OUT_OF_MEMORY;
51  }
52 
53  // Error check.
54  if (MCL_OK != code)
55  {
56  mcl_timeseries_destroy(timeseries);
57  }
58 
60  MCL_DEBUG_LEAVE("retVal = <%d>", code);
61  return code;
62 }
63 
65 {
66  mcl_error_t code = MCL_OK;
67 
68  MCL_DEBUG_ENTRY("mcl_timeseries_t *timeseries = <%p>, E_MCL_TIMESERIES_PARAMETER parameter = <%d>, const void *value = <%p>", timeseries, parameter, value);
69 
70  // Null checks.
71  MCL_ASSERT_NOT_NULL(timeseries, code);
72  MCL_ASSERT_NOT_NULL(value, code);
73 
75  {
76  code = mcl_string_util_reset(value, &timeseries->payload->configuration_id);
77  }
78  else
79  {
80  code = MCL_INVALID_PARAMETER;
81  }
82 
84  MCL_DEBUG_LEAVE("retVal = <%d>", code);
85  return code;
86 }
87 
89 {
90  mcl_error_t code;
91 
92  MCL_DEBUG_ENTRY("mcl_timeseries_t *timeseries = <%p>, mcl_timeseries_value_list_t *timeseries_value_list = <%p>", timeseries, timeseries_value_list);
93 
94  // Null check.
95  if ((MCL_NULL == timeseries) || (MCL_NULL == timeseries_value_list))
96  {
98  }
99  else
100  {
101  // Add timeseries value list to timeseries.
102  code = mcl_list_add(timeseries->payload->value_lists, timeseries_value_list);
103  }
104 
105  MCL_DEBUG_LEAVE("retVal = <%d>", code);
106  return code;
107 }
108 
110 {
111  mcl_list_t *timeseries_value_list = timeseries->payload->value_lists;
112  mcl_size_t index;
113  mcl_list_node_t *node = MCL_NULL;
114 
115  MCL_DEBUG_ENTRY("timeseries_t *timeseries = <%p>", timeseries);
116 
117  // Check configuration id.
118  MCL_ASSERT_CODE_MESSAGE(MCL_NULL != timeseries->payload->configuration_id, MCL_INVALID_PARAMETER, "Configuration id is not set.");
119 
120  // Check timeseries value list existence.
121  mcl_list_reset(timeseries_value_list);
122  MCL_ASSERT_CODE_MESSAGE(0 < timeseries_value_list->count, MCL_INVALID_PARAMETER, "Timeseries has no timeseries value list.");
123 
124  // Validate each timeseries value list.
125  for (index = 0; index < timeseries_value_list->count; ++index)
126  {
127  mcl_error_t code = mcl_list_next(timeseries_value_list, &node);
128  MCL_ASSERT_CODE_MESSAGE(MCL_OK == code, MCL_INVALID_PARAMETER, "mcl_list_next() failed");
129 
131  MCL_ASSERT_CODE_MESSAGE(MCL_OK == code, MCL_INVALID_PARAMETER, "timeseries_value_list_validate() failed.");
132  }
133 
134  MCL_DEBUG_LEAVE("retVal = <%d>", MCL_OK);
135  return MCL_OK;
136 }
137 
139 {
140  MCL_DEBUG_ENTRY("mcl_timeseries_t **timeseries = <%p>", timeseries);
141 
142  // Destroys the timeseries.
143  if ((MCL_NULL != timeseries) && (MCL_NULL != *timeseries))
144  {
145  if (MCL_NULL != (*timeseries)->payload)
146  {
147  MCL_FREE((*timeseries)->payload->configuration_id);
149  MCL_FREE((*timeseries)->payload);
150  }
151 
152  MCL_FREE(*timeseries);
153  }
154 
155  MCL_DEBUG_LEAVE("retVal = void");
156 }
MCL_CONNECTIVITY_EXPORT void mcl_timeseries_value_list_destroy(mcl_timeseries_value_list_t **timeseries_value_list)
struct mcl_timeseries_value_list_t mcl_timeseries_value_list_t
#define MCL_FUNCTION_LEAVE_LABEL
size_t mcl_size_t
MCL_OK
MCL_TRIGGERED_WITH_NULL
E_MCL_TIMESERIES_PARAMETER
MCL_CORE_EXPORT mcl_error_t mcl_string_util_reset(const void *value, char **target)
mcl_error_t mcl_timeseries_initialize(E_MCL_TIMESERIES_VERSION version, mcl_timeseries_t **timeseries)
Definition: timeseries.c:16
mcl_int32_t mcl_error_t
#define MCL_DEBUG_ENTRY(...)
void(* mcl_list_item_destroy_callback)(void **item)
uint32_t mcl_uint32_t
MCL_CORE_EXPORT mcl_error_t mcl_list_next(mcl_list_t *list, mcl_list_node_t **node)
mcl_error_t mcl_timeseries_add_value_list(mcl_timeseries_t *timeseries, mcl_timeseries_value_list_t *timeseries_value_list)
Definition: timeseries.c:88
mcl_list_t * value_lists
List of timeseries value lists.
Definition: timeseries.h:21
#define MCL_ASSERT_CODE_MESSAGE(condition, return_code,...)
mcl_error_t timeseries_validate(timeseries_t *timeseries)
Definition: timeseries.c:109
Item type timeseries.
Definition: item.h:24
#define MCL_NEW(p)
#define MCL_NULL
Timeseries module header file.
timeseries_payload_t * payload
Payload of timeseries.
Definition: timeseries.h:30
void mcl_timeseries_destroy(mcl_timeseries_t **timeseries)
Definition: timeseries.c:138
MCL_CORE_EXPORT mcl_error_t mcl_list_add(mcl_list_t *list, void *data)
#define MCL_FREE(p)
mcl_error_t timeseries_value_list_validate(timeseries_value_list_t *timeseries_value_list)
MCL_CORE_EXPORT void mcl_list_destroy_with_content(mcl_list_t **list, mcl_list_item_destroy_callback callback)
Timeseries module interface header file.
#define MCL_ASSERT_NOT_NULL(argument, return_variable)
MCL_CORE_EXPORT void mcl_list_reset(mcl_list_t *list)
char * configuration_id
Configuration ID of timeseries.
Definition: timeseries.h:20
End of timeseries version enumeration.
#define MCL_ITEM_PREAMBLE
Definition: item.h:17
const char * mcl_timeseries_versions[MCL_TIMESERIES_VERSION_END]
Definition: timeseries.c:14
struct mcl_timeseries_t mcl_timeseries_t
MCL_OUT_OF_MEMORY
mcl_error_t mcl_timeseries_set_parameter(mcl_timeseries_t *timeseries, E_MCL_TIMESERIES_PARAMETER parameter, const void *value)
Definition: timeseries.c:64
MCL_CORE_EXPORT mcl_error_t mcl_list_initialize(mcl_list_t **list)
E_MCL_TIMESERIES_VERSION
mcl_size_t count
MCL_INVALID_PARAMETER
#define MCL_DEBUG_LEAVE(...)
Timeseries configuration ID parameter as char*.