event_list.c
Go to the documentation of this file.
1 /*!**********************************************************************
2 *
3 * @copyright Copyright (C) 2016 Siemens Aktiengesellschaft.\n
4 * All rights reserved.
5 *
6 *************************************************************************
7 *
8 * @file event_list.c
9 * @date Apr 13, 2017
10 * @brief Event list module implementation file.
11 *
12 ************************************************************************/
13 
14 #include "event_list.h"
15 #include "definitions.h"
16 #include "log_util.h"
17 #include "memory.h"
18 #include "mcl/mcl_event.h"
19 
20 // Private Function Prototypes:
21 static E_MCL_ERROR_CODE _initialize_meta(event_list_t *event_list, const char *version);
22 
23 E_MCL_ERROR_CODE event_list_initialize(const char *version, event_list_t **event_list)
24 {
25  DEBUG_ENTRY("const char *version = <%p>, event_list_t **event_list = <%p>", version, event_list)
26 
27  E_MCL_ERROR_CODE code;
28 
29  // New event_list:
30  if ((MCL_NULL == MCL_NEW(*event_list)) || (MCL_NULL == MCL_NEW((*event_list)->meta)))
31  {
32  if (MCL_NULL != *event_list)
33  {
34  MCL_FREE((*event_list)->meta);
35  MCL_FREE(*event_list);
36  }
37 
38  MCL_ERROR_RETURN(MCL_OUT_OF_MEMORY, "Memory couldn't be allocated for one of event set or event set meta or event set payload.");
39  }
40 
41  (*event_list)->meta->content_id = MCL_NULL;
42  (*event_list)->meta->type = MCL_NULL;
43  (*event_list)->meta->version = MCL_NULL;
44  (*event_list)->meta->details.routing = MCL_NULL;
45  (*event_list)->meta->payload.type = MCL_NULL;
46  (*event_list)->meta->payload.version = MCL_NULL;
47  (*event_list)->events= MCL_NULL;
48 
49  code = _initialize_meta(*event_list, version);
50  ASSERT_STATEMENT_CODE_MESSAGE(MCL_OK == code, event_list_destroy(event_list), code, "Initializing event_list meta fields fails.");
51 
52  // Initialize event_t list.
53  code = list_initialize(&(*event_list)->events);
54  ASSERT_STATEMENT_CODE_MESSAGE(MCL_OK == code, event_list_destroy(event_list), code, "List initialize fail for event_t list.");
55 
56  DEBUG_LEAVE("retVal = <%d>", MCL_OK);
57  return MCL_OK;
58 }
59 
61 {
62  DEBUG_ENTRY("event_t *event = <%p>, event_list_t *event_list = <%p>", event, event_list)
63 
64  E_MCL_ERROR_CODE code = list_add(event_list->events, event);
65 
66  DEBUG_LEAVE("retVal = <%d>", code);
67  return code;
68 }
69 
70 static E_MCL_ERROR_CODE _initialize_meta(event_list_t *event_list, const char *version)
71 {
72  DEBUG_ENTRY("event_list_t *event_list = <%p>, const char *version = <%p>", event_list, version)
73 
74  // Note that null check for version and event is already done by the caller of this function.
75 
76  // Set meta.type.
78  ASSERT_CODE_MESSAGE(MCL_OK == code, code, "String initialize fail for meta type.");
79 
80  // Set meta.version.
82  ASSERT_CODE_MESSAGE(MCL_OK == code, code, "String initialize fail for meta version.");
83 
84  // Set meta.payload.type.
86  &(event_list->meta->payload.type));
87 
88  ASSERT_CODE_MESSAGE(MCL_OK == code, code, "String initialize fail for meta payload type.");
89 
90  // Set meta.payload.version.
91  code = string_initialize_new(version, 0, &event_list->meta->payload.version);
92  ASSERT_CODE_MESSAGE(MCL_OK == code, code, "String initialize fail for meta payload version.");
93 
94  DEBUG_LEAVE("retVal = <%d>", MCL_OK);
95  return MCL_OK;
96 }
97 
98 void event_list_destroy(event_list_t **event_list)
99 {
100  DEBUG_ENTRY("event_list_t **event_list = <%p>", event_list)
101 
102  if (MCL_NULL != *event_list)
103  {
104  // meta
105  if (MCL_NULL != (*event_list)->meta)
106  {
107  string_destroy(&((*event_list)->meta->content_id));
108  string_destroy(&((*event_list)->meta->type));
109  string_destroy(&((*event_list)->meta->version));
110  string_destroy(&((*event_list)->meta->details.routing));
111  string_destroy(&((*event_list)->meta->payload.type));
112  string_destroy(&((*event_list)->meta->payload.version));
113  MCL_FREE((*event_list)->meta);
114  }
115 
116  // payload
118  MCL_FREE(*event_list);
119  }
120 
121  DEBUG_LEAVE("retVal = void");
122 }
list_t * events
Payload of event list.
Definition: event_list.h:28
void string_destroy(string_t **string)
Destroys the allocated resources of the string.
Definition: string_type.c:326
E_MCL_ERROR_CODE event_list_add_event(event_t *event, event_list_t *event_list)
This function adds event to event_list.
Definition: event_list.c:60
string_t * version
Version of payload.
Definition: data_types.h:77
string_t * type
Type of payload.
Definition: data_types.h:76
Memory module header file.
#define DEBUG_LEAVE(...)
Definition: log_util.h:81
#define DEBUG_ENTRY(...)
Definition: log_util.h:80
#define MCL_NEW(p)
Definition: memory.h:121
E_MCL_ERROR_CODE string_initialize_new(const char *value, mcl_size_t value_length, string_t **string)
Initializes a new string_t object with the given value and length.
Definition: string_type.c:46
string_t * type
Type of meta.
Definition: data_types.h:87
Business event type of meta field payload.
Definition: data_types.h:287
Log utility module header file.
E_MCL_ERROR_CODE list_initialize(list_t **list)
Initializes the list.
Definition: list.c:139
Current version of meta field.
Definition: data_types.h:284
E_MCL_ERROR_CODE
MCL Error code definitions. Every function returning an error code uses this enum values...
Definition: mcl_common.h:137
#define MCL_FREE(p)
Definition: memory.h:125
item_meta_payload_t payload
Information describing the payload part following this meta or a collection of tuples referencing it...
Definition: data_types.h:91
#define ASSERT_STATEMENT_CODE_MESSAGE(condition, statement, return_code,...)
Definition: definitions.h:121
Event module interface header file.
item_meta_t * meta
Meta of event list.
Definition: event_list.h:27
void event_destroy(event_t **event)
To destroy the event_t data struct.
Definition: event.c:108
#define ASSERT_CODE_MESSAGE(condition, return_code,...)
Definition: definitions.h:105
Definitions module header file.
string_t * version
Version of meta.
Definition: data_types.h:88
This struct is used for building the event.
Definition: event_list.h:25
Item type of meta field.
Definition: data_types.h:283
void event_list_destroy(event_list_t **event_list)
To destroy the event_list data struct.
Definition: event_list.c:98
string_t meta_field_values[META_FIELD_VALUES_END]
Definition: data_types.c:36
Success.
Definition: mcl_common.h:140
void list_destroy_with_content(list_t **list, list_item_destroy_callback callback)
To destroy the list and its items with a given callback function.
Definition: list.c:373
static E_MCL_ERROR_CODE _initialize_meta(event_list_t *event_list, const char *version)
Definition: event_list.c:70
E_MCL_ERROR_CODE string_initialize_static(const char *value, mcl_size_t value_length, string_t **string)
Initializes a static string_t object with the given value and length.
Definition: string_type.c:90
This struct is used for building a single event.
Definition: event.h:24
E_MCL_ERROR_CODE list_add(list_t *list, void *data)
Adds a new list item.
Definition: list.c:159
Event list module header file.
Memory allocation fail.
Definition: mcl_common.h:143
#define MCL_NULL
Definition: definitions.h:24
mcl_list_item_destroy_callback list_item_destroy_callback
Definition: list.h:24
E_MCL_ERROR_CODE event_list_initialize(const char *version, event_list_t **event_list)
This function creates and initializes a data struct of event_list.
Definition: event_list.c:23
#define MCL_ERROR_RETURN(return_value,...)
Definition: definitions.h:69