hazy_message.h

Go to the documentation of this file.
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 // Templates
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   //gets message type
00309   std::getline(parser, parsed_word, szDelim);
00310   //gets view_id
00311   std::getline(parser, parsed_word, szDelim);
00312   view_id = atoi(parsed_word.c_str());
00313   //gets vector_id
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 // Templates
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   //gets message type
00363   std::getline(parser, parsed_word, szDelim);
00364   //gets view_id
00365   std::getline(parser, parsed_word, szDelim);
00366   view_id = atoi(parsed_word.c_str());
00367   //gets vector_id
00368   std::getline(parser, parsed_word, szDelim);
00369   vec.fromPSQL(parsed_word);
00370   //gets eps
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 // Templates
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   //gets message type
00422   std::getline(parser, parsed_word, szDelim);
00423   //gets view_id
00424   std::getline(parser, parsed_word, szDelim);
00425   view_id = atoi(parsed_word.c_str());
00426   //gets vector_id
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

Generated on Wed Dec 15 10:46:15 2010 for Hazy_System by  doxygen 1.4.7