Orbiter 2022
Combinatorial Objects
data_structures.h
Go to the documentation of this file.
1// data_structures.h
2//
3// Anton Betten
4//
5// moved here from galois.h: July 27, 2018
6// started as orbiter: October 23, 2002
7// 2nd version started: December 7, 2003
8// galois started: August 12, 2005
9
10
11#ifndef ORBITER_SRC_LIB_FOUNDATIONS_DATA_STRUCTURES_DATA_STRUCTURES_H_
12#define ORBITER_SRC_LIB_FOUNDATIONS_DATA_STRUCTURES_DATA_STRUCTURES_H_
13
14
15
16namespace orbiter {
17namespace layer1_foundations {
18namespace data_structures {
19
20
21// #############################################################################
22// algorithms.cpp
23// #############################################################################
24
25
26
28
29
31public:
32
33 algorithms();
35 int hashing(int hash0, int a);
36 int hashing_fixed_width(int hash0, int a, int bit_length);
37 void uchar_print_bitwise(std::ostream &ost, uchar u);
38 void uchar_move(uchar *p, uchar *q, int len);
39 void int_swap(int& x, int& y);
40 void print_pointer_hex(std::ostream &ost, void *p);
41 void print_hex_digit(std::ostream &ost, int digit);
42 void print_repeated_character(std::ostream &ost, char c, int n);
43 uint32_t root_of_tree_uint32_t (uint32_t* S, uint32_t i);
44 void solve_diophant(int *Inc,
45 int nb_rows, int nb_cols, int nb_needed,
46 int f_has_Rhs, int *Rhs,
47 long int *&Solutions, int &nb_sol, long int &nb_backtrack, int &dt,
48 int f_DLX,
49 int verbose_level);
50 // allocates Solutions[nb_sol * nb_needed]
51 uint32_t SuperFastHash (const char * data, int len);
52
53};
54
55// #############################################################################
56// bitmatrix.cpp
57// #############################################################################
58
60
61class bitmatrix {
62public:
63 int m;
64 int n;
65 int N;
66 uint32_t *data;
67
68 bitmatrix();
69 ~bitmatrix();
70 void init(int m, int n, int verbose_level);
72 field_theory::finite_field *F, long int start_value, int verbose_level);
75 int *perms, unsigned int *PG_ranks, int verbose_level);
76 void print();
77 void zero_out();
78 int s_ij(int i, int j);
79 void m_ij(int i, int j, int a);
80 void mult_int_matrix_from_the_left(int *A, int Am, int An,
81 bitmatrix *Out, int verbose_level);
82
83};
84
85// #############################################################################
86// bitvector.cpp
87// #############################################################################
88
90
91class bitvector {
92
93private:
94 uchar *data; // [allocated_length]
95 long int length; // number of bits used
96 long int allocated_length;
97
98
99public:
100
101 bitvector();
102 ~bitvector();
103 void allocate(long int length);
104 long int get_length();
105 long int get_allocated_length();
106 uchar *get_data();
107 void m_i(long int i, int a);
108 void set_bit(long int i);
109 int s_i(long int i);
110 void save(std::ofstream &fp);
111 void load(std::ifstream &fp);
112 uint32_t compute_hash();
113 void print();
114
115};
116
117// #############################################################################
118// classify_bitvectors.cpp
119// #############################################################################
120
122
124public:
125
127 // the number of isomorphism types
128
130 // the number of char we need to store the canonical form of
131 // one object
132
133
135 // Type_data[nb_types][rep_len]
136 // the canonical form of the i-th representative is
137 // Type_data[i][rep_len]
139 // Type_rep[nb_types]
140 // Type_rep[i] is the index of the candidate which
141 // has been chosen as representative
142 // for the i-th isomorphism type
144 // Type_mult[nb_types]
145 // Type_mult[i] gives the number of candidates which
146 // are isomorphic to the i-th isomorphism class representative
148 // Type_extra_data[nb_types]
149 // Type_extra_data[i] is a pointer that is stored with the
150 // i-th isomorphism class representative
151
152 int N;
153 // number of candidates (or objects) that we will test
154 int n;
155 // number of candidates that we have already tested
156
158 // type_of[nb_types]
159 // type_of[i] is the isomorphism type of the i-th candidate
160
162 // the classification of type_of[nb_types]
163 // this will be computed in finalize()
164
165 int *perm;
166 // the permutation which lists the orbit
167 // representative in the order
168 // in which they appear in the list of candidates
169
172 void null();
173 void freeself();
174 void init(int N, int rep_len, int verbose_level);
175 int search(uchar *data, int &idx, int verbose_level);
176 void search_and_add_if_new(uchar *data,
177 void *extra_data, int &f_found, int &idx, int verbose_level);
178 int compare_at(uchar *data, int idx);
179 void add_at_idx(uchar *data,
180 void *extra_data, int idx, int verbose_level);
181 void finalize(int verbose_level);
182 void print_reps();
183 void print_table();
184 void save(
185 std::string &prefix,
186 void (*encode_function)(void *extra_data,
187 long int *&encoding, int &encoding_sz, void *global_data),
188 void (*get_group_order_or_NULL)(void *extra_data,
189 ring_theory::longinteger_object &go, void *global_data),
190 void *global_data,
191 int verbose_level);
192
193};
194
195
196
197
198// #############################################################################
199// classify_using_canonical_forms.cpp
200// #############################################################################
201
203
205public:
206
207
209
210
211 std::vector<bitvector *> B;
212 std::vector<void *> Objects;
213 std::vector<long int> Ago;
214 std::vector<int> input_index;
215
216 std::multimap<uint32_t, int> Hashing;
217 // we store the pair (hash, idx)
218 // where hash is the hash value of the set and idx is the
219 // index in the table Sets where the set is stored.
220 //
221 // we use a multimap because the hash values are not unique
222 // it happens that two sets have the same hash value.
223 // map cannot handle that.
224
225
226 //std::vector<void *> Input_objects;
227 //std::vector<int> orbit_rep_of_input_object;
228
232 int &f_accept, int verbose_level);
234 int &f_found, int &idx,
235 nauty_output *&NO,
236 bitvector *&Canonical_form,
237 int verbose_level);
238 // if f_found is TRUE, B[idx] agrees with the given object
240 int &f_new_object,
241 int verbose_level);
242
243};
244
245// #############################################################################
246// data_file.cpp
247// #############################################################################
248
250
251
253
254 public:
255
256 std::string fname;
259 long int **sets;
261 char **Ago_ascii;
262 char **Aut_ascii;
263
267
268 data_file();
269 ~data_file();
270 void null();
271 void freeself();
272 void read(std::string &fname, int f_casenumbers, int verbose_level);
273 void read_candidates(std::string &candidates_fname, int verbose_level);
274};
275
276// #############################################################################
277// data_input_stream_description_element.cpp:
278// #############################################################################
279
280
282
283
285public:
287 std::string input_string;
288 std::string input_string2;
289
290 // for t_data_input_stream_file_of_designs:
291 int input_data1; // N_points
292 int input_data2; // b = number of blocks
293 int input_data3; // k = block size
294 int input_data4; // partition class size
295
298 void print();
299 void init_set_of_points(std::string &a);
300 void init_set_of_lines(std::string &a);
301 void init_set_of_points_and_lines(std::string &a, std::string &b);
302 void init_packing(std::string &a, int q);
303 void init_file_of_points(std::string &a);
304 void init_file_of_lines(std::string &a);
305 void init_file_of_packings(std::string &a);
307 std::string &a, std::string &b, int q);
308 void init_file_of_point_set(std::string &a);
309 void init_file_of_designs(std::string &a,
310 int N_points, int b, int k, int partition_class_size);
311 void init_file_of_incidence_geometries(std::string &a,
312 int v, int b, int f);
314 std::string &a,
315 int v, int b, int r);
316 void init_incidence_geometry(std::string &a,
317 int v, int b, int f);
318 void init_incidence_geometry_by_row_ranks(std::string &a,
319 int v, int b, int r);
320 void init_from_parallel_search(std::string &fname_mask,
321 int nb_cases, std::string &cases_fname);
322
323};
324
325
326// #############################################################################
327// data_input_stream_description.cpp:
328// #############################################################################
329
330
332
333
335public:
336
337
339
340 std::vector<data_input_stream_description_element> Input;
341
344 int read_arguments(int argc, std::string *argv,
345 int verbose_level);
346 void print();
347 void print_item(int i);
348
349
350};
351
352
353// #############################################################################
354// data_input_stream.cpp:
355// #############################################################################
356
357
359
360
362public:
363
365
367
368 std::vector<void *> Objects;
369
372 void init(data_input_stream_description *Descr, int verbose_level);
374 int verbose_level);
375 void read_objects(int verbose_level);
376
377
378};
379
380
381// #############################################################################
382// data_structures_global.cpp:
383// #############################################################################
384
385
387
388
390public:
393 void bitvector_m_ii(uchar *bitvec, long int i, int a);
394 void bitvector_set_bit(uchar *bitvec, long int i);
395 int bitvector_s_i(uchar *bitvec, long int i);
396 uint32_t int_vec_hash(int *data, int len);
397 uint32_t lint_vec_hash(long int *data, int len);
398 uint32_t char_vec_hash(char *data, int len);
399 int int_vec_hash_after_sorting(int *data, int len);
400 int lint_vec_hash_after_sorting(long int *data, int len);
401
402};
403
404
405// #############################################################################
406// fancy_set.cpp
407// #############################################################################
408
410
411
413
414 public:
415
416 int n;
417 int k;
418 long int *set;
419 long int *set_inv;
420
421 fancy_set();
422 ~fancy_set();
423 void null();
424 void freeself();
425 void init(int n, int verbose_level);
426 void init_with_set(int n, int k, int *subset, int verbose_level);
427 void print();
428 void println();
429 void swap(int pos, int a);
430 int is_contained(int a);
431 void copy_to(fancy_set *to);
432 void add_element(int elt);
433 void add_elements(int *elts, int nb);
434 void delete_elements(int *elts, int nb);
435 void delete_element(int elt);
436 void select_subset(int *elts, int nb);
437 void intersect_with(int *elts, int nb);
438 void subtract_set(fancy_set *set_to_subtract);
439 void sort();
440 int compare_lexicographically(fancy_set *second_set);
441 void complement(fancy_set *compl_set);
442 int is_subset(fancy_set *set2);
443 int is_equal(fancy_set *set2);
444 void save(std::string &fname, int verbose_level);
445
446};
447
448// #############################################################################
449// int_matrix.cpp:
450// #############################################################################
451
452
454
455
457public:
458
459 int *M;
460 int m;
461 int n;
462
463 int_matrix();
464 ~int_matrix();
465 void null();
466 void freeself();
467 void allocate(int m, int n);
468 void allocate_and_init(int m, int n, int *Mtx);
469 int &s_ij(int i, int j);
470 int &s_m();
471 int &s_n();
472 void print();
473
474};
475
476
477// #############################################################################
478// int_vec.cpp:
479// #############################################################################
480
481
483
484class int_vec {
485public:
486
487 int_vec();
488 ~int_vec();
489 void add(int *v1, int *v2, int *w, int len);
490 void add3(int *v1, int *v2, int *v3, int *w, int len);
491 void apply(int *from, int *through, int *to, int len);
492 void apply_lint(int *from, long int *through, long int *to, int len);
493 int is_constant_on_subset(int *v,
494 int *subset, int sz, int &value);
495 void take_away(int *v, int &len,
496 int *take_away, int nb_take_away);
497 // v must be sorted
498 int count_number_of_nonzero_entries(int *v, int len);
499 int find_first_nonzero_entry(int *v, int len);
500 void zero(int *v, long int len);
501 int is_zero(int *v, long int len);
502 void mone(int *v, long int len);
503 void copy(int *from, int *to, long int len);
504 void copy_to_lint(int *from, long int *to, long int len);
505 void swap(int *v1, int *v2, long int len);
507 int &len, int a);
508 void complement(int *v, int n, int k);
509 // computes the complement to v + k (v must be allocated to n elements)
510 // the first k elements of v[] must be in increasing order.
511 void complement(int *v, int *w, int n, int k);
512 // computes the complement of v[k] in the set {0,...,n-1} to w[n - k]
513 void init5(int *v, int a0, int a1, int a2, int a3, int a4);
514 int minimum(int *v, int len);
515 int maximum(int *v, int len);
516 void copy(int len, int *from, int *to);
517 int first_difference(int *p, int *q, int len);
518 int vec_max_log_of_entries(std::vector<std::vector<int> > &p);
519 void vec_print(std::vector<std::vector<int> > &p);
520 void vec_print(std::vector<std::vector<int> > &p, int w);
521 void distribution_compute_and_print(std::ostream &ost,
522 int *v, int v_len);
523 void distribution(int *v,
524 int len_v, int *&val, int *&mult, int &len);
525 void print(std::ostream &ost, std::vector<int> &v);
526 void print(std::ostream &ost, int *v, int len);
527 void print_str(std::stringstream &ost, int *v, int len);
528 void print_str_naked(std::stringstream &ost, int *v, int len);
529 void print_as_table(std::ostream &ost, int *v, int len, int width);
530 void print_fully(std::ostream &ost, std::vector<int> &v);
531 void print_fully(std::ostream &ost, int *v, int len);
532 void print_dense(std::ostream &ost, int *v, int len);
533 void print_Cpp(std::ostream &ost, int *v, int len);
534 void print_GAP(std::ostream &ost, int *v, int len);
535 void print_classified(int *v, int len);
536 void print_classified_str(std::stringstream &sstr,
537 int *v, int len, int f_backwards);
538 void scan(std::string &s, int *&v, int &len);
539 void scan(const char *s, int *&v, int &len);
540 void scan_from_stream(std::istream & is, int *&v, int &len);
541 void print_to_str(char *str, int *data, int len);
542 void print_to_str_naked(char *str, int *data, int len);
543 void print(int *v, int len);
544 void print_integer_matrix(std::ostream &ost,
545 int *p, int m, int n);
546 void print_integer_matrix_width(std::ostream &ost,
547 int *p, int m, int n, int dim_n, int w);
548 void print_integer_matrix_in_C_source(std::ostream &ost,
549 int *p, int m, int n);
550 void matrix_make_block_matrix_2x2(int *Mtx,
551 int k, int *A, int *B, int *C, int *D);
552 void matrix_delete_column_in_place(int *Mtx,
553 int k, int n, int pivot);
554 int matrix_max_log_of_entries(int *p, int m, int n);
555 void matrix_print_ost(std::ostream &ost, int *p, int m, int n);
556 void matrix_print(int *p, int m, int n);
557 void matrix_print_tight(int *p, int m, int n);
558 void matrix_print_ost(std::ostream &ost, int *p, int m, int n, int w);
559 void matrix_print(int *p, int m, int n, int w);
560 void matrix_print_bitwise(int *p, int m, int n);
561 void distribution_print(std::ostream &ost,
562 int *val, int *mult, int len);
563 void set_print(std::ostream &ost, int *v, int len);
564 void integer_vec_print(std::ostream &ost, int *v, int len);
565 int hash(int *v, int len, int bit_length);
566 void create_string_with_quotes(std::string &str, int *v, int len);
567 void transpose(int *M, int m, int n, int *Mt);
568
569};
570
571
572
573// #############################################################################
574// int_vector.cpp
575// #############################################################################
576
578
580public:
581
582 long int *M;
583 int m;
585
586 int_vector();
587 ~int_vector();
588 void null();
589 void freeself();
590 void allocate(int len);
591 void allocate_and_init(int len, long int *V);
592 void allocate_and_init_int(int len, int *V);
593 void init_permutation_from_string(const char *s);
594 void read_ascii_file(std::string &fname);
595 void read_binary_file_int4(std::string &fname);
596 long int &s_i(int i);
597 int &length();
598 void print(std::ostream &ost);
599 void zero();
600 int search(int a, int &idx);
601 void sort();
602 void make_space();
603 void append(int a);
604 void insert_at(int a, int idx);
605 void insert_if_not_yet_there(int a);
607 void write_to_ascii_file(std::string &fname);
608 void write_to_binary_file_int4(std::string &fname);
609 void write_to_csv_file(std::string &fname, const char *label);
610 uint32_t hash();
611 int minimum();
612 int maximum();
613
614
615
616};
617
618
619// #############################################################################
620// lint_vec.cpp:
621// #############################################################################
622
623
625
626class lint_vec {
627public:
628
629 lint_vec();
630 ~lint_vec();
631 void apply(long int *from, long int *through, long int *to, int len);
632 void take_away(long int *v, int &len,
633 long int *take_away, int nb_take_away);
634 void zero(long int *v, long int len);
635 void mone(long int *v, long int len);
636 void copy(long int *from, long int *to, long int len);
637 void copy_to_int(long int *from, int *to, long int len);
638 void complement(long int *v, long int *w, int n, int k);
639 long int minimum(long int *v, int len);
640 long int maximum(long int *v, int len);
641 void matrix_print_width(std::ostream &ost,
642 long int *p, int m, int n, int dim_n, int w);
643 void set_print(long int *v, int len);
644 void set_print(std::ostream &ost, long int *v, int len);
645 void print(std::ostream &ost, long int *v, int len);
646 void print(std::ostream &ost, std::vector<long int> &v);
647 void print_as_table(std::ostream &ost, long int *v, int len, int width);
648 void print_bare_fully(std::ostream &ost, long int *v, int len);
649 void print_fully(std::ostream &ost, long int *v, int len);
650 void print_fully(std::ostream &ost, std::vector<long int> &v);
651 int matrix_max_log_of_entries(long int *p, int m, int n);
652 void matrix_print(long int *p, int m, int n);
653 void matrix_print(long int *p, int m, int n, int w);
654 void scan(std::string &s, long int *&v, int &len);
655 void scan(const char *s, long int *&v, int &len);
656 void scan_from_stream(std::istream & is, long int *&v, int &len);
657 void print_to_str(char *str, long int *data, int len);
658 void print_to_str_naked(char *str, long int *data, int len);
659 void create_string_with_quotes(std::string &str, long int *v, int len);
660
661
662};
663
664
665
666// #############################################################################
667// nauty_output.cpp:
668// #############################################################################
669
670
672
674public:
675
676
677 int N;
678 int *Aut;
680 int *Base;
682 long int *Base_lint;
685
687
689 long int nb_othernode;
692
693 nauty_output();
695 void allocate(int N, int verbose_level);
696 void print();
697 void print_stats();
698 int belong_to_the_same_orbit(int a, int b, int verbose_level);
699
700};
701
702
703// #############################################################################
704// page_storage.cpp
705// #############################################################################
706
708
710
711public:
713
714 long int entry_size; // in char
715 long int page_length_log; // number of bits
716 long int page_length; // entries per page
717 long int page_size; // size in char of one page
719 // size in char of one allocation table
720
724
727
730
732 void (* elt_print)(void *p, void *data, std::ostream &ost);
734
735
736 void init(int entry_size, int page_length_log,
737 int verbose_level);
739 void (* elt_print)(void *p, void *data, std::ostream &ost),
740 void *elt_print_data);
741 void print();
742 uchar *s_i_and_allocate(long int i);
743 uchar *s_i_and_deallocate(long int i);
744 uchar *s_i(long int i);
745 uchar *s_i_and_allocation_bit(long int i, int &f_allocated);
747 long int store(uchar *elt);
748 void dispose(long int hdl);
749 void check_free_list();
750 page_storage();
752 void print_storage_used();
753
754};
755
756
757
758// #############################################################################
759// partitionstack.cpp
760// #############################################################################
761
762
763
765
766
768 public:
769
770 // data structure for the partition stack,
771 // following Leon:
772 int n; // size of the set that is partitioned
773 int ht;
774 int ht0;
775
778
781 int *parent;
782
783
784 // for matrix canonization:
785 // int first_column_element;
786
787 // subset to be chosen by classify_by_..._extract_subset():
788 // used as input for split_cell()
789 //
790 // used if SPLIT_MULTIPLY is defined:
795 //
796 // used if SPLIT_MULTIPLY is not defined:
797 int *subset;
799
802 void free();
803 void allocate(int n, int verbose_level);
804 void allocate_with_two_classes(int n, int v, int b, int verbose_level);
805 int parent_at_height(int h, int cell);
806 int is_discrete();
811 int nb_partition_classes(int from, int len);
812 int is_subset_of_cell(int *set, int size, int &cell_idx);
813 void sort_cells();
814 void sort_cell(int cell);
815 void reverse_cell(int cell);
816 void check();
817 void print_raw();
818 void print_class(std::ostream& ost, int idx);
819 void print_classes_tex(std::ostream& ost);
820 void print_class_tex(std::ostream& ost, int idx);
821 void print_class_point_or_line(std::ostream& ost, int idx);
822 void print_classes(std::ostream& ost);
823 void print_classes_points_and_lines(std::ostream& ost);
824 std::ostream& print(std::ostream& ost);
825 void print_cell(int i);
826 void print_cell_latex(std::ostream &ost, int i);
827 void print_subset();
828 void get_cell(int i, int *&cell, int &cell_sz, int verbose_level);
829 void get_cell_lint(int i, long int *&cell, int &cell_sz, int verbose_level);
830 void get_row_classes(set_of_sets *&Sos, int verbose_level);
831 void get_column_classes(set_of_sets *&Sos, int verbose_level);
832 void write_cell_to_file(int i,
833 std::string &fname, int verbose_level);
835 std::string &fname, int verbose_level);
836 void refine_arbitrary_set_lint(int size, long int *set, int verbose_level);
837 void refine_arbitrary_set(int size, int *set, int verbose_level);
838 void split_cell(int verbose_level);
839 void split_multiple_cells(int *set, int set_size,
840 int f_front, int verbose_level);
841 void split_line_cell_front_or_back(int *set, int set_size,
842 int f_front, int verbose_level);
843 void split_cell_front_or_back(int *set, int set_size,
844 int f_front, int verbose_level);
845 void split_cell(int *set, int set_size, int verbose_level);
846 void join_cell();
847 void reduce_height(int ht0);
848 void isolate_point(int pt);
849 void subset_continguous(int from, int len);
850 int is_row_class(int c);
851 int is_col_class(int c);
853 int *&row_classes, int *&row_class_inv,
854 int &nb_row_classes,
855 int *&col_classes, int *&col_class_inv,
856 int &nb_col_classes,
857 int verbose_level);
859 int *row_classes, int nb_row_classes,
860 int *col_classes, int nb_col_classes,
861 int *row_perm, int *row_perm_inv,
862 int *col_perm, int *col_perm_inv);
863 void get_row_and_col_classes(int *row_classes,
864 int &nb_row_classes,
865 int *col_classes, int &nb_col_classes,
866 int verbose_level);
867 void initial_matrix_decomposition(int nbrows,
868 int nbcols,
869 int *V, int nb_V, int *B, int nb_B,
870 int verbose_level);
871 int is_descendant_of(int cell, int ancestor_cell,
872 int verbose_level);
873 int is_descendant_of_at_level(int cell, int ancestor_cell,
874 int level, int verbose_level);
875 int cellSizeAtLevel(int cell, int level);
876
877 void print_decomposition_tex(std::ostream &ost,
878 int *row_classes, int nb_row_classes,
879 int *col_classes, int nb_col_classes);
880 void print_decomposition_scheme(std::ostream &ost,
881 int *row_classes, int nb_row_classes,
882 int *col_classes, int nb_col_classes,
883 int *scheme, int marker1, int marker2);
884 void print_decomposition_scheme_tex(std::ostream &ost,
885 int *row_classes, int nb_row_classes,
886 int *col_classes, int nb_col_classes,
887 int *scheme);
889 std::ostream &ost, int f_enter_math_mode,
890 int *row_classes, int nb_row_classes,
891 int *col_classes, int nb_col_classes,
892 int *row_scheme, int *col_scheme, int f_print_subscripts);
893 void print_tactical_decomposition_scheme_tex(std::ostream &ost,
894 int *row_classes, int nb_row_classes,
895 int *col_classes, int nb_col_classes,
896 int *row_scheme, int *col_scheme, int f_print_subscripts);
898 std::ostream &ost, int f_enter_math_mode,
899 int *row_classes, int nb_row_classes,
900 int *col_classes, int nb_col_classes,
901 int *row_scheme, int f_print_subscripts);
903 std::ostream &ost, int f_enter_math_mode,
904 int *row_classes, int nb_row_classes,
905 int *col_classes, int nb_col_classes,
906 int *col_scheme, int f_print_subscripts);
908 std::ostream &ost, int f_enter_math_mode,
909 int *row_classes, int nb_row_classes,
910 int *col_classes, int nb_col_classes,
911 int f_print_subscripts);
912 int hash_column_refinement_info(int ht0, int *data, int depth,
913 int hash0);
914 int hash_row_refinement_info(int ht0, int *data, int depth, int hash0);
915 void print_column_refinement_info(int ht0, int *data, int depth);
916 void print_row_refinement_info(int ht0, int *data, int depth);
917 void radix_sort(int left, int right, int *C,
918 int length, int radix, int verbose_level);
919 void radix_sort_bits(int left, int right,
920 int *C, int length, int radix, int mask, int verbose_level);
921 void swap_ij(int *perm, int *perm_inv, int i, int j);
922 int my_log2(int m);
923 void split_by_orbit_partition(int nb_orbits,
924 int *orbit_first, int *orbit_len, int *orbit,
925 int offset,
926 int verbose_level);
927};
928
929// #############################################################################
930// set_builder_description.cpp
931// #############################################################################
932
933
934
936
937
939public:
940
945
949
953
956
958 std::string here_text;
959
961 std::string file_name;
962
965 int read_arguments(
966 int argc, std::string *argv,
967 int verbose_level);
968 void print();
969};
970
971
972
973// #############################################################################
974// set_builder.cpp
975// #############################################################################
976
977
978
980
981
983public:
984
986
987 long int *set;
988 int sz;
989
990 set_builder();
991 ~set_builder();
992 void init(set_builder_description *Descr, int verbose_level);
993 long int process_transformations(long int x);
994 long int clone_with_affine_function(long int x);
995};
996
997
998// #############################################################################
999// set_of_sets_lint.cpp
1000// #############################################################################
1001
1003
1004
1006
1007public:
1008
1011 long int **Sets;
1013
1014
1017 void null();
1018 void freeself();
1019 void init_simple(long int underlying_set_size,
1020 int nb_sets, int verbose_level);
1021 void init(long int underlying_set_size,
1022 int nb_sets, long int **Pts, int *Sz, int verbose_level);
1023 void init_basic(long int underlying_set_size,
1024 int nb_sets, int *Sz, int verbose_level);
1025 void init_set(int idx_of_set,
1026 long int *set, int sz, int verbose_level);
1027};
1028
1029
1030
1031
1032// #############################################################################
1033// set_of_sets.cpp
1034// #############################################################################
1035
1037
1038
1040
1041public:
1042
1045 long int **Sets;
1046 long int *Set_size;
1047
1048
1049 set_of_sets();
1050 ~set_of_sets();
1051 void null();
1052 void freeself();
1053 set_of_sets *copy();
1055 int nb_sets, int verbose_level);
1056 void init_from_adjacency_matrix(int n, int *Adj,
1057 int verbose_level);
1058 void init(int underlying_set_size, int nb_sets,
1059 long int **Pts, long int *Sz, int verbose_level);
1061 int nb_sets, long int **Pts, int *Sz, int verbose_level);
1063 int nb_sets, long int *Sz, int verbose_level);
1065 int nb_sets, int *Sz, int verbose_level);
1067 int nb_sets, int constant_size, int verbose_level);
1069 std::string &fname, int verbose_level);
1071 std::string &fname, int verbose_level);
1073 std::string &fname, int verbose_level);
1074 void init_set(int idx_of_set, int *set, int sz,
1075 int verbose_level);
1076 // Stores a copy of the given set.
1077 void init_cycle_structure(int *perm, int n, int verbose_level);
1078 int total_size();
1079 long int &element(int i, int j);
1080 void add_element(int i, long int a);
1081 void print();
1082 void print_table();
1083 void print_table_tex(std::ostream &ost);
1084 void print_table_latex_simple(std::ostream &ost);
1085 void print_table_latex_simple_with_selection(std::ostream &ost, int *Selection, int nb_sel);
1086 void dualize(set_of_sets *&S, int verbose_level);
1087 void remove_sets_of_given_size(int k,
1088 set_of_sets &S, int *&Idx,
1089 int verbose_level);
1091 int *&Idx, int verbose_level);
1093 int *&intersection_type, int &highest_intersection_number,
1094 int *&intersection_matrix, int &nb_big_sets,
1095 int verbose_level);
1096 void compute_incidence_matrix(int *&Inc, int &m, int &n,
1097 int verbose_level);
1098 void compute_and_print_tdo_row_scheme(std::ostream &file,
1099 int verbose_level);
1100 void compute_and_print_tdo_col_scheme(std::ostream &file,
1101 int verbose_level);
1102 void init_decomposition(geometry::decomposition *&D, int verbose_level);
1104 int verbose_level);
1105 int is_member(int i, int a, int verbose_level);
1106 void sort_all(int verbose_level);
1107 void all_pairwise_intersections(set_of_sets *&Intersections,
1108 int verbose_level);
1109 void pairwise_intersection_matrix(int *&M, int verbose_level);
1110 void all_triple_intersections(set_of_sets *&Intersections,
1111 int verbose_level);
1113 int largest_set_size();
1114 void save_csv(std::string &fname,
1115 int f_make_heading, int verbose_level);
1116 void save_constant_size_csv(std::string &fname,
1117 int verbose_level);
1118 int find_common_element_in_two_sets(int idx1, int idx2,
1119 int &common_elt);
1120 void sort();
1121 void sort_big(int verbose_level);
1122 void compute_orbits(int &nb_orbits, int *&orbit, int *&orbit_inv,
1123 int *&orbit_first, int *&orbit_len,
1124 void (*compute_image_function)(set_of_sets *S,
1125 void *compute_image_data, int elt_idx, int gen_idx,
1126 int &idx_of_image, int verbose_level),
1127 void *compute_image_data,
1128 int nb_gens,
1129 int verbose_level);
1130 int number_of_eckardt_points(int verbose_level);
1131 void get_eckardt_points(int *&E, int &nb_E, int verbose_level);
1133 int (*evaluate_function)(int a, int i, int j, void *evaluate_data, int verbose_level),
1134 void *evaluate_data,
1135 int verbose_level);
1136 int find_smallest_class();
1137};
1138
1139
1140
1141// #############################################################################
1142// sorting.cpp
1143// #############################################################################
1144
1146
1147
1148class sorting {
1149
1150public:
1151 sorting();
1152 ~sorting();
1153
1154 void int_vec_search_vec(int *v, int len, int *A, int A_sz, int *Idx);
1156 long int *v, int len, long int *A, int A_sz, long int *Idx);
1157 void int_vec_search_vec_linear(int *v, int len, int *A, int A_sz, int *Idx);
1159 long int *v, int len, long int *A, int A_sz, long int *Idx);
1160 int int_vec_is_subset_of(int *set, int sz, int *big_set, int big_set_sz);
1161 int lint_vec_is_subset_of(int *set, int sz, long int *big_set, int big_set_sz, int verbose_level);
1162 void int_vec_swap_points(int *list, int *list_inv, int idx1, int idx2);
1163 int int_vec_is_sorted(int *v, int len);
1164 void int_vec_sort_and_remove_duplicates(int *v, int &len);
1165 void lint_vec_sort_and_remove_duplicates(long int *v, int &len);
1166 int int_vec_sort_and_test_if_contained(int *v1, int len1, int *v2, int len2);
1168 long int *v1, int len1, long int *v2, int len2);
1169 int int_vecs_are_disjoint(int *v1, int len1, int *v2, int len2);
1170 int int_vecs_find_common_element(int *v1, int len1,
1171 int *v2, int len2, int &idx1, int &idx2);
1172 int lint_vecs_find_common_element(long int *v1, int len1,
1173 long int *v2, int len2, int &idx1, int &idx2);
1175 int &used_length, int &alloc_length, int a, int verbose_level);
1177 int &used_length, int &alloc_length, int a, int verbose_level);
1179 int &used_length, int &alloc_length, long int a,
1180 int verbose_level);
1181 int int_vec_is_zero(int *v, int len);
1182 int test_if_sets_are_equal(int *set1, int *set2, int set_size);
1183 int test_if_sets_are_disjoint(long int *set1, int sz1, long int *set2, int sz2);
1184 void test_if_set(int *set, int set_size);
1185 int test_if_set_with_return_value(int *set, int set_size);
1186 int test_if_set_with_return_value_lint(long int *set, int set_size);
1187 void rearrange_subset(int n, int k, int *set,
1188 int *subset, int *rearranged_set, int verbose_level);
1189 void rearrange_subset_lint(int n, int k,
1190 long int *set, int *subset, long int *rearranged_set,
1191 int verbose_level);
1192 void rearrange_subset_lint_all(int n, int k,
1193 long int *set, long int *subset, long int *rearranged_set,
1194 int verbose_level);
1195 int int_vec_search_linear(int *v, int len, int a, int &idx);
1196 int lint_vec_search_linear(long int *v, int len, long int a, int &idx);
1197 void int_vec_intersect(int *v1, int len1, int *v2, int len2,
1198 int *&v3, int &len3);
1199 void vec_intersect(long int *v1, int len1,
1200 long int *v2, int len2, long int *&v3, int &len3);
1201 void int_vec_intersect_sorted_vectors(int *v1, int len1,
1202 int *v2, int len2, int *v3, int &len3);
1203 void lint_vec_intersect_sorted_vectors(long int *v1, int len1,
1204 long int *v2, int len2, long int *v3, int &len3);
1205 void int_vec_sorting_permutation(int *v, int len, int *perm,
1206 int *perm_inv, int f_increasingly);
1207 // perm and perm_inv must be allocated to len elements
1208 void int_vec_quicksort(int *v, int (*compare_func)(int a, int b),
1209 int left, int right);
1210 void lint_vec_quicksort(long int *v,
1211 int (*compare_func)(long int a, long int b), int left, int right);
1212 void int_vec_quicksort_increasingly(int *v, int len);
1213 void int_vec_quicksort_decreasingly(int *v, int len);
1214 void lint_vec_quicksort_increasingly(long int *v, int len);
1215 void lint_vec_quicksort_decreasingly(long int *v, int len);
1216 void quicksort_array(int len, void **v,
1217 int (*compare_func)(void *a, void *b, void *data), void *data);
1218 void quicksort_array_with_perm(int len, void **v, int *perm,
1219 int (*compare_func)(void *a, void *b, void *data), void *data);
1220 int vec_search(void **v, int (*compare_func)(void *a, void *b, void *data),
1221 void *data_for_compare,
1222 int len, void *a, int &idx, int verbose_level);
1223 int vec_search_general(void *vec,
1224 int (*compare_func)(void *vec, void *a, int b, void *data_for_compare),
1225 void *data_for_compare,
1226 int len, void *a, int &idx, int verbose_level);
1227 int int_vec_search_and_insert_if_necessary(int *v, int &len, int a);
1228 int int_vec_search_and_remove_if_found(int *v, int &len, int a);
1229 int int_vec_search(int *v, int len, int a, int &idx);
1230 // This function finds the last occurrence of the element a.
1231 // If a is not found, it returns in idx the position
1232 // where it should be inserted if
1233 // the vector is assumed to be in increasing order.
1234 int lint_vec_search(long int *v, int len, long int a,
1235 int &idx, int verbose_level);
1236 // This function finds the last occurrence of the element a.
1237 // If a is not found, it returns in idx the position
1238 // where it should be inserted if
1239 // the vector is assumed to be in increasing order.
1240 int vector_lint_search(std::vector<long int> &v,
1241 long int a, int &idx, int verbose_level);
1242 int int_vec_search_first_occurence(int *v, int len, int a, int &idx,
1243 int verbose_level);
1244 // This function finds the first occurrence of the element a.
1246 ring_theory::longinteger_object &a, int &idx);
1247 void int_vec_classify_and_print(std::ostream &ost, int *v, int l);
1248 void int_vec_values(int *v, int l, int *&w, int &w_len);
1249 void int_vec_multiplicities(int *v, int l, int *&w, int &w_len);
1250 void int_vec_values_and_multiplicities(int *v, int l,
1251 int *&val, int *&mult, int &nb_values);
1252 void int_vec_classify(int length, int *the_vec, int *&the_vec_sorted,
1253 int *&sorting_perm, int *&sorting_perm_inv,
1254 int &nb_types, int *&type_first, int *&type_len);
1255 void int_vec_classify_with_arrays(int length,
1256 int *the_vec, int *the_vec_sorted,
1257 int *sorting_perm, int *sorting_perm_inv,
1258 int &nb_types, int *type_first, int *type_len);
1259 void int_vec_sorted_collect_types(int length, int *the_vec_sorted,
1260 int &nb_types, int *type_first, int *type_len);
1261 void int_vec_print_classified(std::ostream &ost, int *vec, int len);
1262 void int_vec_print_types(std::ostream &ost,
1263 int f_backwards, int *the_vec_sorted,
1264 int nb_types, int *type_first, int *type_len);
1265 void int_vec_print_types_naked_stringstream(std::stringstream &sstr,
1266 int f_backwards, int *the_vec_sorted,
1267 int nb_types, int *type_first, int *type_len);
1268 void int_vec_print_types_naked(std::ostream &ost, int f_backwards,
1269 int *the_vec_sorted,
1270 int nb_types, int *type_first, int *type_len);
1271 void int_vec_print_types_naked_tex(std::ostream &ost, int f_backwards,
1272 int *the_vec_sorted,
1273 int nb_types, int *type_first, int *type_len);
1275 int f_backwards, int *the_vec_sorted,
1276 int nb_types, int *type_first, int *type_len);
1277 void Heapsort(void *v, int len, int entry_size_in_chars,
1278 int (*compare_func)(void *v1, void *v2));
1279 void Heapsort_general(void *data, int len,
1280 int (*compare_func)(void *data, int i, int j, void *extra_data),
1281 void (*swap_func)(void *data, int i, int j, void *extra_data),
1282 void *extra_data);
1283 void Heapsort_general_with_log(void *data, int *w, int len,
1284 int (*compare_func)(void *data,
1285 int i, int j, void *extra_data),
1286 void (*swap_func)(void *data,
1287 int i, int j, void *extra_data),
1288 void *extra_data);
1289 int search_general(void *data, int len, void *search_object, int &idx,
1290 int (*compare_func)(void *data, int i, void *search_object,
1291 void *extra_data),
1292 void *extra_data, int verbose_level);
1293 // This function finds the last occurrence of the element a.
1294 // If a is not found, it returns in idx the position
1295 // where it should be inserted if
1296 // the vector is assumed to be in increasing order.
1297 void int_vec_heapsort(int *v, int len);
1298 void lint_vec_heapsort(long int *v, int len);
1299 void int_vec_heapsort_with_log(int *v, int *w, int len);
1300 void lint_vec_heapsort_with_log(long int *v, long int *w, int len);
1301 void heapsort_make_heap(int *v, int len);
1302 void lint_heapsort_make_heap(long int *v, int len);
1303 void heapsort_make_heap_with_log(int *v, int *w, int len);
1304 void lint_heapsort_make_heap_with_log(long int *v, long int *w, int len);
1305 void Heapsort_make_heap(void *v, int len, int entry_size_in_chars,
1306 int (*compare_func)(void *v1, void *v2));
1307 void Heapsort_general_make_heap(void *data, int len,
1308 int (*compare_func)(void *data, int i, int j, void *extra_data),
1309 void (*swap_func)(void *data, int i, int j, void *extra_data),
1310 void *extra_data);
1311 void Heapsort_general_make_heap_with_log(void *data, int *w, int len,
1312 int (*compare_func)(void *data, int i, int j, void *extra_data),
1313 void (*swap_func)(void *data, int i, int j, void *extra_data),
1314 void *extra_data);
1315 void heapsort_sift_down(int *v, int start, int end);
1316 void lint_heapsort_sift_down(long int *v, int start, int end);
1317 void heapsort_sift_down_with_log(int *v, int *w, int start, int end);
1319 long int *v, long int *w, int start, int end);
1320 void Heapsort_sift_down(void *v, int start, int end, int entry_size_in_chars,
1321 int (*compare_func)(void *v1, void *v2));
1322 void Heapsort_general_sift_down(void *data, int start, int end,
1323 int (*compare_func)(void *data, int i, int j, void *extra_data),
1324 void (*swap_func)(void *data, int i, int j, void *extra_data),
1325 void *extra_data);
1326 void Heapsort_general_sift_down_with_log(void *data, int *w, int start, int end,
1327 int (*compare_func)(void *data, int i, int j, void *extra_data),
1328 void (*swap_func)(void *data, int i, int j, void *extra_data),
1329 void *extra_data);
1330 void heapsort_swap(int *v, int i, int j);
1331 void lint_heapsort_swap(long int *v, int i, int j);
1332 void Heapsort_swap(void *v, int i, int j, int entry_size_in_chars);
1333 void find_points_by_multiplicity(int *data, int data_sz, int multiplicity,
1334 int *&pts, int &nb_pts);
1335 void int_vec_bubblesort_increasing(int len, int *p);
1336 int integer_vec_compare(int *p, int *q, int len);
1337 int lint_vec_compare(long int *p, long int *q, int len);
1339 int n, int *pts, int *prev, int f_use_pts_inv, int *pts_inv,
1340 int *&depth, int *&ancestor, int verbose_level);
1342 int n, int *pts, int *prev, int f_use_pts_inv, int *pts_inv,
1343 int *depth, int *ancestor, int pos);
1345 int n, int *pts, int *prev, int f_use_pts_inv, int *pts_inv,
1346 std::string &fname_base,
1347 graphics::layered_graph_draw_options *LG_Draw_options,
1349 int verbose_level);
1350 int compare_sets(int *set1, int *set2, int sz1, int sz2);
1351 int compare_sets_lint(long int *set1, long int *set2, int sz1, int sz2);
1352 int test_if_sets_are_disjoint(long int *set1, long int *set2, int sz1, int sz2);
1353 void d_partition(double *v, int left, int right, int *middle);
1354 void d_quicksort(double *v, int left, int right);
1355 void d_quicksort_array(int len, double *v);
1356 int test_if_sets_are_disjoint_assuming_sorted(int *set1, int *set2, int sz1, int sz2);
1357 int test_if_sets_are_disjoint_assuming_sorted_lint(long int *set1, long int *set2, int sz1, int sz2);
1358 int uchar_vec_compare(uchar *p, uchar *q, int len);
1359 int test_if_sets_are_disjoint_not_assuming_sorted(long int *v, long int *w, int len);
1360 int int_vec_compare(int *p, int *q, int len);
1361 int int_vec_compare_stride(int *p, int *q, int len, int stride);
1362 void sorted_vec_get_first_and_length(int *v, int len,
1363 int *class_first, int *class_len, int &nb_classes);
1364 // we assume that the vector v is sorted.
1365
1366};
1367
1368
1369// #############################################################################
1370// spreadsheet.cpp
1371// #############################################################################
1372
1374
1375
1377
1378public:
1379
1380 char **tokens;
1382
1385
1387 int *Table;
1388
1389
1390 spreadsheet();
1391 ~spreadsheet();
1392 void null();
1393 void freeself();
1394 void init_set_of_sets(set_of_sets *S, int f_make_heading);
1395 void init_int_matrix(int nb_rows, int nb_cols, int *A);
1396 void init_empty_table(int nb_rows, int nb_cols);
1397 void fill_entry_with_text(int row_idx,
1398 int col_idx, const char *text);
1399 void fill_entry_with_text(int row_idx,
1400 int col_idx, std::string &text);
1401 void set_entry_lint(int row_idx,
1402 int col_idx, long int val);
1403 void fill_column_with_text(int col_idx, const char **text,
1404 const char *heading);
1405 void fill_column_with_int(int col_idx, int *data,
1406 const char *heading);
1407 void fill_column_with_lint(int col_idx,
1408 long int *data, const char *heading);
1409 void fill_column_with_row_index(int col_idx,
1410 const char *heading);
1411 void add_token(const char *label);
1412 void save(std::string &fname, int verbose_level);
1413 void read_spreadsheet(std::string &fname, int verbose_level);
1414 void print_table(std::ostream &ost, int f_enclose_in_parentheses);
1415 void print_table_latex_all_columns(std::ostream &ost,
1416 int f_enclose_in_parentheses);
1417 void print_table_latex(std::ostream &ost,
1418 int *f_column_select,
1419 int f_enclose_in_parentheses,
1420 int nb_lines_per_table);
1421 void print_table_row(int row, int f_enclose_in_parentheses,
1422 std::ostream &ost);
1423 void print_table_row_latex(int row, int *f_column_select,
1424 int f_enclose_in_parentheses, std::ostream &ost);
1425 void print_table_row_detailed(int row, std::ostream &ost);
1427 int f_enclose_in_parentheses,
1428 int *Col_selection, int nb_cols_selected, std::ostream &ost);
1429 void print_table_with_row_selection(int *f_selected,
1430 std::ostream &ost);
1431 void print_table_sorted(std::ostream &ost, const char *sort_by);
1432 void add_column_with_constant_value(const char *label, char *value);
1433 void add_column_with_int(const char *label, int *Value);
1434 void add_column_with_text(const char *label, char **Value);
1435 void reallocate_table();
1437 int find_column(std::string &column_label);
1438 int find_by_column(const char *join_by);
1439 void tokenize(std::string &fname,
1440 char **&tokens, int &nb_tokens, int verbose_level);
1441 void remove_quotes(int verbose_level);
1442 void remove_rows(const char *drop_column, const char *drop_label,
1443 int verbose_level);
1444 void remove_rows_where_field_is_empty(const char *drop_column,
1445 int verbose_level);
1446 void find_rows(int verbose_level);
1447 void get_value_double_or_NA(int i, int j, double &val, int &f_NA);
1448 //void get_string_entry(std::string &entry, int i, int j);
1449 void get_string(std::string &str, int i, int j);
1450 long int get_int(int i, int j);
1451 double get_double(int i, int j);
1452 void join_with(spreadsheet *S2, int by1, int by2,
1453 int verbose_level);
1454 void patch_with(spreadsheet *S2, char *join_by);
1455
1456
1457};
1458
1459
1460// #############################################################################
1461// string_tools.cpp
1462// #############################################################################
1463
1465
1466
1468
1469public:
1470
1471 string_tools();
1472 ~string_tools();
1473 int is_csv_file(const char *fname);
1474 int is_inc_file(const char *fname);
1475 int is_xml_file(const char *fname);
1476 int s_scan_int(char **s, int *i);
1477 int s_scan_lint(char **s, long int *i);
1478 int s_scan_double(char **s, double *d);
1479 int s_scan_token(char **s, char *str);
1480 int s_scan_token_arbitrary(char **s, char *str);
1481 int s_scan_str(char **s, char *str);
1482 int s_scan_token_comma_separated(const char **s, char *str);
1483 void scan_permutation_from_string(const char *s,
1484 int *&perm, int &degree, int verbose_level);
1485 void scan_permutation_from_stream(std::istream & is,
1486 int *&perm, int &degree, int verbose_level);
1487 void chop_string(const char *str, int &argc, char **&argv);
1488 void chop_string_comma_separated(const char *str, int &argc, char **&argv);
1489 void convert_arguments(int &argc, const char **argv, std::string *&Argv);
1490 char get_character(std::istream & is, int verbose_level);
1491 void replace_extension_with(char *p, const char *new_ext);
1492 void replace_extension_with(std::string &p, const char *new_ext);
1493 void chop_off_extension(char *p);
1494 void chop_off_extension_and_path(std::string &p);
1495 void chop_off_extension(std::string &p);
1496 void chop_off_path(std::string &p);
1497 void chop_off_extension_if_present(std::string &p, const char *ext);
1498 void chop_off_extension_if_present(char *p, const char *ext);
1499 void get_fname_base(const char *p, char *fname_base);
1500 void get_extension(std::string &p, std::string &ext);
1501 void get_extension_if_present(const char *p, char *ext);
1502 void get_extension_if_present_and_chop_off(char *p, char *ext);
1503 void string_fix_escape_characters(std::string &str);
1504 void remove_specific_character(std::string &str, char c);
1505 void create_comma_separated_list(std::string &output, long int *input, int input_sz);
1506 int is_all_whitespace(const char *str);
1507 void text_to_three_double(std::string &text, double *d);
1508 int strcmp_with_or_without(char *p, char *q);
1509 int starts_with_a_number(std::string &str);
1510 int stringcmp(std::string &str, const char *p);
1511 int strtoi(std::string &str);
1512 int str2int(std::string &str);
1513 long int strtolint(std::string &str);
1514 double strtof(std::string &str);
1515
1516
1517};
1518
1519int string_tools_compare_strings(void *a, void *b, void *data);
1520
1521
1522// #############################################################################
1523// tally.cpp
1524// #############################################################################
1525
1526
1528
1529
1530
1531class tally {
1532
1533public:
1534
1536
1538 int *data;
1541 // computed using int_vec_sorting_permutation
1543 // perm_inv[i] is the index in data
1544 // of the element in data_sorted[i]
1548
1556
1557 tally();
1558 ~tally();
1559 void init(int *data, int data_length,
1560 int f_second, int verbose_level);
1561 void init_lint(long int *data, int data_length,
1562 int f_second, int verbose_level);
1563 void sort_and_classify();
1565 int class_of(int pt_idx);
1566 void print(int f_backwards);
1567 void print_no_lf(int f_backwards);
1568 void print_tex_no_lf(int f_backwards);
1569 void print_first(int f_backwards);
1570 void print_second(int f_backwards);
1571 void print_first_tex(int f_backwards);
1572 void print_second_tex(int f_backwards);
1573 void print_file(std::ostream &ost, int f_backwards);
1574 void print_file_tex(std::ostream &ost, int f_backwards);
1575 void print_file_tex_we_are_in_math_mode(std::ostream &ost, int f_backwards);
1576 void print_naked_stringstream(std::stringstream &sstr, int f_backwards);
1577 void print_naked(int f_backwards);
1578 void print_naked_tex(std::ostream &ost, int f_backwards);
1579 void print_types_naked_tex(std::ostream &ost, int f_backwards,
1580 int *the_vec_sorted,
1581 int nb_types, int *type_first, int *type_len);
1582 void print_array_tex(std::ostream &ost, int f_backwards);
1583 double average();
1585 void get_data_by_multiplicity(int *&Pts, int &nb_pts,
1586 int multiplicity, int verbose_level);
1588 long int *&Pts, int &nb_pts, int multiplicity, int verbose_level);
1589 int determine_class_by_value(int value);
1590 int get_value_of_class(int class_idx);
1591 int get_largest_value();
1592 void get_class_by_value(int *&Pts, int &nb_pts, int value,
1593 int verbose_level);
1595 long int *&Pts, int &nb_pts, int value, int verbose_level);
1597 int &nb_types, int verbose_level);
1598 void save_classes_individually(std::string &fname);
1599};
1600
1601
1602// #############################################################################
1603// tally_vector_data.cpp
1604// #############################################################################
1605
1606
1608
1609
1610
1612
1613public:
1614
1617
1618 int *data; // [data_length * data_set_sz]
1619
1620 int *rep_idx; // [data_length], rep_idx[i] is the index into Rep of data[i * data_set_sz]
1621 int *Reps; // [data_length * data_set_sz], used [nb_types * data_set_sz]
1622 int *Frequency; // [data_length], used [nb_types]
1624 // computed using int_vec_sorting_permutation
1626 // perm_inv[i] is the index in data
1627 // of the element in data_sorted[i]
1628
1629
1630 std::multimap<uint32_t, int> Hashing;
1631 // we store the pair (hash, idx)
1632 // where hash is the hash value of the set and idx is the
1633 // index in the table Sets where the set is stored.
1634 //
1635 // we use a multimap because the hash values are not unique
1636 // it happens that two sets have the same hash value.
1637 // map cannot handle that.
1638
1641 //int *type_len; same as Frequency[]
1642
1643 int **Reps_in_lex_order; // [nb_types]
1644 int *Frequency_in_lex_order; // [nb_types]
1645
1646
1649 void init(int *data, int data_length, int data_set_sz,
1650 int verbose_level);
1651 int hash_and_find(int *data,
1652 int &idx, uint32_t &h, int verbose_level);
1653 void print();
1654 void save_classes_individually(std::string &fname, int verbose_level);
1655 void get_transversal(
1656 int *&transversal, int *&frequency, int &nb_types, int verbose_level);
1657 void print_classes_bigger_than_one(int verbose_level);
1658
1659};
1660
1661
1662
1663
1664// #############################################################################
1665// vector_builder_description.cpp
1666// #############################################################################
1667
1668
1669
1671
1672
1674public:
1675
1677 std::string field_label;
1678
1680 std::string dense_text;
1681
1683 std::string compact_text;
1684
1686 std::string repeat_text;
1688
1691
1693 std::string file_name;
1694
1697 std::string sparse_pairs;
1698
1700 std::vector<std::string> concatenate_list;
1701
1706
1709 int read_arguments(
1710 int argc, std::string *argv,
1711 int verbose_level);
1712 void print();
1713};
1714
1715
1716
1717// #############################################################################
1718// vector_builder.cpp
1719// #############################################################################
1720
1721
1722
1724
1725
1727public:
1728
1730
1732
1733 int *v;
1734 int len;
1735
1737 int k;
1738
1742};
1743
1744
1745
1746// #############################################################################
1747// vector_hashing.cpp
1748// #############################################################################
1749
1751
1752
1754
1755public:
1757 int N;
1760 int *H;
1762 int *perm;
1768
1769
1772 void allocate(int data_size, int N, int bit_length);
1773 void compute_tables(int verbose_level);
1774 void print();
1775 int rank(int *data);
1776 void unrank(int rk, int *data);
1777};
1778
1779}}}
1780
1781
1782
1783#endif /* ORBITER_SRC_LIB_FOUNDATIONS_DATA_STRUCTURES_DATA_STRUCTURES_H_ */
1784
1785
1786
uint32_t SuperFastHash(const char *data, int len)
Definition: algorithms.cpp:242
int hashing_fixed_width(int hash0, int a, int bit_length)
Definition: algorithms.cpp:58
void uchar_print_bitwise(std::ostream &ost, uchar u)
Definition: algorithms.cpp:82
uint32_t root_of_tree_uint32_t(uint32_t *S, uint32_t i)
Definition: algorithms.cpp:156
void print_pointer_hex(std::ostream &ost, void *p)
Definition: algorithms.cpp:116
void print_repeated_character(std::ostream &ost, char c, int n)
Definition: algorithms.cpp:147
void print_hex_digit(std::ostream &ost, int digit)
Definition: algorithms.cpp:133
void solve_diophant(int *Inc, int nb_rows, int nb_cols, int nb_needed, int f_has_Rhs, int *Rhs, long int *&Solutions, int &nb_sol, long int &nb_backtrack, int &dt, int f_DLX, int verbose_level)
Definition: algorithms.cpp:164
matrices over GF(2) stored as bitvectors
void init(int m, int n, int verbose_level)
Definition: bitmatrix.cpp:35
void unrank_PG_elements_in_columns_consecutively(field_theory::finite_field *F, long int start_value, int verbose_level)
Definition: bitmatrix.cpp:60
void mult_int_matrix_from_the_left(int *A, int Am, int An, bitmatrix *Out, int verbose_level)
Definition: bitmatrix.cpp:221
void rank_PG_elements_in_columns(field_theory::finite_field *F, int *perms, unsigned int *PG_ranks, int verbose_level)
Definition: bitmatrix.cpp:93
compact storage of 0/1-data as bitvectors
classification of 0/1 matrices using canonical forms
void add_at_idx(uchar *data, void *extra_data, int idx, int verbose_level)
void search_and_add_if_new(uchar *data, void *extra_data, int &f_found, int &idx, int verbose_level)
void save(std::string &prefix, void(*encode_function)(void *extra_data, long int *&encoding, int &encoding_sz, void *global_data), void(*get_group_order_or_NULL)(void *extra_data, ring_theory::longinteger_object &go, void *global_data), void *global_data, int verbose_level)
void add_object(geometry::object_with_canonical_form *OwCF, int &f_new_object, int verbose_level)
void orderly_test(geometry::object_with_canonical_form *OwCF, int &f_accept, int verbose_level)
void find_object(geometry::object_with_canonical_form *OwCF, int &f_found, int &idx, nauty_output *&NO, bitvector *&Canonical_form, int verbose_level)
to read data files from the poset classification algorithm
void read_candidates(std::string &candidates_fname, int verbose_level)
Definition: data_file.cpp:98
void read(std::string &fname, int f_casenumbers, int verbose_level)
Definition: data_file.cpp:74
describes one element in an input stream of combinatorial objects
void init_file_of_designs(std::string &a, int N_points, int b, int k, int partition_class_size)
void init_from_parallel_search(std::string &fname_mask, int nb_cases, std::string &cases_fname)
description of input data for classification of geometric objects from the command line
std::vector< data_input_stream_description_element > Input
input data for classification of geometric objects from the command line
void init(data_input_stream_description *Descr, int verbose_level)
a catch-all container class for everything related to data structures
void init_with_set(int n, int k, int *subset, int verbose_level)
Definition: fancy_set.cpp:64
void save(std::string &fname, int verbose_level)
Definition: fancy_set.cpp:306
void take_away(int *v, int &len, int *take_away, int nb_take_away)
Definition: int_vec.cpp:90
void init5(int *v, int a0, int a1, int a2, int a3, int a4)
Definition: int_vec.cpp:264
void print_dense(std::ostream &ost, int *v, int len)
Definition: int_vec.cpp:544
void add3(int *v1, int *v2, int *v3, int *w, int len)
Definition: int_vec.cpp:39
void matrix_make_block_matrix_2x2(int *Mtx, int k, int *A, int *B, int *C, int *D)
Definition: int_vec.cpp:885
void apply(int *from, int *through, int *to, int len)
Definition: int_vec.cpp:48
void print_classified_str(std::stringstream &sstr, int *v, int len, int f_backwards)
Definition: int_vec.cpp:598
void delete_element_assume_sorted(int *v, int &len, int a)
Definition: int_vec.cpp:200
void distribution_print(std::ostream &ost, int *val, int *mult, int len)
Definition: int_vec.cpp:1021
void print_integer_matrix_in_C_source(std::ostream &ost, int *p, int m, int n)
Definition: int_vec.cpp:868
void add(int *v1, int *v2, int *w, int len)
Definition: int_vec.cpp:30
int is_constant_on_subset(int *v, int *subset, int sz, int &value)
Definition: int_vec.cpp:67
void print_integer_matrix(std::ostream &ost, int *p, int m, int n)
Definition: int_vec.cpp:839
void matrix_print_ost(std::ostream &ost, int *p, int m, int n)
void print_integer_matrix_width(std::ostream &ost, int *p, int m, int n, int dim_n, int w)
Definition: int_vec.cpp:852
void create_string_with_quotes(std::string &str, int *v, int len)
Definition: int_vec.cpp:1088
void print_fully(std::ostream &ost, std::vector< int > &v)
Definition: int_vec.cpp:513
int vec_max_log_of_entries(std::vector< std::vector< int > > &p)
Definition: int_vec.cpp:328
void transpose(int *M, int m, int n, int *Mt)
Definition: int_vec.cpp:1104
void set_print(std::ostream &ost, int *v, int len)
Definition: int_vec.cpp:1043
void distribution(int *v, int len_v, int *&val, int *&mult, int &len)
Definition: int_vec.cpp:387
void matrix_delete_column_in_place(int *Mtx, int k, int n, int pivot)
Definition: int_vec.cpp:916
void print_to_str_naked(char *str, int *data, int len)
Definition: int_vec.cpp:815
void distribution_compute_and_print(std::ostream &ost, int *v, int v_len)
Definition: int_vec.cpp:374
void vec_print(std::vector< std::vector< int > > &p)
Definition: int_vec.cpp:351
void print_to_str(char *str, int *data, int len)
Definition: int_vec.cpp:799
void print_Cpp(std::ostream &ost, int *v, int len)
Definition: int_vec.cpp:556
void copy(int *from, int *to, long int len)
Definition: int_vec.cpp:167
void print_str(std::stringstream &ost, int *v, int len)
Definition: int_vec.cpp:467
void scan_from_stream(std::istream &is, int *&v, int &len)
Definition: int_vec.cpp:643
void integer_vec_print(std::ostream &ost, int *v, int len)
Definition: int_vec.cpp:1058
void copy_to_lint(int *from, long int *to, long int len)
Definition: int_vec.cpp:177
void print_str_naked(std::stringstream &ost, int *v, int len)
Definition: int_vec.cpp:481
void print(std::ostream &ost, std::vector< int > &v)
Definition: int_vec.cpp:413
void apply_lint(int *from, long int *through, long int *to, int len)
Definition: int_vec.cpp:57
void print_as_table(std::ostream &ost, int *v, int len, int width)
Definition: int_vec.cpp:497
int hash(int *v, int len, int bit_length)
Definition: int_vec.cpp:1074
void swap(int *v1, int *v2, long int len)
Definition: int_vec.cpp:188
void print_GAP(std::ostream &ost, int *v, int len)
Definition: int_vec.cpp:575
void scan(std::string &s, int *&v, int &len)
Definition: int_vec.cpp:608
void write_to_csv_file(std::string &fname, const char *label)
Definition: int_vector.cpp:219
void copy_to_int(long int *from, int *to, long int len)
Definition: lint_vec.cpp:90
void matrix_print_width(std::ostream &ost, long int *p, int m, int n, int dim_n, int w)
Definition: lint_vec.cpp:159
void print_to_str(char *str, long int *data, int len)
Definition: lint_vec.cpp:502
void complement(long int *v, long int *w, int n, int k)
Definition: lint_vec.cpp:101
void scan(std::string &s, long int *&v, int &len)
Definition: lint_vec.cpp:359
void apply(long int *from, long int *through, long int *to, int len)
Definition: lint_vec.cpp:32
void print_bare_fully(std::ostream &ost, long int *v, int len)
Definition: lint_vec.cpp:315
void take_away(long int *v, int &len, long int *take_away, int nb_take_away)
Definition: lint_vec.cpp:41
int matrix_max_log_of_entries(long int *p, int m, int n)
Definition: lint_vec.cpp:176
void print_as_table(std::ostream &ost, long int *v, int len, int width)
Definition: lint_vec.cpp:299
void copy(long int *from, long int *to, long int len)
Definition: lint_vec.cpp:80
void scan_from_stream(std::istream &is, long int *&v, int &len)
Definition: lint_vec.cpp:372
void create_string_with_quotes(std::string &str, long int *v, int len)
Definition: lint_vec.cpp:533
void print_to_str_naked(char *str, long int *data, int len)
Definition: lint_vec.cpp:518
void print(std::ostream &ost, long int *v, int len)
Definition: lint_vec.cpp:246
void matrix_print(long int *p, int m, int n)
Definition: lint_vec.cpp:203
void print_fully(std::ostream &ost, long int *v, int len)
Definition: lint_vec.cpp:329
int belong_to_the_same_orbit(int a, int b, int verbose_level)
bulk storage of group elements in compressed form
void(* elt_print)(void *p, void *data, std::ostream &ost)
void init(int entry_size, int page_length_log, int verbose_level)
void add_elt_print_function(void(*elt_print)(void *p, void *data, std::ostream &ost), void *elt_print_data)
uchar * s_i_and_allocation_bit(long int i, int &f_allocated)
data structure for set partitions following Jeffrey Leon
void get_row_and_col_classes(int *row_classes, int &nb_row_classes, int *col_classes, int &nb_col_classes, int verbose_level)
void print_column_refinement_info(int ht0, int *data, int depth)
void get_column_classes(set_of_sets *&Sos, int verbose_level)
void print_decomposition_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes)
void allocate_and_get_decomposition(int *&row_classes, int *&row_class_inv, int &nb_row_classes, int *&col_classes, int *&col_class_inv, int &nb_col_classes, int verbose_level)
void split_multiple_cells(int *set, int set_size, int f_front, int verbose_level)
void print_tactical_decomposition_scheme_tex_internal(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int *col_scheme, int f_print_subscripts)
void get_cell(int i, int *&cell, int &cell_sz, int verbose_level)
void get_row_and_col_permutation(int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_perm, int *row_perm_inv, int *col_perm, int *col_perm_inv)
int is_descendant_of(int cell, int ancestor_cell, int verbose_level)
void split_cell_front_or_back(int *set, int set_size, int f_front, int verbose_level)
void split_line_cell_front_or_back(int *set, int set_size, int f_front, int verbose_level)
void print_row_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int f_print_subscripts)
void print_tactical_decomposition_scheme_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *row_scheme, int *col_scheme, int f_print_subscripts)
void get_cell_lint(int i, long int *&cell, int &cell_sz, int verbose_level)
void print_non_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int f_print_subscripts)
void radix_sort(int left, int right, int *C, int length, int radix, int verbose_level)
int is_subset_of_cell(int *set, int size, int &cell_idx)
void split_by_orbit_partition(int nb_orbits, int *orbit_first, int *orbit_len, int *orbit, int offset, int verbose_level)
void radix_sort_bits(int left, int right, int *C, int length, int radix, int mask, int verbose_level)
void print_column_tactical_decomposition_scheme_tex(std::ostream &ost, int f_enter_math_mode, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *col_scheme, int f_print_subscripts)
int hash_column_refinement_info(int ht0, int *data, int depth, int hash0)
void write_cell_to_file(int i, std::string &fname, int verbose_level)
void swap_ij(int *perm, int *perm_inv, int i, int j)
int hash_row_refinement_info(int ht0, int *data, int depth, int hash0)
void allocate_with_two_classes(int n, int v, int b, int verbose_level)
void get_row_classes(set_of_sets *&Sos, int verbose_level)
void initial_matrix_decomposition(int nbrows, int nbcols, int *V, int nb_V, int *B, int nb_B, int verbose_level)
int is_descendant_of_at_level(int cell, int ancestor_cell, int level, int verbose_level)
void refine_arbitrary_set_lint(int size, long int *set, int verbose_level)
void write_cell_to_file_points_or_lines(int i, std::string &fname, int verbose_level)
void print_decomposition_scheme_tex(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *scheme)
void refine_arbitrary_set(int size, int *set, int verbose_level)
void print_decomposition_scheme(std::ostream &ost, int *row_classes, int nb_row_classes, int *col_classes, int nb_col_classes, int *scheme, int marker1, int marker2)
to define a set of integers for class set_builder
int read_arguments(int argc, std::string *argv, int verbose_level)
to create a set of integers from class set_builder_description
void init(set_builder_description *Descr, int verbose_level)
Definition: set_builder.cpp:37
void init(long int underlying_set_size, int nb_sets, long int **Pts, int *Sz, int verbose_level)
void init_simple(long int underlying_set_size, int nb_sets, int verbose_level)
void init_basic(long int underlying_set_size, int nb_sets, int *Sz, int verbose_level)
void init_set(int idx_of_set, long int *set, int sz, int verbose_level)
void init_decomposition(geometry::decomposition *&D, int verbose_level)
void evaluate_function_and_store(data_structures::set_of_sets *&Function_values, int(*evaluate_function)(int a, int i, int j, void *evaluate_data, int verbose_level), void *evaluate_data, int verbose_level)
void init_from_file(int &underlying_set_size, std::string &fname, int verbose_level)
void init_from_csv_file(int underlying_set_size, std::string &fname, int verbose_level)
void save_constant_size_csv(std::string &fname, int verbose_level)
void compute_orbits(int &nb_orbits, int *&orbit, int *&orbit_inv, int *&orbit_first, int *&orbit_len, void(*compute_image_function)(set_of_sets *S, void *compute_image_data, int elt_idx, int gen_idx, int &idx_of_image, int verbose_level), void *compute_image_data, int nb_gens, int verbose_level)
void init_basic_with_Sz_in_int(int underlying_set_size, int nb_sets, int *Sz, int verbose_level)
void compute_and_print_tdo_col_scheme(std::ostream &file, int verbose_level)
void init_set(int idx_of_set, int *set, int sz, int verbose_level)
void init_basic_constant_size(int underlying_set_size, int nb_sets, int constant_size, int verbose_level)
void init_cycle_structure(int *perm, int n, int verbose_level)
void compute_and_print_tdo_row_scheme(std::ostream &file, int verbose_level)
void compute_incidence_matrix(int *&Inc, int &m, int &n, int verbose_level)
void init_with_Sz_in_int(int underlying_set_size, int nb_sets, long int **Pts, int *Sz, int verbose_level)
void intersection_matrix(int *&intersection_type, int &highest_intersection_number, int *&intersection_matrix, int &nb_big_sets, int verbose_level)
void get_eckardt_points(int *&E, int &nb_E, int verbose_level)
int find_common_element_in_two_sets(int idx1, int idx2, int &common_elt)
void init(int underlying_set_size, int nb_sets, long int **Pts, long int *Sz, int verbose_level)
void extract_largest_sets(set_of_sets &S, int *&Idx, int verbose_level)
void print_table_latex_simple_with_selection(std::ostream &ost, int *Selection, int nb_sel)
void init_from_adjacency_matrix(int n, int *Adj, int verbose_level)
Definition: set_of_sets.cpp:87
void compute_tdo_decomposition(geometry::decomposition &D, int verbose_level)
void remove_sets_of_given_size(int k, set_of_sets &S, int *&Idx, int verbose_level)
void dualize(set_of_sets *&S, int verbose_level)
void save_csv(std::string &fname, int f_make_heading, int verbose_level)
void pairwise_intersection_matrix(int *&M, int verbose_level)
void all_triple_intersections(set_of_sets *&Intersections, int verbose_level)
void init_from_orbiter_file(int underlying_set_size, std::string &fname, int verbose_level)
void init_basic(int underlying_set_size, int nb_sets, long int *Sz, int verbose_level)
void all_pairwise_intersections(set_of_sets *&Intersections, int verbose_level)
void init_simple(int underlying_set_size, int nb_sets, int verbose_level)
Definition: set_of_sets.cpp:67
a collection of functions related to sorted vectors
int int_vec_search_first_occurence(int *v, int len, int a, int &idx, int verbose_level)
Definition: sorting.cpp:1314
void int_vec_values_and_multiplicities(int *v, int l, int *&val, int *&mult, int &nb_values)
Definition: sorting.cpp:1483
int int_vec_compare_stride(int *p, int *q, int len, int stride)
Definition: sorting.cpp:2891
void lint_vec_search_vec_linear(long int *v, int len, long int *A, int A_sz, long int *Idx)
Definition: sorting.cpp:88
void lint_vec_quicksort_increasingly(long int *v, int len)
Definition: sorting.cpp:918
int int_vec_search(int *v, int len, int a, int &idx)
Definition: sorting.cpp:1094
void heapsort_sift_down_with_log(int *v, int *w, int start, int end)
Definition: sorting.cpp:2111
void Heapsort_general_sift_down_with_log(void *data, int *w, int start, int end, int(*compare_func)(void *data, int i, int j, void *extra_data), void(*swap_func)(void *data, int i, int j, void *extra_data), void *extra_data)
Definition: sorting.cpp:2220
int lint_vec_search_linear(long int *v, int len, long int a, int &idx)
Definition: sorting.cpp:699
void lint_vec_intersect_sorted_vectors(long int *v1, int len1, long int *v2, int len2, long int *v3, int &len3)
Definition: sorting.cpp:800
void heapsort_sift_down(int *v, int start, int end)
Definition: sorting.cpp:2071
int vec_search_general(void *vec, int(*compare_func)(void *vec, void *a, int b, void *data_for_compare), void *data_for_compare, int len, void *a, int &idx, int verbose_level)
Definition: sorting.cpp:1005
void int_vec_intersect(int *v1, int len1, int *v2, int len2, int *&v3, int &len3)
Definition: sorting.cpp:712
int vector_lint_search(std::vector< long int > &v, long int a, int &idx, int verbose_level)
Definition: sorting.cpp:1235
void int_vec_sorting_permutation(int *v, int len, int *perm, int *perm_inv, int f_increasingly)
Definition: sorting.cpp:830
int test_if_sets_are_disjoint_assuming_sorted_lint(long int *set1, long int *set2, int sz1, int sz2)
Definition: sorting.cpp:2820
void sorted_vec_get_first_and_length(int *v, int len, int *class_first, int *class_len, int &nb_classes)
Definition: sorting.cpp:2904
int integer_vec_compare(int *p, int *q, int len)
Definition: sorting.cpp:2313
int test_if_set_with_return_value_lint(long int *set, int set_size)
Definition: sorting.cpp:586
void Heapsort_general_make_heap(void *data, int len, int(*compare_func)(void *data, int i, int j, void *extra_data), void(*swap_func)(void *data, int i, int j, void *extra_data), void *extra_data)
Definition: sorting.cpp:2043
int schreier_vector_determine_depth_recursion(int n, int *pts, int *prev, int f_use_pts_inv, int *pts_inv, int *depth, int *ancestor, int pos)
Definition: sorting.cpp:2369
int test_if_sets_are_disjoint(long int *set1, int sz1, long int *set2, int sz2)
Definition: sorting.cpp:519
int int_vec_sort_and_test_if_contained(int *v1, int len1, int *v2, int len2)
Definition: sorting.cpp:210
void int_vec_print_classified(std::ostream &ost, int *vec, int len)
Definition: sorting.cpp:1593
void Heapsort_sift_down(void *v, int start, int end, int entry_size_in_chars, int(*compare_func)(void *v1, void *v2))
Definition: sorting.cpp:2155
int lint_vec_compare(long int *p, long int *q, int len)
Definition: sorting.cpp:2326
void int_vec_search_vec(int *v, int len, int *A, int A_sz, int *Idx)
Definition: sorting.cpp:48
void int_vec_swap_points(int *list, int *list_inv, int idx1, int idx2)
Definition: sorting.cpp:152
int lint_vecs_find_common_element(long int *v1, int len1, long int *v2, int len2, int &idx1, int &idx2)
Definition: sorting.cpp:315
int lint_vec_sort_and_test_if_contained(long int *v1, int len1, long int *v2, int len2)
Definition: sorting.cpp:235
void int_vec_heapsort_with_log(int *v, int *w, int len)
Definition: sorting.cpp:1967
void rearrange_subset_lint(int n, int k, long int *set, int *subset, long int *rearranged_set, int verbose_level)
Definition: sorting.cpp:640
int int_vecs_find_common_element(int *v1, int len1, int *v2, int len2, int &idx1, int &idx2)
Definition: sorting.cpp:286
void int_vec_classify(int length, int *the_vec, int *&the_vec_sorted, int *&sorting_perm, int *&sorting_perm_inv, int &nb_types, int *&type_first, int *&type_len)
Definition: sorting.cpp:1503
void Heapsort_general_sift_down(void *data, int start, int end, int(*compare_func)(void *data, int i, int j, void *extra_data), void(*swap_func)(void *data, int i, int j, void *extra_data), void *extra_data)
Definition: sorting.cpp:2189
void int_vec_print_types_naked_tex_we_are_in_math_mode(std::ostream &ost, int f_backwards, int *the_vec_sorted, int nb_types, int *type_first, int *type_len)
Definition: sorting.cpp:1748
void Heapsort_general(void *data, int len, int(*compare_func)(void *data, int i, int j, void *extra_data), void(*swap_func)(void *data, int i, int j, void *extra_data), void *extra_data)
Definition: sorting.cpp:1806
int int_vecs_are_disjoint(int *v1, int len1, int *v2, int len2)
Definition: sorting.cpp:260
int test_if_set_with_return_value(int *set, int set_size)
Definition: sorting.cpp:564
void int_vec_classify_and_print(std::ostream &ost, int *v, int l)
Definition: sorting.cpp:1443
int uchar_vec_compare(uchar *p, uchar *q, int len)
Definition: sorting.cpp:2851
void int_vec_print_types_naked_stringstream(std::stringstream &sstr, int f_backwards, int *the_vec_sorted, int nb_types, int *type_first, int *type_len)
Definition: sorting.cpp:1638
void heapsort_make_heap_with_log(int *v, int *w, int len)
Definition: sorting.cpp:2013
void int_vec_classify_with_arrays(int length, int *the_vec, int *the_vec_sorted, int *sorting_perm, int *sorting_perm_inv, int &nb_types, int *type_first, int *type_len)
Definition: sorting.cpp:1527
void int_vec_quicksort(int *v, int(*compare_func)(int a, int b), int left, int right)
Definition: sorting.cpp:884
void int_vec_print_types(std::ostream &ost, int f_backwards, int *the_vec_sorted, int nb_types, int *type_first, int *type_len)
Definition: sorting.cpp:1628
void lint_vec_heapsort_with_log(long int *v, long int *w, int len)
Definition: sorting.cpp:1981
void d_quicksort(double *v, int left, int right)
Definition: sorting.cpp:2771
void Heapsort_general_with_log(void *data, int *w, int len, int(*compare_func)(void *data, int i, int j, void *extra_data), void(*swap_func)(void *data, int i, int j, void *extra_data), void *extra_data)
Definition: sorting.cpp:1827
int int_vec_is_subset_of(int *set, int sz, int *big_set, int big_set_sz)
Definition: sorting.cpp:102
void d_partition(double *v, int left, int right, int *middle)
Definition: sorting.cpp:2723
int int_vec_search_linear(int *v, int len, int a, int &idx)
Definition: sorting.cpp:686
void Heapsort(void *v, int len, int entry_size_in_chars, int(*compare_func)(void *v1, void *v2))
Definition: sorting.cpp:1790
int longinteger_vec_search(ring_theory::longinteger_object *v, int len, ring_theory::longinteger_object &a, int &idx)
Definition: sorting.cpp:1394
int int_vec_search_and_remove_if_found(int *v, int &len, int a)
Definition: sorting.cpp:1077
void quicksort_array(int len, void **v, int(*compare_func)(void *a, void *b, void *data), void *data)
Definition: sorting.cpp:929
void int_vec_append_and_reallocate_if_necessary(int *&vec, int &used_length, int &alloc_length, int a, int verbose_level)
Definition: sorting.cpp:398
void lint_vec_sort_and_remove_duplicates(long int *v, int &len)
Definition: sorting.cpp:195
void Heapsort_general_make_heap_with_log(void *data, int *w, int len, int(*compare_func)(void *data, int i, int j, void *extra_data), void(*swap_func)(void *data, int i, int j, void *extra_data), void *extra_data)
Definition: sorting.cpp:2057
void int_vec_search_vec_linear(int *v, int len, int *A, int A_sz, int *Idx)
Definition: sorting.cpp:75
void vec_intersect(long int *v1, int len1, long int *v2, int len2, long int *&v3, int &len3)
Definition: sorting.cpp:741
void rearrange_subset_lint_all(int n, int k, long int *set, long int *subset, long int *rearranged_set, int verbose_level)
Definition: sorting.cpp:663
void int_vec_multiplicities(int *v, int l, int *&w, int &w_len)
Definition: sorting.cpp:1468
void lint_vec_quicksort(long int *v, int(*compare_func)(long int a, long int b), int left, int right)
Definition: sorting.cpp:896
void schreier_vector_compute_depth_and_ancestor(int n, int *pts, int *prev, int f_use_pts_inv, int *pts_inv, int *&depth, int *&ancestor, int verbose_level)
Definition: sorting.cpp:2339
void quicksort_array_with_perm(int len, void **v, int *perm, int(*compare_func)(void *a, void *b, void *data), void *data)
Definition: sorting.cpp:937
void int_vec_values(int *v, int l, int *&w, int &w_len)
Definition: sorting.cpp:1452
int vec_search(void **v, int(*compare_func)(void *a, void *b, void *data), void *data_for_compare, int len, void *a, int &idx, int verbose_level)
Definition: sorting.cpp:945
void lint_heapsort_swap(long int *v, int i, int j)
Definition: sorting.cpp:2263
void lint_vec_search_vec(long int *v, int len, long int *A, int A_sz, long int *Idx)
Definition: sorting.cpp:61
int lint_vec_search(long int *v, int len, long int a, int &idx, int verbose_level)
Definition: sorting.cpp:1157
void find_points_by_multiplicity(int *data, int data_sz, int multiplicity, int *&pts, int &nb_pts)
Definition: sorting.cpp:2288
void Heapsort_swap(void *v, int i, int j, int entry_size_in_chars)
Definition: sorting.cpp:2272
int test_if_sets_are_equal(int *set1, int *set2, int set_size)
Definition: sorting.cpp:496
void lint_vec_quicksort_decreasingly(long int *v, int len)
Definition: sorting.cpp:923
int search_general(void *data, int len, void *search_object, int &idx, int(*compare_func)(void *data, int i, void *search_object, void *extra_data), void *extra_data, int verbose_level)
Definition: sorting.cpp:1852
int test_if_sets_are_disjoint_assuming_sorted(int *set1, int *set2, int sz1, int sz2)
Definition: sorting.cpp:2790
void lint_heapsort_sift_down(long int *v, int start, int end)
Definition: sorting.cpp:2091
int int_vec_search_and_insert_if_necessary(int *v, int &len, int a)
Definition: sorting.cpp:1060
int test_if_sets_are_disjoint_not_assuming_sorted(long int *v, long int *w, int len)
Definition: sorting.cpp:2864
void rearrange_subset(int n, int k, int *set, int *subset, int *rearranged_set, int verbose_level)
Definition: sorting.cpp:608
void int_vec_intersect_sorted_vectors(int *v1, int len1, int *v2, int len2, int *v3, int &len3)
Definition: sorting.cpp:771
void int_vec_print_types_naked_tex(std::ostream &ost, int f_backwards, int *the_vec_sorted, int nb_types, int *type_first, int *type_len)
Definition: sorting.cpp:1706
void lint_heapsort_make_heap_with_log(long int *v, long int *w, int len)
Definition: sorting.cpp:2022
void schreier_vector_tree(int n, int *pts, int *prev, int f_use_pts_inv, int *pts_inv, std::string &fname_base, graphics::layered_graph_draw_options *LG_Draw_options, graph_theory::layered_graph *&LG, int verbose_level)
Definition: sorting.cpp:2428
int compare_sets_lint(long int *set1, long int *set2, int sz1, int sz2)
Definition: sorting.cpp:2660
void int_vec_insert_and_reallocate_if_necessary(int *&vec, int &used_length, int &alloc_length, int a, int verbose_level)
Definition: sorting.cpp:344
void lint_vec_append_and_reallocate_if_necessary(long int *&vec, int &used_length, int &alloc_length, long int a, int verbose_level)
Definition: sorting.cpp:441
int compare_sets(int *set1, int *set2, int sz1, int sz2)
Definition: sorting.cpp:2617
void lint_heapsort_sift_down_with_log(long int *v, long int *w, int start, int end)
Definition: sorting.cpp:2133
int lint_vec_is_subset_of(int *set, int sz, long int *big_set, int big_set_sz, int verbose_level)
Definition: sorting.cpp:125
void int_vec_print_types_naked(std::ostream &ost, int f_backwards, int *the_vec_sorted, int nb_types, int *type_first, int *type_len)
Definition: sorting.cpp:1672
void int_vec_sorted_collect_types(int length, int *the_vec_sorted, int &nb_types, int *type_first, int *type_len)
Definition: sorting.cpp:1566
void Heapsort_make_heap(void *v, int len, int entry_size_in_chars, int(*compare_func)(void *v1, void *v2))
Definition: sorting.cpp:2031
void print_table_row_detailed(int row, std::ostream &ost)
void read_spreadsheet(std::string &fname, int verbose_level)
void fill_column_with_text(int col_idx, const char **text, const char *heading)
void print_table_with_row_selection(int *f_selected, std::ostream &ost)
void init_int_matrix(int nb_rows, int nb_cols, int *A)
void join_with(spreadsheet *S2, int by1, int by2, int verbose_level)
void get_value_double_or_NA(int i, int j, double &val, int &f_NA)
void fill_column_with_row_index(int col_idx, const char *heading)
void print_table_row_latex(int row, int *f_column_select, int f_enclose_in_parentheses, std::ostream &ost)
void print_table_sorted(std::ostream &ost, const char *sort_by)
void tokenize(std::string &fname, char **&tokens, int &nb_tokens, int verbose_level)
void remove_rows(const char *drop_column, const char *drop_label, int verbose_level)
void fill_column_with_lint(int col_idx, long int *data, const char *heading)
void set_entry_lint(int row_idx, int col_idx, long int val)
void print_table_row(int row, int f_enclose_in_parentheses, std::ostream &ost)
void add_column_with_text(const char *label, char **Value)
void remove_rows_where_field_is_empty(const char *drop_column, int verbose_level)
void save(std::string &fname, int verbose_level)
void print_table_latex(std::ostream &ost, int *f_column_select, int f_enclose_in_parentheses, int nb_lines_per_table)
void print_table_latex_all_columns(std::ostream &ost, int f_enclose_in_parentheses)
void print_table_row_with_column_selection(int row, int f_enclose_in_parentheses, int *Col_selection, int nb_cols_selected, std::ostream &ost)
void add_column_with_constant_value(const char *label, char *value)
void init_set_of_sets(set_of_sets *S, int f_make_heading)
Definition: spreadsheet.cpp:59
void fill_column_with_int(int col_idx, int *data, const char *heading)
void fill_entry_with_text(int row_idx, int col_idx, const char *text)
void print_table(std::ostream &ost, int f_enclose_in_parentheses)
void add_column_with_int(const char *label, int *Value)
functions related to strings and character arrays
void get_fname_base(const char *p, char *fname_base)
void create_comma_separated_list(std::string &output, long int *input, int input_sz)
void scan_permutation_from_stream(std::istream &is, int *&perm, int &degree, int verbose_level)
void chop_string(const char *str, int &argc, char **&argv)
void scan_permutation_from_string(const char *s, int *&perm, int &degree, int verbose_level)
void get_extension(std::string &p, std::string &ext)
void chop_string_comma_separated(const char *str, int &argc, char **&argv)
void convert_arguments(int &argc, const char **argv, std::string *&Argv)
void replace_extension_with(char *p, const char *new_ext)
void chop_off_extension_if_present(std::string &p, const char *ext)
char get_character(std::istream &is, int verbose_level)
a statistical analysis of data consisting of vectors of ints
int hash_and_find(int *data, int &idx, uint32_t &h, int verbose_level)
void get_transversal(int *&transversal, int *&frequency, int &nb_types, int verbose_level)
void save_classes_individually(std::string &fname, int verbose_level)
void init(int *data, int data_length, int data_set_sz, int verbose_level)
a statistical analysis of data consisting of single integers
void print_file_tex(std::ostream &ost, int f_backwards)
Definition: tally.cpp:338
void init(int *data, int data_length, int f_second, int verbose_level)
Definition: tally.cpp:72
data_structures::set_of_sets * get_set_partition_and_types(int *&types, int &nb_types, int verbose_level)
Definition: tally.cpp:702
void save_classes_individually(std::string &fname)
Definition: tally.cpp:733
void print_file_tex_we_are_in_math_mode(std::ostream &ost, int f_backwards)
Definition: tally.cpp:358
void init_lint(long int *data, int data_length, int f_second, int verbose_level)
Definition: tally.cpp:123
void get_data_by_multiplicity_as_lint(long int *&Pts, int &nb_pts, int multiplicity, int verbose_level)
Definition: tally.cpp:585
void print_file(std::ostream &ost, int f_backwards)
Definition: tally.cpp:322
void print_naked_tex(std::ostream &ost, int f_backwards)
Definition: tally.cpp:413
void print_array_tex(std::ostream &ost, int f_backwards)
Definition: tally.cpp:471
void print_types_naked_tex(std::ostream &ost, int f_backwards, int *the_vec_sorted, int nb_types, int *type_first, int *type_len)
Definition: tally.cpp:427
void get_data_by_multiplicity(int *&Pts, int &nb_pts, int multiplicity, int verbose_level)
Definition: tally.cpp:557
void print_naked_stringstream(std::stringstream &sstr, int f_backwards)
Definition: tally.cpp:378
void get_class_by_value(int *&Pts, int &nb_pts, int value, int verbose_level)
Definition: tally.cpp:644
void get_class_by_value_lint(long int *&Pts, int &nb_pts, int value, int verbose_level)
Definition: tally.cpp:673
to create a vector of field elements from class vector_builder_description
void init(vector_builder_description *Descr, field_theory::finite_field *F, int verbose_level)
void allocate(int data_size, int N, int bit_length)
decomposition of an incidence matrix
Definition: geometry.h:400
a combinatorial object for which a canonical form can be computed using Nauty
Definition: geometry.h:1487
a data structure to store layered graphs or Hasse diagrams
Definition: graph_theory.h:654
options for drawing an object of type layered_graph
Definition: graphics.h:457
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
unsigned char uchar
Definition: foundations.h:204
int string_tools_compare_strings(void *a, void *b, void *data)
the orbiter library for the classification of combinatorial objects