00001
00005 #ifndef HAZY_MESSAGE_H
00006 #define HAZY_MESSAGE_H
00007 #include <string.h>
00008 #include "globals.h"
00009
00014
00015 enum message_type {READ_SE_EAGER, READ_SE_LAZY_NAIVE, READ_SE_LAZY_HAZY, READ_COUNT, UPDATE, QUERY_SERVER_ID, CLOSE_CONNECTION, SERVER_NOOP, CREATE_VIEW, READ_SE_LAZY_NAIVE_BIN, READ_SE_LAZY_HAZY_BIN, UPDATE_BIN, DELETE_BIN};
00016
00018 struct se_lazy_naive_msg_bin_header {
00019 enum message_type t;
00020 int view_id;
00021 int payload_size;
00022 };
00023
00025 struct update_bin_header {
00026 enum message_type t;
00027 int view_id;
00028 int label;
00029 int payload_size;
00030 };
00031
00033 struct se_lazy_hazy_msg_bin_header {
00034 enum message_type t;
00035 int view_id;
00036 double eps;
00037 int payload_size;
00038 };
00039
00040 struct delete_bin_header {
00041 enum message_type t;
00042 int view_id;
00043 int deleted_id;
00044 int db_name_size;
00045 int table_name_size;
00046 };
00047
00048
00050 typedef void* message_data;
00051
00053 const char szDelim = '|';
00055 const int CONVERT_CHAR_TO_INT = 48;
00057 const char done_msg[6] = "done|";
00058
00060 #ifdef __cplusplus
00061 extern "C" {
00062 #endif
00063
00067
00074 int build_read_se_answer(int entity_label, message_data msg, unsigned int nMaxSize);
00082 int build_read_count_answer(int count, message_data msg, unsigned int nMaxSize);
00089 int build_update_answer(message_data msg, unsigned int nMaxSize);
00098 int build_delete_answer(message_data msg, unsigned int nMaxSize);
00099
00100 int build_query_server_answer(int id, message_data msg, unsigned int nMaxSize);
00108 int build_close_connection_answer(int close_conn, message_data msg, unsigned int nMaxSize);
00109
00117 int build_noop_server_answer(int acknowledge, message_data msg, unsigned int nMaxSize);
00118
00119 int build_create_view_answer(message_data msg, unsigned int nMaxSize);
00120
00122
00130 int build_se_eager_msg(const int view_id, const int entity_id, message_data msg, unsigned int nMaxSize);
00139 int build_se_lazy_naive_msg(const int view_id, const char *vector_str, message_data msg, unsigned int nMaxSize);
00149 int build_se_lazy_hazy_msg(const int view_id, const char *vector_str, const double eps, message_data msg, unsigned int nMaxSize);
00157 int build_count_msg(const int view_id, message_data msg, unsigned int nMaxSize);
00166 int build_update_msg(const int view_id, const char *update_example, message_data msg, unsigned int nMaxSize);
00173 int build_query_server_id_msg(message_data msg, unsigned int nMaxSize);
00180 int build_close_connection_msg(message_data msg, unsigned int nMaxSize);
00181
00188 int build_noop_server_msg(message_data msg, unsigned int nMaxSize);
00189
00191
00196 enum message_type get_message_type(const message_data msg);
00197
00208 int
00209 build_se_lazy_naive_msg_bin(const int view_id, const void* vector_ptr, size_t vec_size,
00210 void* _out, size_t *out_size, unsigned int nMaxSize);
00211
00223 int
00224 build_se_lazy_hazy_msg_bin(const int view_id, const double eps, const void* vector_ptr, size_t vec_size,
00225 void* _out, size_t *out_size, unsigned int nMaxSize);
00226
00227 int
00228 build_delete_msg_bin(const int view_id, const int entity_id, const void *db_name_ptr, size_t db_name_ptr_size,
00229 const void *table_name_ptr, size_t table_name_ptr_size,
00230 void *_out, size_t *out_size, unsigned int nMaxSize);
00231
00232 #ifdef __cplusplus
00233 }
00234 #endif
00235
00236 #ifdef __cplusplus
00237 #include <string>
00238 #include <iostream>
00239 #include <sstream>
00240 #include "vectors.h"
00241 #include "hazy_model.h"
00242
00243 struct create_view_bin_str {
00244 enum message_type t;
00245 int view_id;
00246 enum storage_manager_type sm;
00247 int dense;
00248 int useepsmap;
00249 hazy_model::strategy hazy_strategy;
00250 int reservoir_size;
00251 double resort_time;
00252 double tao_val;
00253 double alpha_ratio;
00254 int buffer_size;
00255 std::string view_name;
00256 std::string view_key;
00257 std::string entity_table_name;
00258 std::string entity_table_key;
00259 std::string training_table_name;
00260 int dim;
00261 std::string db_name;
00262 double m_factor;
00263 };
00264
00265 int
00266 build_create_view_msg(struct create_view_bin_str *s, message_data _out, unsigned int nMaxSize);
00267
00269
00275 void parse_se_eager_msg(const message_data msg, int &view_id, int &entity_id);
00276
00282 void parse_view_id_in_se_eager_msg(const message_data msg, int &view_id);
00283
00289 void parse_count_msg(const message_data msg, int &view_id);
00290
00291 void parse_delete_msg_bin(message_data msg, int &view_id, int &entity_id, std::string &db_name, std::string &training_table_name);
00292
00293 void parse_view_id_in_delete_msg_bin(message_data msg, int &view_id);
00294
00295
00296 template<class T>
00303 void parse_se_lazy_naive_msg(message_data msg, int &view_id, T &vec) {
00304 std::stringstream parser;
00305 parser << (char *) msg;
00306 std::string parsed_word;
00307
00308
00309 std::getline(parser, parsed_word, szDelim);
00310
00311 std::getline(parser, parsed_word, szDelim);
00312 view_id = atoi(parsed_word.c_str());
00313
00314 std::getline(parser, parsed_word, szDelim);
00315 vec.fromPSQL(parsed_word);
00316 }
00317
00323 void parse_view_id_in_se_lazy_naive_msg(message_data msg, int &view_id);
00324
00325
00326 template<class T>
00333 void parse_se_lazy_naive_msg_bin(void* msg, int &view_id, T &vec) {
00334 struct se_lazy_naive_msg_bin_header* msg_header = (struct se_lazy_naive_msg_bin_header*)msg;
00335 assert(msg_header->t == READ_SE_LAZY_NAIVE_BIN);
00336 view_id = msg_header->view_id;
00337 int payload_size = msg_header->payload_size;
00338 vec.read_bin((void*) (&msg_header[1]), payload_size);
00339 }
00340
00341
00347 void parse_view_id_in_se_lazy_naive_msg_bin(void* msg, int &view_id);
00348
00356 template<class T>
00357 void parse_se_lazy_hazy_msg(message_data msg, int &view_id, T &vec, double &eps) {
00358 std::stringstream parser;
00359 parser << (char *) msg;
00360 std::string parsed_word;
00361
00362
00363 std::getline(parser, parsed_word, szDelim);
00364
00365 std::getline(parser, parsed_word, szDelim);
00366 view_id = atoi(parsed_word.c_str());
00367
00368 std::getline(parser, parsed_word, szDelim);
00369 vec.fromPSQL(parsed_word);
00370
00371 std::getline(parser, parsed_word, szDelim);
00372 eps = atof(parsed_word.c_str());
00373 }
00374
00375
00381 void parse_view_id_in_se_lazy_hazy_msg(message_data msg, int &view_id);
00382
00383
00384 template<class T>
00392 void parse_se_lazy_hazy_msg_bin(void* msg, int &view_id, T &vec, double &eps) {
00393 struct se_lazy_hazy_msg_bin_header* msg_header = (struct se_lazy_hazy_msg_bin_header*)msg;
00394 assert(msg_header->t == READ_SE_LAZY_HAZY_BIN);
00395 view_id = msg_header->view_id;
00396 eps = msg_header->eps;
00397 int payload_size = msg_header->payload_size;
00398 vec.read_bin((void*) (&msg_header[1]), payload_size);
00399 }
00400
00406 void parse_view_id_in_se_lazy_hazy_msg_bin(void* msg, int &view_id);
00407
00415 template<class T>
00416 void parse_update_msg(message_data msg, int &view_id, T &vec, int &classOfExample) {
00417 std::stringstream parser;
00418 parser << (char *) msg;
00419 std::string parsed_word;
00420
00421
00422 std::getline(parser, parsed_word, szDelim);
00423
00424 std::getline(parser, parsed_word, szDelim);
00425 view_id = atoi(parsed_word.c_str());
00426
00427 std::getline(parser, parsed_word, szDelim);
00428 parse_labeled_vector<T>(parsed_word, classOfExample, vec);
00429 }
00430
00436 void parse_view_id_in_update_msg(message_data msg, int &view_id);
00437
00445 template<class T>
00446 void parse_update_msg_bin(message_data msg, int &view_id, T &vec, int &classOfExample) {
00447 struct update_bin_header *msg_header = (struct update_bin_header*) msg;
00448 assert(msg_header->t == UPDATE_BIN);
00449 view_id = msg_header->view_id;
00450 classOfExample = msg_header->label;
00451 int payload_size = msg_header->payload_size;
00452 vec.read_bin((void*) (&msg_header[1]), payload_size);
00453 }
00454
00460 void parse_view_id_in_update_msg_bin(message_data msg, int &view_id);
00461
00462 void parse_create_view_msg(message_data msg, struct create_view_bin_str *cv_struct);
00463
00464 #endif // _cpluspc
00465
00466
00467 #endif