static void handle_update(char* data) { destroy_lines(); data_processor_init(data, '|'); num_lines = data_processor_get_int(); lines = malloc(sizeof(TubeLine*) * num_lines); for (uint8_t l = 0; l < num_lines; l += 1) { TubeLine* line = malloc(sizeof(TubeLine)); line->name = data_processor_get_string(); line->status = data_processor_get_string(); lines[l] = line; } update_handler(); }
// Several strings separated by delimiter should be extractable. static char* test_global_multiple_strings(void) { data_processor_init("Hello|Hi|Hey||", '|'); ProcessingState* state = data_processor_get_global(); const char* str1 = data_processor_get_string(state); const char* str2 = data_processor_get_string(state); const char* str3 = data_processor_get_string(state); const char* str4 = data_processor_get_string(state); const char* str5 = data_processor_get_string(state); bool pass = strcmp(str1, "Hello") == 0; pass = pass && strcmp(str2, "Hi") == 0; pass = pass && strcmp(str3, "Hey") == 0; pass = pass && strcmp(str4, "") == 0; pass = pass && strcmp(str5, "") == 0; mu_assert(pass, "Multiple strings not extracted from global state"); return 0; }
// A single string should be extractable. static char* test_global_single_string(void) { data_processor_init("Hello", '|'); ProcessingState* state = data_processor_get_global(); const char* str = data_processor_get_string(state); mu_assert(strcmp(str, "Hello") == 0, "Single string not extracted from global state"); return 0; }
static void inbox_received_callback(DictionaryIterator *iterator, void *context) { Tuple *t = dict_read_first(iterator); while(t != NULL) { switch (t->key) { case NUM_MENU_ITEMS: s_num_menu_items = t->value->uint16; break; case POSTS: { ProcessingState *state = data_processor_create(t->value->cstring, '|'); uint8_t num_strings = data_processor_count(state); s_strings = malloc(sizeof(char*) * num_strings); for (uint8_t n = 0; n < num_strings; n += 1) { s_strings[n] = data_processor_get_string(state); } data_processor_destroy(state); break; } case COMMENTS: break; } // Get next pair, if any t = dict_read_next(iterator); } layer_mark_dirty(menu_layer_get_layer(s_menu_layer)); }
static void handle_details(char* data) { free_safe(details); data_processor_init(data, '|'); details = data_processor_get_string(); if (details_handler) { details_handler(details); } }
/** * Function to process the data of a preset update. * @param data "DATA" response of the given message, formatted either * as "stop_id|stop_name|route_id|route_name", or as "END" to signify the end * of the preset messages. */ static void process_preset_data(char* data){ if (strcmp(data, "END") != 0){ data_processor_init(data, '|'); Preset *preset = malloc(sizeof(Preset)); strcpy(preset->stop_id, data_processor_get_string()); strcpy(preset->stop_name, data_processor_get_string()); strcpy(preset->route_id, data_processor_get_string()); strcpy(preset->route_name, data_processor_get_string()); preset->eta = -5; presets_add(preset); } else{ send_all_eta_req(); refresh(); reset_selected_index(); update_time_text(); } }
// Mixed values should be extractable from a single local state. static char* test_single_local_mixed(void) { ProcessingState* state = data_processor_create("8|This is a string!|0|6765444", '|'); int num1 = data_processor_get_int(state); char* string1 = data_processor_get_string(state); bool boolean1 = data_processor_get_bool(state); int num2 = data_processor_get_int(state); mu_assert(8 == num1 && 0 == strcmp("This is a string!", string1) && false == boolean1 && 6765444 == num2, "Mixed values not extracted from global state"); return 0; }
int data_processor_get_int(ProcessingState* state) { if (NULL == state) { return -1; } char* tmp_str = data_processor_get_string(state); int num = atoi(tmp_str); free(tmp_str); return num; }
/** * Function to process the data of an ETA update message. * @param data the "DATA" response of the given method, which is formatted as "stop_id|route_id|eta" */ static void process_eta_data(char* data){ data_processor_init(data, '|'); char* stop_id = data_processor_get_string(); char* route_id = data_processor_get_string(); char* eta_string = data_processor_get_string(); int eta = PRESET_NO_ETA; if (strcmp(eta_string, "NO ETA") != 0){ eta = atoi(eta_string); } for (int i = 0; i < presets_get_count(); i++){ Preset *preset = presets_get(i); if (strcmp(preset->stop_id, stop_id) == 0 && strcmp(preset->route_id, route_id) == 0){ preset->eta = eta; break; } } free(stop_id); free(route_id); refresh(); update_time_text(); }
int data_processor_get_int(void) { char* tmp_str = data_processor_get_string(); int num = atoi(tmp_str); free(tmp_str); return num; }