15namespace layer2_discreta {
26 cout <<
"database::copy constructor for object: "
34 cout <<
"database::operator = (copy assignment)" << endl;
68 cout <<
"database::copyobject_to()\n";
69 print_as_vector(cout);
90 int objectkind,
int f_compress,
int file_type)
107 int f_v = (verbose_level >= 1);
112 cout <<
"database::create" << endl;
130 int f_v = (verbose_level >= 1);
134 cout <<
"database::open, verbose_level=" << verbose_level << endl;
144 int f_v = (verbose_level >= 1);
148 cout <<
"database::close" << endl;
179 cout <<
"database::put_file_size" << endl;
194 cout <<
"database::get_file_size" << endl;
216 total = sz + sz + user + pad;
221 total =
sizeof(
int_4) * 2 + user + pad;
234 cout <<
"database::size_of_header() unknown file_type" << endl;
235 cout <<
"file_type()=" <<
file_type() << endl;
249 cout <<
"database::size_of_header_log() unknown file_type" << endl;
250 cout <<
"file_type()=" <<
file_type() << endl;
258 int f_v = (verbose_level >= 1);
259 int f_vv = (verbose_level >= 2);
264 cout <<
"database::add_object_return_datref" << endl;
267 cout <<
"database::add_object_return_datref() database not open" << endl;
272 cout <<
"database::add_object_return_datref() wrong kind of object" << endl;
279 cout <<
"database::add_object_return_datref(): packing object" << endl;
285 cout <<
"database::add_object_return_datref(): compressing object" << endl;
295 cout <<
"database::add_object_return_datref(): saving data via add_data_DB()" << endl;
297 add_data_DB((
void *)pc, size, &datref, verbose_level - 4);
299 cout <<
"finished with add_data_DB()" << endl;
301 data_type.
datref = datref;
309 cout <<
"database::add_object_return_datref(): calling insert_key for btree #" << i <<
": ";
313 bt.
insert_key(key_type, &data_type, verbose_level - 2);
315 cout <<
"database::add_object_return_datref(): after insert_key for btree #" << i << endl;
321 cout <<
"database::add_object_return_datref done" << endl;
327 int f_v = (verbose_level >= 1);
331 cout <<
"database::add_object" << endl;
335 cout <<
"database::add_object done" << endl;
340 uint_4 datref,
int verbose_level)
348 cout <<
"database::delete_object() database not open" << endl;
352 cout <<
"database::delete_object() wrong kind of object" << endl;
356 data_type.
datref = datref;
359 for (i = 0; i < len; i++) {
365 if (!bt.
search(key_type.
c, &data_type, &idx, 0, verbose_level)) {
366 cout <<
"database::delete_object() WARNING: btree entry not found" << endl;
375 Vector &the_object,
int verbose_level)
377 int f_v = (verbose_level >= 1);
382 cout <<
"database::get_object" << endl;
385 data_type.
datref = datref;
387 get_object(&data_type, the_object, verbose_level - 1);
393 int f_v = (verbose_level >= 1);
394 int f_vv = (verbose_level >= 2);
395 int size, total = 0, pad, i;
399 cout <<
"database::get_object" << endl;
402 cout <<
"database::get_object(data_type) database not open" << endl;
421 int_4 *header2 = header + 4;
427 cout <<
"database::get_object()|header: no MAGIC_SYNC" << endl;
428 cout <<
"data_type->datref=" << data_type->
datref << endl;
432 cout <<
"database::get_object()|header: data is not used" << endl;
435 if (header[2] != size) {
436 cout <<
"database::get_object()|header: header[2] != size" << endl;
439 if (header[3] != total) {
440 cout <<
"database::get_object()|header: header[3] != total" << endl;
444 cout <<
"database::get_object()|header2: no MAGIC_SYNC" << endl;
448 cout <<
"database::get_object()|header2: data is not used" << endl;
451 if (header2[2] != size) {
452 cout <<
"database::get_object()|header2: header[2] != size" << endl;
455 if (header2[3] != total) {
456 cout <<
"database::get_object()|header2: header[3] != total" << endl;
466 cout <<
"database::get_object()|header: no MAGIC_SYNC" << endl;
467 cout <<
"data_type->datref=" << data_type->
datref << endl;
470 if (header[1] != size) {
471 cout <<
"database::get_object()|header: header[1] != size" << endl;
476 cout <<
"database::get_object() unknown file_type" << endl;
477 cout <<
"file_type()=" <<
file_type() << endl;
480 for (i = 0; i < size; i++)
486 cout <<
"database::get_object(): decompressing object" << endl;
499 Vector& the_object,
int verbose_level)
501 int f_v = (verbose_level >= 1);
507 cout <<
"database::get_object_by_unique_int4 calling search_datref_of_unique_int4" << endl;
511 cout <<
"datref=" << datref <<
" calling get_object" << endl;
517 Vector& the_object,
int verbose_level)
519 int f_v = (verbose_level >= 1);
525 cout <<
"database::get_object_by_unique_int4 calling search_datref_of_unique_int4" << endl;
529 cout <<
"datref=" << datref << endl;
534 cout <<
"calling get_object" << endl;
548 Vector& the_object,
int verbose_level)
550 int f_v = (verbose_level >= 1);
555 cout <<
"database::ith_object i=" << i << endl;
557 ith(i, btree_idx, &key_type, &data_type, verbose_level);
558 get_object(&data_type, the_object, verbose_level - 1);
565 int f_v = (verbose_level >= 1);
568 cout <<
"database::ith i=" << i << endl;
571 bt.
ith(i, key_type, data_type, verbose_level);
579 int verbose_level = 0;
582 len = B.
length(verbose_level);
583 cout <<
"database " <<
filename().
s() <<
", btree " << B.
filename().
s() <<
" of length " << len << endl;
584 for (i = 0; i < len; i++) {
585 ith_object(i, btree_idx, the_object, verbose_level);
586 cout << i <<
" : " << the_object << endl;
588 close(verbose_level);
596 int verbose_level = 0;
601 len = B.
length(verbose_level);
602 cout <<
"database " <<
filename().
s() <<
", btree " << B.
filename().
s() <<
" of length " << len << endl;
603 for (i = 0; i < len; i++) {
604 B.
ith(i, &key_type, &data_type, verbose_level);
605 get_object(&data_type, the_object, verbose_level - 1);
607 << data_type.
datref <<
" "
609 << the_object << endl;
611 close(verbose_level);
618 int verbose_level = 0;
621 for (i = 0; i < len; i++) {
623 cout << i <<
" : " << the_object << endl;
629 int f_v = (verbose_level >= 1);
630 int f_vv = (verbose_level >= 1);
635 cout <<
"database::extract_subset()" << endl;
642 D.
create(verbose_level - 1);
647 cout <<
"copying " << len <<
" datasets into database " << out_path << endl;
649 for (i = 0; i < len; i++) {
657 cout << i <<
" : " << the_object << endl;
661 D.
close(verbose_level - 1);
665 Vector &datrefs,
int verbose_level)
667 Vector Btree_idx, Imin, Imax;
672 Btree_idx.
m_ii(0, btree_idx);
679 int btree_idx1,
int imin1,
int imax1,
680 Vector &datrefs,
int verbose_level)
682 Vector Btree_idx, Imin, Imax;
687 Btree_idx.
m_ii(0, btree_idx0);
690 Btree_idx.
m_ii(1, btree_idx1);
699 int f_v = (verbose_level >= 1);
700 int f_vv = (verbose_level >= 2);
701 int i, l, bi, imin, imax, first, len, db_length;
702 Vector v1, v2, First, Len, Len_sorted;
705 cout <<
"database::search_int4_multi_dimensional() database not open" << endl;
712 for (i = 0; i < l; i++) {
713 bi = btree_idx.
s_ii(i);
714 imin = i_min.
s_ii(i);
715 imax = i_max.
s_ii(i);
717 cout <<
"database::search_int4_multi_dimensional() i=" << i
718 <<
" bi=" << bi <<
" imin=" << imin <<
" imax=" << imax << endl;
723 cout <<
"after search_interval_int4() first = " << first <<
" len=" << len << endl;
727 First.
m_ii(i, first);
731 cout <<
"First = " << First << endl;
732 cout <<
"Len = " << Len << endl;
739 cout <<
"Len (sorted) = " << Len_sorted << endl;
743 bi = btree_idx.
s_ii(j);
745 db_length = B.
length(verbose_level);
749 cout <<
"db_length = " << db_length << endl;
750 cout <<
"datrefs after 0-th btree " << j <<
" : " << v1 <<
" (length=" << v1.
s_l() <<
")" << endl;
755 for (i = 1; i < l; i++) {
764 bi = btree_idx.
s_ii(j);
765 first = First.
s_ii(j);
767 if (len == db_length) {
769 cout << i <<
"th-btree selects all datasets, no restriction here." << endl;
774 for (h = 0; h < len; h++) {
775 B.
ith(first + h, &key, &data, verbose_level - 1);
777 datref_object.
m_i(datref);
778 if (v1.
search(datref_object, &idx)) {
779 v2.
m_ii(l2++, datref);
786 cout <<
"datrefs after " << i <<
"th-btree " << j <<
" : " << v1 <<
" (length=" << v1.
s_l() <<
")" << endl;
801 int f_v = (verbose_level >= 1);
803 int_4 *header = NULL;
807 cout <<
"database::get_size_from_datref" << endl;
810 cout <<
"database::get_size_from_datref() database not open" << endl;
814 header =
new int_4[8];
819 cout <<
"database::get_size_from_datref()|header: no MAGIC_SYNC, probably the datref is wrong" << endl;
820 cout <<
"datref=" << datref << endl;
824 cout <<
"database::get_size_from_datref()|header: data is not used" << endl;
831 header =
new int_4[2];
836 cout <<
"database::get_size_from_datref()|header: no MAGIC_SYNC, probably the datref is wrong" << endl;
837 cout <<
"datref=" << datref << endl;
844 cout <<
"database::size_of_header() unknown file_type" << endl;
845 cout <<
"file_type()=" <<
file_type() << endl;
849 cout <<
"database::get_size_from_datref size = " << size << endl;
856 int size,
uint_4 *datref,
int verbose_level)
867 int size,
uint_4 *datref,
int verbose_level)
869 int f_v = (verbose_level >= 1);
870 int f_vv = (verbose_level >= 2);
871 int total = 0, pad = 0;
889 cout <<
"database::add_data_DB_standard()" << endl;
892 data2 = (
char *)
new char[total];
895 header[2] = (
int_4) size;
896 header[3] = (
int_4) total;
909 pc = (
char *)(pi + 8);
912 cout <<
"size = " << size <<
" pad = " << pad
913 <<
" total = " << total << endl;
915 for (i = 0; i < size; i++)
917 for (i = 0; i < pad; i++)
920 if (old_file_size <= 0) {
921 cout <<
"database::add_data_DB_standard old_file_size <= 0" << endl;
928 cout <<
"database::add_data_DB_standard ((unsigned int)*datref << size_of_header_log()) != old_file_size" << endl;
929 cout <<
"old_file_size=" << old_file_size << endl;
930 cout <<
"*datref=" << *datref << endl;
940 if (header[0] != new_header[0]) {
941 cout <<
"header[0] != new_header[0]\n";
943 if (header[1] != new_header[1]) {
944 cout <<
"header[1] != new_header[1]\n";
946 if (header[2] != new_header[2]) {
947 cout <<
"header[2] != new_header[2]\n";
949 if (header[3] != new_header[3]) {
950 cout <<
"header[3] != new_header[3]\n";
956 int size,
uint_4 *datref,
int verbose_level)
958 int f_v = (verbose_level >= 1);
959 int f_vv = (verbose_level >= 2);
960 int total = 0, pad = 0;
973 cout <<
"database::add_data_DB_compact()" << endl;
976 data2 = (
char *)
new char[total];
978 header[1] = (
int_4) size;
985 pc = (
char *)(pi + 2);
988 cout <<
"size = " << size <<
" pad = " << pad <<
" total = " << total << endl;
990 for (i = 0; i < size; i++)
992 for (i = 0; i < pad; i++)
999 cout <<
"database::add_data_DB_compact ((unsigned int)*datref << size_of_header_log()) != old_file_size" << endl;
1000 cout <<
"old_file_size=" << old_file_size << endl;
1001 cout <<
"*datref=" << *datref << endl;
1011 if (header[0] != new_header[0]) {
1012 cout <<
"header[0] != new_header[0]\n";
1014 if (header[1] != new_header[1]) {
1015 cout <<
"header[1] != new_header[1]\n";
1022 int f_v = (verbose_level >= 1);
1029 cout <<
"database::free_data_DB()" << endl;
1038 cout <<
"database::free_data_DB()|header: no MAGIC_SYNC\n";
1042 cout <<
"database::free_data_DB()|header: data is not used\n";
1045 if (header[2] != size) {
1046 cout <<
"database::free_data_DB()|header: header[2] != size\n";
1050 cout <<
"database::free_data_DB()|header2: no MAGIC_SYNC\n";
1054 cout <<
"database::free_data_DB()|header2: data is not used\n";
1057 if (header[6] != size) {
1058 cout <<
"database::free_data_DB()|header2: header[6] != size\n";
1061 if (header[7] != header[3]) {
1062 cout <<
"database::free_data_DB()|header2: header[7] != header[3]\n";
1074 int f_v = (verbose_level >= 1);
1076 fstream *f =
new fstream(
filename().s(), ios::in | ios::out | ios::binary);
1083 cout <<
"database::file_open() file " <<
filename().
s() <<
" opened" << endl;
1089 int f_v = (verbose_level >= 1);
1098 fstream *f =
new fstream(
filename().s(), ios::out | ios::binary);
1100 cout <<
"database::file_create() file " <<
filename().
s() <<
" could not be created" << endl;
1106 fstream *f =
new fstream(
filename().s(), ios::in | ios::out | ios::binary);
1108 cout <<
"database::file_create() file " <<
filename().
s() <<
" could not be opened" << endl;
1116 cout <<
"database::file_create() file " <<
filename().
s() <<
" created" << endl;
1122 int f_v = (verbose_level >= 1);
1123 int idx = (int)
stream();
1125 cout <<
"database::file_close() !fstream_table_used[idx]" << endl;
1126 cout <<
"idx=" << idx << endl;
1134 cout <<
"database::file_close() file " <<
filename().
s() <<
" closed" << endl;
1141 cout <<
"database::file_seek() file not open" << endl;
1144 int idx = (int)
stream();
1146 cout <<
"database::file_seek() !fstream_table_used[idx]" << endl;
1147 cout <<
"idx=" << idx << endl;
1156 cout <<
"database::file_write() file not open" << endl;
1159 int idx = (int)
stream();
1161 cout <<
"database::file_write() !fstream_table_used[idx]" << endl;
1162 cout <<
"idx=" << idx << endl;
1171 cout <<
"database::file_read() file not open" << endl;
1174 int idx = (int)
stream();
1176 cout <<
"database::file_read() !fstream_table_used[idx]" << endl;
1177 cout <<
"idx=" << idx << endl;
interface to system functions
void block_swap_chars(char *ptr, int size, int no)
DISCRETA vector class for vectors of DISCRETA objects.
discreta_base & s_i(int i)
Vector & sort_with_logging(permutation &p)
bool search(discreta_base &x, int *idx)
void copyobject_to(discreta_base &x)
DISCRETA class for a database.
int search(void *pSearchKey, DATATYPE *pData, int *idx, int key_depth, int verbose_level)
int search_datref_of_unique_int4(int i, int verbose_level)
void open(int verbose_level)
int search_datref_of_unique_int4_if_there(int i, int verbose_level)
void key_print(char *the_key, std::ostream &ost)
int length(int verbose_level)
void create(int verbose_level)
void close(int verbose_level)
void delete_ith(int idx, int verbose_level)
void insert_key(KEYTYPE *pKey, DATATYPE *pData, int verbose_level)
void get_datrefs(int first, int len, Vector &datrefs)
void key_fill_in(char *the_key, Vector &the_object)
void ith(int l, KEYTYPE *key, DATATYPE *data, int verbose_level)
void search_interval_int4(int i_min, int i_max, int &first, int &len, int verbose_level)
DISCRETA class for a database.
void copyobject_to(discreta_base &x)
btree & btree_access_i(int i)
void print_by_btree_with_datref(int btree_idx, std::ostream &ost)
void add_data_DB_standard(void *d, int size, uint_4 *datref, int verbose_level)
void get_object_by_unique_int4(int btree_idx, int id, Vector &the_object, int verbose_level)
void free_data_DB(uint_4 datref, int size, int verbose_level)
void init_with_file_type(const char *filename, int objectkind, int f_compress, int file_type)
void print_by_btree(int btree_idx, std::ostream &ost)
void ith(int i, int btree_idx, KEYTYPE *key_type, DATATYPE *data_type, int verbose_level)
void search_int4_2dimensional(int btree_idx0, int imin0, int imax0, int btree_idx1, int imin1, int imax1, Vector &datrefs, int verbose_level)
void search_int4(int btree_idx, int imin, int imax, Vector &datrefs, int verbose_level)
int get_size_from_datref(uint_4 datref, int verbose_level)
void close(int verbose_level)
void add_object_return_datref(Vector &the_object, uint_4 &datref, int verbose_level)
int get_highest_int4(int btree_idx)
database & operator=(const discreta_base &x)
std::ostream & print(std::ostream &)
void add_object(Vector &the_object, int verbose_level)
void open(int verbose_level)
void create(int verbose_level)
void print_subset(Vector &datrefs, std::ostream &ost)
void delete_object(Vector &the_object, uint_4 datref, int verbose_level)
void add_data_DB_compact(void *d, int size, uint_4 *datref, int verbose_level)
void file_create(int verbose_level)
void extract_subset(Vector &datrefs, char *out_path, int verbose_level)
void get_object(uint_4 datref, Vector &the_object, int verbose_level)
void ith_object(int i, int btree_idx, Vector &the_object, int verbose_level)
void file_open(int verbose_level)
void file_close(int verbose_level)
int get_object_by_unique_int4_if_there(int btree_idx, int id, Vector &the_object, int verbose_level)
void add_data_DB(void *d, int size, uint_4 *datref, int verbose_level)
void search_int4_multi_dimensional(Vector &btree_idx, Vector &i_min, Vector &i_max, Vector &datrefs, int verbose_level)
void file_write(void *p, int size, int nb)
void file_read(void *p, int size, int nb)
void user2total(int user, int &total, int &pad)
void init(const char *filename, int objectkind, int f_compress)
void file_seek(int offset)
DISCRETA class for design parameters.
void init_database(database &D, char *path)
DISCRETA base class. All DISCRETA classes are derived from this class.
void pack(memory &M, int verbose_level, int debug_depth)
void unpack(memory &M, int verbose_level, int debug_depth)
void swap(discreta_base &a)
void copyobject(discreta_base &x)
hollerith & change_to_hollerith()
Vector & change_to_vector()
void append(const char *p)
DISCRETA class to serialize data structures.
DISCRETA permutation class.
#define DB_FILE_TYPE_STANDARD
#define DB_FILE_TYPE_COMPACT
fstream * fstream_table[MAX_FSTREAM_TABLE]
int fstream_table_used[MAX_FSTREAM_TABLE]
int fstream_table_get_free_entry()
the orbiter library for the classification of combinatorial objects
DISCRETA auxiliary class related to the class database.
DISCRETA auxiliary class related to the class database.