162 vector<string> ifnames;
164 void clear() { ifnames.clear(); sid2idx.clear(); pid2idx.clear(); idx_i.clear(); idx.clear(); pids.clear(); signals.clear(); n_pids = 0; n_signals = 0; sid_in.clear(); }
166 int read_index(vector<string> &fnames);
167 int read_sub_index(vector<string> &fnames,
const vector<int> &pids_to_include,
const vector<int> &signals_to_include);
169 inline void *get_ind_elem(
int pid,
int sid,
unsigned int &len);
170 inline IndexElem *get_ind_elem2(
int pid,
int sid);
174 unsigned long long get_index_max_data_size();
175 void set_mem_ptrs_off();
178 int read_all_data(
unsigned char *&work_area,
unsigned long long &wlen, vector<string> &data_fnames);
180 int read_full_data(
unsigned char *&work_area,
unsigned long long &wlen, vector<string> &data_fnames);
183 int read_index_table_and_data(
int sid,
string &idx_fname,
string &data_fname,
const vector<int> &pids_to_include,
184 unsigned char *w_area,
unsigned long long &data_size);
185 int read_index_table_and_data(
int sid,
string &idx_fname,
string &data_fname,
const vector<int> &pids_to_include);
195 map<int, int> sid_in;
198 vector<IndexTable> index_table;
201 int contains_pid(
int pid) {
return (pid_idx[pid] >= 0); }
207 MedIndex() { min_pid_num = -1; max_pid_num = -1; rep_mode = 0; }
212 int get_mode(
const string &fname);
213 int read_index_mode0(
const string &fname,
const vector<int> &pids_to_include,
const vector<int> &signals_to_include);
214 int read_index_mode0_direct(
const string &fname,
const vector<int> &pids_to_include,
const vector<int> &signals_to_include);
215 int read_index_mode0_new_direct(
const string &fname,
int f_factor,
const vector<int> &pids_to_include,
const vector<int> &signals_to_include);
217 int prep_idx_i_direct();
222 map<int, int> sid2idx;
223 map<int, int> pid2idx;
224 vector<vector<unsigned int>> idx_i;
225 vector<IndexElem> idx;
227 vector<vector<unsigned int>> idx_i_base;
228 vector<vector<unsigned char>> idx_i_add;
230 vector<vector<CompactIndexElem>> idx_recs;
231 vector<IndexElem> idx_recs_base;
232 vector<int> i_sid_type_byte_len;
233 vector<int> i_sid_factor;
235 vector<vector<unsigned int>> last_pid;
241 vector<unsigned int> sid_idx;
242 vector<unsigned int> pid_idx;
243 int min_pid, max_pid;
244 unsigned int n_pids_in_index;
245 unsigned int n_signals_in_index;
246 vector<int> pid_seen;
248 vector<unsigned int> idx_pid;
249 vector<unsigned int> idx_sid;
306 string rep_files_prefix;
311 string metadata_path;
312 vector<string> dictionary_fnames;
313 vector<string> signal_fnames;
314 vector<string> data_fnames;
315 vector<string> index_fnames;
316 string fsignals_to_files;
326 vector<int> all_pids_list;
335 int read_all(
const string &conf_fname);
336 int read_all(
const string &conf_fname,
const vector<int> &pids_to_take,
const vector<string> &signals_to_take);
337 int read_all(
const string &conf_fname,
const vector<int> &pids_to_take,
const vector<int> &signals_to_take);
340 int init(
const string &conf_fname);
343 inline void *get(
int pid,
const string &sig_name,
int &len);
344 inline void *uget(
int pid,
const string &sig_name, UniversalSigVec &usv);
346 inline void *get_all_modes(
int pid,
int sid,
int &len);
349 void * (
MedRepository::*get_ptr)(
int,
int,
int&) = &MedRepository::get3;
350 inline void *get(
int pid,
int sid,
int &len) {
return (this->*get_ptr)(pid, sid, len); }
354 inline void *get_in_mem(
int pid,
int sid,
int &len) {
return in_mem_rep.get(pid, sid, len); }
355 void switch_to_in_mem_mode() { in_mem_rep.clear(); in_mem_rep.my_rep = (
MedRepository *)
this; get_ptr = &MedRepository::get_in_mem; }
356 bool in_mem_mode_active() {
return (get_ptr == &MedRepository::get_in_mem); }
359 int read_config(
const string &fname);
361 int read_dictionary();
362 int read_dictionary(
const string &dname);
365 int read_signals(
const string &fname);
368 int read_index(
const vector<int> &pids_to_take,
const vector<int> &signals_to_take);
369 int read_index(vector<string> &fnames);
370 int read_index(vector<string> &fnames,
const vector<int> &pids_to_take,
const vector<int> &signals_to_take);
371 int read_index_tables(
const vector<int> &pids_to_take,
const vector<int> &signals_to_take);
375 int read_data(
const string &fname);
376 int read_data(vector<string> &fnames);
381 int read_all(
const string &conf_fname,
const vector<int> &pids_to_take,
const vector<int> &signals_to_take,
int read_data_flag);
383 int read_all(
const string &conf_fname,
const vector<int> &pids_to_take,
const vector<string> &signals_to_take,
int read_data_flag);
386 int load(
const vector<int> &sids, vector<int> &pids_to_take);
390 int lock(
const vector<int> &sids);
392 int unlock_all_sigs();
393 int unlock(
const vector<int> &sids);
397 int free(
const vector<int> &sids);
400 int free_to_bound() {
return free_to_bound(bound_gb); }
401 int free_to_bound(
double _bound_gb);
405 int set_max_mem(
double gb_mem) { bound_gb = gb_mem;
return 0; }
407 MedRepository() { path =
""; metadata_path =
""; work_area = NULL; work_size = 0; fsignals_to_files =
""; index.my_rep =
this; min_pid_num = -1; max_pid_num = -1; rep_mode = 0; rep_files_prefix =
"rep"; bound_gb = 100.0; sigs.my_repo =
this; }
425 inline void *get3(
int pid,
int sid,
int &len);
428 SDateVal *get_before_date(
int pid,
int sid,
int date,
int &len);
429 SDateVal *get_before_date(
int pid,
const string &sig_name,
int date,
int &len);
434 SDateVal *get_date(
int pid,
int sid,
int date,
const string &mode);
435 SDateVal *get_date(
int pid,
const string &sig_name,
int date,
const string &mode);
439 int contains_pid(
int pid) {
return index.contains_pid(pid); }
440 int contains_sid(
int sid);
443 void print_vec_dict(
void *data,
int len,
int pid,
int sid);
444 void long_print_vec_dict(
void *data,
int len,
int pid,
int sid);
445 void long_print_vec_dict(
void *data,
int len,
int pid,
int sid,
int from,
int to);
446 void long_print_vec_dict(
void *data,
int len,
int pid,
int sid,
int index);
447 void print_channel_helper(
int sid,
int channel,
float val);
448 string get_channel_info(
int sid,
int channel,
float val);
449 string convert_date(
int d,
int sid);
450 void print_data_vec_dict(
int pid,
int sid);
451 void long_print_data_vec_dict(
int pid,
int sid);
452 void long_print_data_vec_dict(
int pid,
int sid,
int from,
int to);
453 void print_csv_vec(
void * data,
int len,
int pid,
int sid,
bool dict_val);
454 void convert_pid_sigs(
const UniversalSigVec &usv, vector<pair<vector<string>, vector<string>>> &pid_result,
const string &sig_name,
int sig_id,
int limit_count);
455 void print_pid_sig(
int pid,
const string &sig_name,
const vector<pair<vector<string>, vector<string>>> &usv);
458 int get_dates_with_signal(
int pid, vector<string> &sig_names, vector<int> &dates);
460 int get_pids_with_sig(
const string &sig_name, vector<int> &in_pids);
465 int load(
const string &sig_name);
466 int load(
const int sid);
467 int load(
const vector<string> &sig_names);
468 int load(
const vector<int> &sids);
469 int load(
const string &sig_name, vector<int> &pids_to_take);
470 int load(
const int sid, vector<int> &pids_to_take);
471 int load_pids_sorted(
const int sid, vector<int> &pids_to_take);
472 int load(
const vector<string> &sig_names, vector<int> &pids_to_take);
474 int lock(
const string &sig_name);
475 int lock(
const int sid);
476 int lock(
const vector<string> &sig_names);
478 int unlock(
const string &sig_name);
479 int unlock(
const int sid);
480 int unlock(
const vector<string> &sig_names);
482 int free(
const string &sig_name);
483 int free(
const int sid);
484 int free(
const vector<string> &sig_names);
488 int generate_fnames_for_prefix();
493 void load_additional_dict(
const string &dict_path);
497 void clear_additional_dict();
499 int get_data_mode(
const string &fname);
500 unsigned char *work_area;
501 unsigned long long work_size;
503 vector<string> _addtional_dict_path;