timeseries_value_list.c
Go to the documentation of this file.
1 
10 #include "timeseries_value_list.h"
11 #include "mcl_core/mcl_memory.h"
13 
15 {
16  mcl_error_t code;
17 
18  MCL_DEBUG_ENTRY("mcl_timeseries_value_list_t **timeseries_value_list = <%p>", timeseries_value_list);
19 
20  // Null check.
21  MCL_ASSERT_NOT_NULL(timeseries_value_list, code);
22 
23  // Allocate memory for timeseries value list.
24  if (MCL_NULL != MCL_NEW(*timeseries_value_list))
25  {
26  // Set initial values.
27  (*timeseries_value_list)->values = MCL_NULL;
28  (*timeseries_value_list)->timestamp[0] = MCL_NULL_CHAR;
29 
30  // Initialize list for values.
31  code = mcl_list_initialize(&(*timeseries_value_list)->values);
32  }
33  else
34  {
35  code = MCL_OUT_OF_MEMORY;
36  }
37 
38  // Error check.
39  if (MCL_OK != code)
40  {
41  mcl_timeseries_value_list_destroy(timeseries_value_list);
42  }
43 
45  MCL_DEBUG_LEAVE("retVal = <%d>", code);
46  return code;
47 }
48 
50  E_MCL_TIMESERIES_VALUE_LIST_PARAMETER parameter, const void *value)
51 {
52  mcl_error_t code;
53 
54  MCL_DEBUG_ENTRY("mcl_timeseries_value_list_t *timeseries_value_list = <%p>, E_MCL_TIMESERIES_VALUE_LIST_PARAMETER parameter = <%d>, "\
55  "const void *value = <%p>", timeseries_value_list, parameter, value);
56 
57  // Null check.
58  MCL_ASSERT_NOT_NULL(timeseries_value_list, code);
59  MCL_ASSERT_NOT_NULL(value, code);
60 
61  switch (parameter)
62  {
64  if (MCL_TRUE == mcl_time_util_validate_timestamp((const char *) value))
65  {
66  mcl_string_util_memcpy(timeseries_value_list->timestamp, value, MCL_TIMESTAMP_LENGTH);
67  code = MCL_OK;
68  }
69  else
70  {
71  code = MCL_INVALID_PARAMETER;
72  }
73 
74  break;
75 
77  code = mcl_time_util_convert_to_iso_8601_format((const time_t *) value, timeseries_value_list->timestamp);
78  break;
79 
80  default:
81  code = MCL_INVALID_PARAMETER;
82  break;
83  }
84 
86  MCL_DEBUG_LEAVE("retVal = <%d>", code);
87  return code;
88 }
89 
91 {
92  mcl_error_t code = MCL_OK;
93  mcl_list_t *values = timeseries_value_list->values;
94  mcl_size_t index;
95 
96  MCL_DEBUG_ENTRY("timeseries_value_list_t *timeseries_value_list = <%p>", timeseries_value_list);
97 
98  // Check timestamp.
99  if (MCL_TRUE != mcl_time_util_validate_timestamp(timeseries_value_list->timestamp))
100  {
101  code = MCL_INVALID_PARAMETER;
102  MCL_ERROR_STRING("Timeseries value list timestamp is not set.");
103  }
104  else if (0 == values->count)
105  {
106  code = MCL_INVALID_PARAMETER;
107  MCL_ERROR_STRING("Timeseries value list has no value.");
108  }
109  else
110  {
111  mcl_list_reset(values);
112  }
113 
114  // Validate each value.
115  for (index = 0; (index < values->count) && (MCL_OK == code); ++index)
116  {
117  mcl_list_node_t *node = MCL_NULL;
118 
119  (void) mcl_list_next(values, &node);
120 
121  if ((MCL_NULL == node) || (MCL_OK != timeseries_value_validate((timeseries_value_t *) (node->data))))
122  {
123  code = MCL_INVALID_PARAMETER;
124  MCL_ERROR_STRING("Timeseries value is not valid.");
125  }
126  }
127 
128  MCL_DEBUG_LEAVE("retVal = <%d>", code);
129  return code;
130 }
131 
133 {
134  mcl_error_t code;
135 
136  MCL_DEBUG_ENTRY("mcl_timeseries_value_list_t *timeseries_value_list = <%p>, mcl_timeseries_value_t *timeseries_value = <%p>",
137  timeseries_value_list, timeseries_value);
138 
139  // Null check.
140  MCL_ASSERT_NOT_NULL(timeseries_value_list, code);
141  MCL_ASSERT_NOT_NULL(timeseries_value, code);
142 
143  // Add timeseries value to timeseries value list.
144  code = mcl_list_add(timeseries_value_list->values, timeseries_value);
145 
147  MCL_DEBUG_LEAVE("retVal = <%d>", code);
148  return code;
149 }
150 
152 {
153  MCL_DEBUG_ENTRY("mcl_timeseries_value_list_t **timeseries_value_list = <%p>", timeseries_value_list);
154 
155  // Destroys the timeseries value list data structure.
156  if ((MCL_NULL != timeseries_value_list) && (MCL_NULL != *timeseries_value_list))
157  {
159  MCL_FREE(*timeseries_value_list);
160  }
161 
162  MCL_DEBUG_LEAVE("retVal = void");
163 }
#define MCL_TIMESTAMP_LENGTH
struct mcl_timeseries_value_list_t mcl_timeseries_value_list_t
#define MCL_FUNCTION_LEAVE_LABEL
mcl_list_t * values
List of timeseries values.
size_t mcl_size_t
MCL_OK
struct mcl_timeseries_value_t mcl_timeseries_value_t
Timeseries value list module interface header file.
char timestamp[MCL_TIMESTAMP_LENGTH]
Time of values in yyyy-MM-ddTHH:mm:ss.SSSZ format.
mcl_int32_t mcl_error_t
Timeseries value list timestamp parameter as time_t*.
MCL_CORE_EXPORT mcl_error_t mcl_time_util_convert_to_iso_8601_format(const time_t *time_value, char *iso8601_formatted_time)
#define MCL_DEBUG_ENTRY(...)
void(* mcl_list_item_destroy_callback)(void **item)
MCL_CORE_EXPORT mcl_error_t mcl_list_next(mcl_list_t *list, mcl_list_node_t **node)
#define MCL_ERROR_STRING(string)
mcl_error_t mcl_timeseries_value_list_initialize(mcl_timeseries_value_list_t **timeseries_value_list)
#define MCL_NEW(p)
#define MCL_NULL
MCL_CORE_EXPORT mcl_bool_t mcl_time_util_validate_timestamp(const char *timestamp)
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)
void mcl_timeseries_value_list_destroy(mcl_timeseries_value_list_t **timeseries_value_list)
#define MCL_ASSERT_NOT_NULL(argument, return_variable)
mcl_error_t mcl_timeseries_value_list_add_value(mcl_timeseries_value_list_t *timeseries_value_list, mcl_timeseries_value_t *timeseries_value)
MCL_CORE_EXPORT void mcl_string_util_memcpy(void *destination, const void *source, mcl_size_t count)
MCL_CORE_EXPORT void mcl_list_reset(mcl_list_t *list)
mcl_error_t timeseries_value_validate(timeseries_value_t *timeseries_value)
MCL_CONNECTIVITY_EXPORT void mcl_timeseries_value_destroy(mcl_timeseries_value_t **timeseries_value)
MCL_OUT_OF_MEMORY
MCL_CORE_EXPORT mcl_error_t mcl_list_initialize(mcl_list_t **list)
mcl_size_t count
mcl_error_t mcl_timeseries_value_list_set_parameter(mcl_timeseries_value_list_t *timeseries_value_list, E_MCL_TIMESERIES_VALUE_LIST_PARAMETER parameter, const void *value)
E_MCL_TIMESERIES_VALUE_LIST_PARAMETER
MCL_INVALID_PARAMETER
#define MCL_DEBUG_LEAVE(...)
#define MCL_TRUE
Timeseries value list timestamp parameter as char* (which is in yyyy-MM-ddTHH:mm:ss.SSSZ format).
#define MCL_NULL_CHAR
Timeseries value list header file.