Orbiter 2022
Combinatorial Objects
discreta.h
Go to the documentation of this file.
1// discreta.h
2//
3// Anton Betten
4//
5// started: 18.12.1998
6// modified: 23.03.2000
7// moved from D2 to ORBI Nov 15, 2007
8
9
10#ifndef ORBITER_SRC_LIB_DISCRETA_DISCRETA_H_
11#define ORBITER_SRC_LIB_DISCRETA_DISCRETA_H_
12
13
14
15#pragma once
16
17#include <iostream>
18#include <fstream>
19#include <sstream>
20
21#include <stdlib.h>
22#include <string.h>
23
24using namespace orbiter;
25using namespace orbiter::layer1_foundations;
26
27
28namespace orbiter {
29
31
32namespace layer2_discreta {
33
34
35
36
37
38
39#define BITS_OF_int 32
40#define SAVE_ASCII_USE_COMPRESS
41
42
43
44
45/*********************************** macros ********************************/
46
47#define NOT_EXISTING_FUNCTION(s) cout << "The function " << s << " does not exist in this class\n";
48
49/******************* Constants for type determination **********************/
50
51enum kind {
52 BASE = 0,
53 INTEGER = 1,
54 VECTOR = 2,
56 // RATIONAL /* BRUCH */ = 4,
58
59
60 // POLYNOM = 9,
61
62 MATRIX = 11,
63
64 // MONOM = 21,
66
67 //SUBGROUP_LATTICE = 36,
68 //SUBGROUP_ORBIT = 37,
69 MEMORY = 39,
70
71 HOLLERITH = 44,
72
73 DATABASE = 50,
74 BTREE = 51,
75
78
79 BT_KEY = 61,
80
82
83 //GROUP_SELECTION = 78, //!< GROUP_SELECTION
84 UNIPOLY = 79,
85
87 //SOLID = 84, //!< SOLID
88
89 BITMATRIX = 90,
90 //PC_PRESENTATION = 91,
91 //PC_SUBGROUP = 92,
92 //GROUP_WORD = 93,
93 //GROUP_TABLE = 94,
94 //ACTION = 95,
95 //GEOMETRY = 96 //!< GEOMETRY
96
97};
98
100 GFp = 1,
101 GFq = 2,
103 //PC_GROUP = 3
105
110
118
123
130
131
137
153
154
155
156
157/****************** declaration of classes and types ***********************/
158
159class discreta_base;
160
161
162
163// classes derived from base:
164
165class integer; // derived from base
166 // self contains the integer value as a C (long)integer (int)
167
168class longinteger; // derived from base
169 // self is a pointer to LONGINTEGER_REPRESENTATION
170 // which contains the sign, the length
171 // and a C array of chars containing
172 // the decimal representation of the signless longinteger value
173
174class discreta_matrix; // derived from base
175 // self is a pointer obtained from
176 // calloc_m_times_n_objects().
177 // this means that we have an array of m * n + 2 objacts,
178 // self points to the m * n array of user entries
179 // and at offset [-2] we have m (as an integer object),
180 // at offset [-1] we have n (as an integer object).
181 // matrix access (via s_ij or via operator[])
182 // is range checked.
183
184class Vector; // derived from base
185 // self is a pointer obtained from
186 // calloc_nobjects_plus_length().
187 // this means that we have an array of n + 1 objects,
188 // self points to the n array of user entries
189 // and at offset [-1] we have the length l (as an integer object),
190 // vector access (via s_i or via operator[])
191 // is range checked.
192
193class memory; // derived from base
194 // self is a pointer to char which has some additional
195 // information stored at offset -3, -2, -1 in int4s.
196 // these are alloc_length, used_length and cur_pointer.
197
198class hollerith; // derived from base
199// there are so many string classes around so that I call
200// my string class hollerith class!
201// n.b.: Herman Hollerith (Buffalo 1860 - Washington 1929),
202// American engineer; he invented
203// statistical machines working with perforated cards
204// In 1896, he founded the Tabulating Machine Corporation
205// which later became IBM.
206
207
208// classes derived from vector:
209
210 class permutation; // derived from vector
211 // a vector holding the images of the
212 // points 0, 1, ..., l-1 under the permutation.
213 // Note that the images are in 0, 1, ... , l-1 again!
214 // the length is already stored in the vector.
215
216 class number_partition; // derived from vector
217 // a vector of length 2:
218 // offset 0: the type (PARTITION_TYPE_VECTOR
219 // or PARTITION_TYPE_EXPONENT)
220 // offset 1: the self part holding the parts
221
222 class unipoly; // derived from vector
223 class bt_key; // derived from vector
224 class database; // derived from vector
225 class btree; // derived from vector
226 class design_parameter_source; // derived from vector
227 class design_parameter; // derived from vector
228
229
230// utility class, for the operator M[i][j] matrix access:
231
232class matrix_access;
233
234
235
236
237
238
239class domain;
240class with;
241class printing_mode;
242
243
244
245// in global.cpp:
246
247extern const char *discreta_home;
248extern const char *discreta_arch;
249
250
251/************************* Prototypes of global functions ******************/
252
253void discreta_init();
254discreta_base *callocobject(kind k);
255void freeobject(discreta_base *p);
256discreta_base *calloc_nobjects(int n, kind k);
257void free_nobjects(discreta_base *p, int n);
258discreta_base *calloc_nobjects_plus_length(int n, kind k);
259void free_nobjects_plus_length(discreta_base *p);
260discreta_base *calloc_m_times_n_objects(int m, int n, kind k);
261void free_m_times_n_objects(discreta_base *p);
262void printobjectkind(std::ostream& ost, kind k);
263const char *kind_ascii(kind k);
264const char *action_kind_ascii(action_kind k);
265//void int_swap(int& x, int& y);
266void uint4_swap(uint_4& x, uint_4& y);
267
268std::ostream& operator<<(std::ostream& ost, class discreta_base& p);
269// discreta_base operator * (discreta_base& x, discreta_base &y);
270// discreta_base operator + (discreta_base& x, discreta_base &y);
271
272int invert_mod_integer(int i, int p);
273int remainder_mod(int i, int n);
274void factor_integer(int n, Vector& primes, Vector& exponents);
275void discreta_print_factorization(Vector& primes, Vector& exponents, std::ostream &o);
276void print_factorization_hollerith(Vector& primes, Vector& exponents, hollerith &h);
277int nb_primes(int n);
278int factor_if_prime_power(int n, int *p, int *e);
279int Euler(int n);
280int Moebius(int i);
281int NormRemainder(int a, int m);
282int log2(int n);
283int sqrt_mod(int a, int p, int verbose_level);
284int sqrt_mod_involved(int a, int p, int verbose_level);
285void html_head(std::ostream& ost, char *title_long, char *title_short);
286void html_foot(std::ostream& ost);
287void sieve(Vector &primes, int factorbase, int verbose_level);
288void sieve_primes(Vector &v, int from, int to, int limit, int verbose_level);
290void stirling_second(int n, int k, int f_ordered, discreta_base &res, int verbose_level);
291void stirling_first(int n, int k, int f_signless, discreta_base &res, int verbose_level);
292void Catalan(int n, Vector &v, int verbose_level);
293void Catalan_n(int n, Vector &v, discreta_base &res, int verbose_level);
294void Catalan_nk_matrix(int n, discreta_matrix &Cnk, int verbose_level);
295void Catalan_nk_star_matrix(int n, discreta_matrix &Cnk, int verbose_level);
296void Catalan_nk_star(int n, int k, discreta_matrix &Cnk, discreta_base &res, int verbose_level);
297
298void N_choose_K(discreta_base & n, int k, discreta_base & res);
299void Binomial(int n, int k, discreta_base & n_choose_k);
300void Krawtchouk(int n, int q, int i, int j, discreta_base & a);
301// $\sum_{u=0}^{\min(i,j)} (-1)^u \cdot (q-1)^{i-u} \cdot {j \choose u} \cdot $
302// ${n - j \choose i - u}$
303//int ij2k(int i, int j, int n);
304//void k2ij(int k, int & i, int & j, int n);
305void tuple2_rank(int rank, int &i, int &j, int n, int f_injective);
306int tuple2_unrank(int i, int j, int n, int f_injective);
307void output_texable_string(std::ostream & ost, char *in);
308void texable_string(char *in, char *out);
309void the_first_n_primes(Vector &P, int n);
310void midpoint_of_2(int *Px, int *Py, int i1, int i2, int idx);
311void midpoint_of_5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int idx);
312void ratio_int(int *Px, int *Py, int idx_from, int idx_to, int idx_result, double r);
313
314void frobenius_in_PG(domain *dom, int n, permutation &p);
315// n is the projective dimension
316void frobenius_in_AG(domain *dom, int n, permutation &p);
317// n is the dimension
318void translation_in_AG(domain *dom, int n, int i, discreta_base & a, permutation &p);
320void call_system(char *cmd);
321void fill_char(void *v, int cnt, int c);
322int hash_int(int hash0, int a);
323void queue_init(Vector &Q, int elt);
325int queue_length(Vector &Q);
326void queue_append(Vector &Q, int elt);
327void print_classification_tex(Vector &content, Vector &multiplicities);
328void print_classification_tex(Vector &content, Vector &multiplicities, std::ostream& ost);
329void perm2permutation(int *a, int n, permutation &p);
330int Gauss_int(int *A, int f_special, int f_complete, int *base_cols,
331 int f_P, int *P, int m, int n, int Pn,
332 int q, int *add_table, int *mult_table,
333 int *negate_table, int *inv_table, int verbose_level);
334// returns the rank which is the number of entries in base_cols
335void uchar_move(uchar *p, uchar *q, int len);
336void int_vector_realloc(int *&p, int old_length, int new_length);
337void int_vector_shorten(int *&p, int new_length);
338void int_matrix_realloc(int *&p, int old_m, int new_m, int old_n, int new_n);
339int code_is_irreducible(int k, int nmk, int idx_zero, int *M);
340void fine_tune(layer1_foundations::field_theory::finite_field *F, int *mtxD, int verbose_level);
341
342
343/************************************* base ********************************/
344
345// internal representations:
346
348//typedef struct bitmatrix_representation BITMATRIX_REPRESENTATION;
349
351
352
353typedef union {
360} OBJECTSELF;
361
363
364
366 int sign;
367 int len;
368 char p[1];
369};
370
371
372
373// public class definitions:
374
375
377
378
379
380
382{
383 private:
384
385 public:
386
389
392 // copy constructor
394 // copy assignment
395 virtual ~discreta_base();
396 // destructor
398 void freeself();
399 void freeself_kind(kind k);
400 void clearself() { self.vector_pointer = NULL; }
401
402 integer& as_integer() { return *(integer *)this; }
403 longinteger& as_longinteger() { return *(longinteger *)this; }
404 Vector& as_vector() { return *(Vector *)this; }
405 permutation& as_permutation() { return *(permutation *)this; }
406
409 unipoly& as_unipoly() { return *(unipoly *)this; }
410 memory& as_memory() { return *(memory *)this; }
411 //action& as_action() { return *(action *)this; }
412 hollerith& as_hollerith() { return *(hollerith *)this; }
413 bt_key& as_bt_key() { return *(bt_key *)this; }
414 database& as_database() { return *(database *)this; }
415 btree& as_btree() { return *(btree *)this; }
418
433
434 void *operator new(size_t, void *p) { return p; }
435 void settype_base();
436
437 kind s_kind();
438 // select kind of object
439 virtual kind s_virtual_kind();
440 void c_kind(kind k);
441 // compute kind of object:
442 // changes the object kind to class k
443 // preserves the self part of the object
444 void swap(discreta_base &a);
445 void copyobject(discreta_base &x);
446 // this := x
447 virtual void copyobject_to(discreta_base &x);
448 // x := this
449
450 virtual std::ostream& print(std::ostream&);
451 // all kinds of printing, the current printing mode is determined
452 // by the global variable printing_mode
454 std::ostream& println(std::ostream&);
455 // print() and newline
456 std::ostream& printobjectkind(std::ostream&);
457 // prints the type of the object
458 std::ostream& printobjectkindln(std::ostream&);
459
460 int& s_i_i();
461 // select_as_integer_i
462 void m_i_i(int i);
463 // make_as_integer_i
464
465 virtual int compare_with(discreta_base &a);
466 // -1 iff this < a
467 // 0 iff this = a
468 // 1 iff this > a
469 int eq(discreta_base &a);
470 int neq(discreta_base &a);
471 int le(discreta_base &a);
472 int lt(discreta_base &a);
473 int ge(discreta_base &a);
474 int gt(discreta_base &a);
475 int is_even();
476 int is_odd();
477
478
479 // mathematical functions:
480
481 // multiplicative group:
482 void mult(discreta_base &x, discreta_base &y);
483 // this := x * y
485 virtual void mult_to(discreta_base &x, discreta_base &y);
486 // y := this * x
487 int invert();
488 // this := this^(-1)
489 // returns TRUE if the object was invertible,
490 // FALSE otherwise
492 virtual int invert_to(discreta_base &x);
493 void mult_apply(discreta_base &x);
494 // this := this * x
496 { mult_apply(y); return *this; }
497 discreta_base& power_int(int l);
498 // this := this^l, l >= 0
503 // this := x^{-1} * y^{-1} * x * y
505 // this := y^{-1} * x * y
508 int order();
509 int order_mod(discreta_base &p);
510
511
512 // additive group:
513 void add(discreta_base &x, discreta_base &y);
514 // this := x + y
516 virtual void add_to(discreta_base &x, discreta_base &y);
517 // y := this + x
518 void negate();
519 // this := -this;
520 virtual void negate_to(discreta_base &x);
521 // x := - this
522 void add_apply(discreta_base &x);
523 // this := this + x
525 { add_apply(y); return *this; }
526
527
528 virtual void normalize(discreta_base &p);
529 virtual void zero();
530 // this := 0
531 virtual void one();
532 // this := 1
533 virtual void m_one();
534 // this := -1
535 virtual void homo_z(int z);
536 // this := z
537 virtual void inc();
538 // this := this + 1
539 virtual void dec();
540 // this := this - 1
541 virtual int is_zero();
542 // TRUE iff this = 0
543 virtual int is_one();
544 // TRUE iff this = 1
545 virtual int is_m_one();
546 // TRUE iff this = -1
547 discreta_base& factorial(int z);
548 // this := z!
549 discreta_base& i_power_j(int i, int j);
550 // this := i^j
551
553 // -1 iff this < a
554 // 0 iff this = a
555 // 1 iff this > a
556 virtual void integral_division(discreta_base &x,
557 discreta_base &q, discreta_base &r, int verbose_level);
563 void modulo(discreta_base &p);
565 discreta_base &v, discreta_base &g, int verbose_level);
566 void write_memory(memory &m, int debug_depth);
567 void read_memory(memory &m, int debug_depth);
568 int calc_size_on_file();
569 void pack(memory & M, int verbose_level, int debug_depth);
570 void unpack(memory & M, int verbose_level, int debug_depth);
571 void save_ascii(std::ostream & f);
572 void load_ascii(std::istream & f);
573 void save_file(const char *fname);
574 void load_file(const char *fname);
575};
576
577
579
580
582{
583 public:
584 memory();
585 memory(const discreta_base &x);
586 // copy constructor
588 // copy assignment
589 void settype_memory();
590 ~memory();
591 void freeself_memory();
594 std::ostream& print(std::ostream& ost);
595 int & alloc_length() { return self.int_pointer[-3]; }
596 int & used_length() { return self.int_pointer[-2]; }
597 int & cur_pointer() { return self.int_pointer[-1]; }
598
599 char & s_i(int i) { return self.char_pointer[i]; };
600 char & operator [] (int i) { return s_i(i); }
601
602 void init(int length, char *d);
603 void alloc(int length);
604 void append(int length, char *d);
605 void realloc(int new_length);
606 void write_char(char c);
607 void read_char(char *c);
608 void write_int(int i);
609 void read_int(int *i);
610 void read_file(char *fname, int verbose_level);
611 void write_file(char *fname, int verbose_level);
612 int multiplicity_of_character(char c);
613 void compress(int f_v);
614 void decompress(int f_v);
615 int csf();
616 void write_mem(memory & M, int debug_depth);
617 void read_mem(memory & M, int debug_depth);
618
619};
620
621
623
624
626{
627 public:
628 hollerith();
629 // constructor, sets the hollerith_pointer to NULL
630 hollerith(char *p);
631 hollerith(const discreta_base& x);
632 // copy constructor
634 // copy assignment
635
636 void *operator new(size_t, void *p) { return p; }
637 void settype_hollerith();
638
639 ~hollerith();
640 void freeself_hollerith();
641 // delete the matrix
644
645 std::ostream& print(std::ostream&);
647
648 char * s_unchecked() { return self.char_pointer; }
649 char * s() { if (self.char_pointer)
650 return self.char_pointer; else return (char *) ""; }
651 void init(const char *p);
652 void append(const char *p);
653 void append_i(int i);
654 void write_mem(memory & m, int debug_depth);
655 void read_mem(memory & m, int debug_depth);
656 int csf();
657 void chop_off_extension_if_present(char *ext);
658 void get_extension_if_present(char *ext);
659 void get_current_date();
660};
661
663
664
665
667{
668 public:
669 integer();
670 integer(char *p);
671 integer(int i);
672 integer(const discreta_base& x);
673 // copy constructor
675 // copy assignment
676 void *operator new(size_t, void *p) { return p; }
677 void settype_integer();
678
679 ~integer();
680 void freeself_integer();
683
684 std::ostream& print(std::ostream&);
685
686 integer& m_i(int i); // make_integer
687 int& s_i() { return self.integer_value; }; // select_integer
688
690
692 int invert_to(discreta_base &x);
693
695 void negate_to(discreta_base &x);
696
697 void normalize(discreta_base &p);
698 void zero();
699 void one();
700 void m_one();
701 void homo_z(int z);
702 void inc();
703 void dec();
704 int is_zero();
705 int is_one();
706 int is_m_one();
707
710 discreta_base &q, discreta_base &r, int verbose_level);
711
712 void rand(int low, int high);
713 int log2();
714};
715
716#define LONGINTEGER_PRINT_DOTS
717#define LONGINTEGER_DIGITS_FOR_DOT 6
718
719
720
722
723
724
725
727{
728 public:
729 longinteger();
730 longinteger(int a);
731 longinteger(const char *s);
732 longinteger(const discreta_base& x);
733 // copy constructor
735 // copy assignment
736 void *operator new(size_t, void *p) { return p; }
737 void settype_longinteger();
738
739 ~longinteger();
743
744 std::ostream& print(std::ostream&);
745
747 int& s_sign();
748 int& s_len();
749 char& s_p(int i);
750 void allocate(int sign, const char *p);
751 void allocate_internal(int sign, int len, const char *p);
752 void allocate_empty(int len);
754
757
759 int invert_to(discreta_base &x);
761 void negate_to(discreta_base &x);
762
763 void zero();
764 void one();
765 void m_one();
766 void homo_z(int z);
767 void inc();
768 void dec();
769 int is_zero();
770 int is_one();
771 int is_m_one();
772 int is_even();
773 int is_odd();
774
777 discreta_base &q, discreta_base &r, int verbose_level);
779 longinteger& Mersenne(int n);
780 longinteger& Fermat(int n);
781 int s_i();
783 int modp(int p);
784 int ny_p(int p);
785 void divide_out_int(int d);
786
787 int Lucas_test_Mersenne(int m, int verbose_level);
788};
789
790
792
793
794
795
797{
798 public:
799 Vector();
800 // constructor, sets the vector_pointer to NULL
801 Vector(const discreta_base& x);
802 // copy constructor
804 // copy assignment
805
806 void *operator new(size_t, void *p) { return p; }
807 void settype_vector();
808 ~Vector();
809 void freeself_vector();
810 // delete the vector
813
814 std::ostream& Print(std::ostream&);
815 std::ostream& print(std::ostream&);
816 std::ostream& print_unformatted(std::ostream& ost);
817 std::ostream& print_intvec(std::ostream& ost);
818
819 discreta_base & s_i(int i);
820 // select i-th vector element
821 int& s_ii(int i)
822 { return s_i(i).s_i_i(); }
823 // select i-th vector element as integer
824 void m_ii(int i, int a) { s_i(i).m_i_i(a); }
825 // make i-th vector element as integer (set value)
827 { return s_i(i); }
828 int s_l();
829 // select vector length,
830 // length is 0 if vector_pointer is NULL
831 void m_l(int l);
832 // make vector of length l
833 // allocates the memory and sets the objects to type BASE
834 void m_l_n(int l);
835 // make vector of length l of integers, initializes with 0
836 void m_l_e(int l);
837 // make vector of length l of integers, initializes with 1
838 void m_l_x(int l, discreta_base &x);
839 // allocates a vector of l copies of x
840 Vector& realloc(int l);
843 void inc();
844 void dec();
845
847 void append_vector(Vector &v);
848 Vector& append_integer(int a);
852 Vector& delete_element(int i);
855 // inserts x into the sorted vector x.
856 // if there are already occurences of x, the new x is added
857 // behind the x already there.
858 // returns true if the element was already in the vector.
859 bool search(discreta_base& x, int *idx);
860 // returns TRUE if the object x has been found.
861 // idx contains the position where the object which
862 // has been found lies.
863 // if there are more than one element equal to x in the vector,
864 // the last one will be found.
865 // if the element has not been found, idx contains the position of
866 // the next larger element.
867 // This is the position to insert x if required.
868 Vector& sort();
869 void sort_with_fellow(Vector &fellow);
871 // the permutation p tells where the sorted elements
872 // lay before, i.e. p[i] is the position of the
873 // sorted element i in the unsorted vector.
874
875
877
878
879
880
881
882 void n_choose_k_first(int n, int k);
883 // computes the lexicographically first k-subset of {0,...,n-1}
884 int n_choose_k_next(int n, int k);
885 // computes the lexicographically next k-subset
886 // returns FALSE if there is no further k-subset
887 // example: n = 4, k = 2
888 // first gives (0,1),
889 // next gives (0,2), then (0,3), (1,2), (1,3), (2,3).
890 void first_lehmercode(int n)
891 { m_l_n(n); }
892 // first lehmercode = 0...0 (n times)
893 int next_lehmercode();
894 // computes the next lehmercode,
895 // returns FALSE iff there is no next lehmercode.
896 // the last lehmercode is n-1,n-2,...,2,1,0
897 // example: n = 3,
898 // first_lehmercode gives
899 // 0,0,0,0
900 // next_lehmercode gives
901 // 0, 1, 0
902 // 1, 0, 0
903 // 1, 1, 0
904 // 2, 0, 0
905 // 2, 1, 0
907 void q_adic(int n, int q);
908 int q_adic_as_int(int q);
909 void mult_scalar(discreta_base& a);
910 void first_word(int n, int q);
911 int next_word(int q);
912 void first_regular_word(int n, int q);
913 int next_regular_word(int q);
914 int is_regular_word();
915
918 void content(Vector & c, Vector & where);
920
921 int hip();
922 int hip1();
923 void write_mem(memory & m, int debug_depth);
924 void read_mem(memory & m, int debug_depth);
925 int csf();
926
927 void conjugate(discreta_base & a);
929 void replace(Vector &v);
931 void extract_subvector(Vector & v, int first, int len);
932
934 void PG_element_rank(int &a);
935 void PG_element_rank_modified(int &a);
936 void PG_element_unrank(int a);
937 void PG_element_unrank_modified(int a);
938 void AG_element_rank(int &a);
939 void AG_element_unrank(int a);
940
941 int hamming_weight();
942 void scalar_product(Vector &w, discreta_base & a);
943 void hadamard_product(Vector &w);
944 void intersect(Vector& b, Vector &c);
946 void first_divisor(Vector &exponents);
947 int next_divisor(Vector &exponents);
948 int next_non_trivial_divisor(Vector &exponents);
949 void multiply_out(Vector &primes, discreta_base &x);
950 int hash(int hash0);
951 int is_subset_of(Vector &w);
952 void concatenation(Vector &v1, Vector &v2);
953 void print_word_nicely(std::ostream &ost,
954 int f_generator_labels, Vector &generator_labels);
955 void print_word_nicely2(std::ostream &ost);
957 std::ostream &ost, Vector &generator_labels);
958 void vector_of_vectors_lengths(Vector &lengths);
959 void get_element_orders(Vector &vec_of_orders);
960};
961
962void merge(Vector &v1, Vector &v2, Vector &v3);
963void merge_with_fellows(Vector &v1, Vector &v1_fellow,
964 Vector &v2, Vector &v2_fellow,
965 Vector &v3, Vector &v3_fellow);
966void merge_with_value(Vector &idx1, Vector &idx2, Vector &idx3,
967 Vector &val1, Vector &val2, Vector &val3);
968void intersection_of_vectors(Vector& V, Vector& v);
969
970
972
973
974
975class permutation: public Vector
976{
977 public:
978 permutation();
979 // constructor, sets the vector_pointer to NULL
980 permutation(const discreta_base& x);
981 // copy constructor
983 // copy assignment
984 void *operator new(size_t, void *p) { return p; }
985 void settype_permutation();
987 ~permutation();
990 std::ostream& print(std::ostream&);
991 std::ostream& print_list(std::ostream& ost);
992 std::ostream& print_cycle(std::ostream& ost);
993 void sscan(const char *s, int verbose_level);
994 void scan(std::istream & is, int verbose_level);
995
996 void m_l(int l);
997 int& s_i(int i);
998 int& operator [] (int i)
999 { return s_i(i); }
1000
1001 void mult_to(discreta_base &x, discreta_base &y);
1002 int invert_to(discreta_base &x);
1003 void one();
1004 int is_one();
1006
1007 void write_mem(memory & m, int debug_depth);
1008 void read_mem(memory & m, int debug_depth);
1009 int csf();
1010 void get_fixpoints(Vector &f);
1012 void induce3(permutation & b);
1013 void induce2(permutation & b);
1014 void induce_on_2tuples(permutation & p, int f_injective);
1015 void add_n_fixpoints_in_front(permutation & b, int n);
1016 void add_n_fixpoints_at_end(permutation & b, int n);
1018 void embed_at(permutation & b, int n, int at);
1019 void remove_fixpoint(permutation & b, int i);
1020 void join(permutation & a, permutation & b);
1022 void Add2Cycle(int i0, int i1);
1023 void Add3Cycle(int i0, int i1, int i2);
1024 void Add4Cycle(int i0, int i1, int i2, int i3);
1025 void Add5Cycle(int i0, int i1, int i2, int i3, int i4);
1026 void AddNCycle(int first, int len);
1027
1028 // influence the behavior of printing of permutations:
1032
1033 void convert_digit(int i, hollerith &a);
1034 void cycle_type(Vector& type, int verbose_level);
1035 int nb_of_inversions(int verbose_level);
1036 int signum(int verbose_level);
1037 int is_even(int verbose_level);
1038 void cycles(Vector &cycles);
1039 void restrict_to_subset(permutation &q, int first, int len);
1040 void induce_on_lines_of_PG_k_q(int k, int q, permutation &per, int verbose_level);
1041 void singer_cycle_on_points_of_projective_plane(int p, int f_modified, int verbose_level);
1042 void Cn_in_Cnm(int n, int m);
1043 int preimage(int i);
1044};
1045
1046void signum_map(discreta_base & x, discreta_base &d);
1047
1049
1050
1051
1052
1054public:
1055 int i;
1057 discreta_base & operator [] (int j);
1058};
1059
1061
1062
1063
1065{
1066 public:
1068 // constructor, sets the matrix_pointer to NULL
1070 // copy constructor
1072 // copy assignment
1073
1074 void *operator new(size_t, void *p) { return p; }
1075 void settype_matrix();
1076
1078 void freeself_matrix();
1079 // delete the matrix
1082
1083 std::ostream& print(std::ostream&);
1085
1086 discreta_matrix& m_mn(int m, int n);
1087 // make matrix of format m times n
1088 // allocates the memory and sets the objects to type BASE
1089 discreta_matrix& m_mn_n(int m, int n);
1090 discreta_matrix& realloc(int m, int n);
1091
1092
1093 int s_m();
1094 int s_n();
1095 discreta_base & s_ij(int i, int j);
1096 // select (i,j)-th matrix element
1097 int& s_iji(int i, int j)
1098 { return s_ij(i, j).s_i_i(); }
1099 void m_iji(int i, int j, int a)
1100 { s_ij(i, j).m_i_i(a); }
1101 // make (i,j)-th vector element as integer (set value)
1102
1104 { matrix_access ma = { i, this }; return ma; }
1105 // overload access operator
1106
1107 void mult_to(discreta_base &x, discreta_base &y);
1109 void vector_mult_to(Vector &x, discreta_base &y);
1111 int invert_to(discreta_base &x);
1112 void add_to(discreta_base &x, discreta_base &y);
1113 void negate_to(discreta_base &x);
1114 void one();
1115 void zero();
1116 int is_zero();
1117 int is_one();
1118
1119
1120 int Gauss(int f_special, int f_complete,
1121 Vector& base_cols, int f_P, discreta_matrix& P, int verbose_level);
1122 int rank();
1123 int get_kernel(Vector& base_cols, discreta_matrix& kernel);
1125 int Asup2Ainf();
1126 int Ainf2Asup();
1127 int Asup2Acover();
1128 int Acover2nl(Vector& nl);
1129
1130 void Frobenius(unipoly& m, int p, int verbose_level);
1131 void Berlekamp(unipoly& m, int p, int verbose_level);
1132 void companion_matrix(unipoly& m, int verbose_level);
1133
1134 void elements_to_unipoly();
1135 void minus_X_times_id();
1136 void X_times_id_minus_self();
1138 discreta_matrix& Q, discreta_matrix& Qv, int verbose_level);
1140 int verbose_level);
1142 int verbose_level);
1143 void multiply_2by2_from_left(int i, int j,
1144 discreta_base& aii, discreta_base& aij,
1145 discreta_base& aji, discreta_base& ajj,
1146 int verbose_level);
1147 void multiply_2by2_from_right(int i, int j,
1148 discreta_base& aii, discreta_base& aij,
1149 discreta_base& aji, discreta_base& ajj,
1150 int verbose_level);
1151
1152 void to_vector_of_rows(Vector& v);
1153 void from_vector_of_rows(Vector& v);
1156 void evaluate_at(discreta_base& x);
1157 void KX_module_order_ideal(int i, unipoly& mue, int verbose_level);
1158 void KX_module_apply(unipoly& p, Vector& v);
1159 void KX_module_join(Vector& v1, unipoly& mue1,
1160 Vector& v2, unipoly& mue2, Vector& v3, unipoly& mue3, int verbose_level);
1161 void KX_cyclic_module_generator(Vector& v, unipoly& mue, int verbose_level);
1162 void KX_module_minpol(unipoly& p, unipoly& m, unipoly& mue, int verbose_level);
1163
1164 void binomial(int n_min, int n_max, int k_min, int k_max);
1165 void stirling_second(int n_min, int n_max, int k_min, int k_max, int f_ordered);
1166 void stirling_first(int n_min, int n_max, int k_min, int k_max, int f_signless);
1167 void binomial(int n_min, int n_max, int k_min, int k_max, int f_inverse);
1168 int hip();
1169 int hip1();
1170 void write_mem(memory & m, int debug_depth);
1171 void read_mem(memory & M, int debug_depth);
1172 int csf();
1173
1174 void calc_theX(int & nb_X, int *&theX);
1175 void apply_perms(int f_row_perm, permutation &row_perm,
1176 int f_col_perm, permutation &col_perm);
1179 void incma_print_ascii_permuted_and_decomposed(std::ostream &ost, int f_tex,
1180 Vector & decomp, permutation & p);
1181 void print_decomposed(std::ostream &ost, Vector &row_decomp, Vector &col_decomp);
1182 void incma_print_ascii(std::ostream &ost, int f_tex,
1183 int f_row_decomp, Vector &row_decomp,
1184 int f_col_decomp, Vector &col_decomp);
1185 void incma_print_latex(std::ostream &f,
1186 int f_row_decomp, Vector &row_decomp,
1187 int f_col_decomp, Vector &col_decomp,
1188 int f_labelling_points, Vector &point_labels,
1189 int f_labelling_blocks, Vector &block_labels);
1190 void incma_print_latex2(std::ostream &f,
1191 int width, int width_10,
1192 int f_outline_thin, const char *unit_length,
1193 const char *thick_lines, const char *thin_lines, const char *geo_line_width,
1194 int f_row_decomp, Vector &row_decomp,
1195 int f_col_decomp, Vector &col_decomp,
1196 int f_labelling_points, Vector &point_labels,
1197 int f_labelling_blocks, Vector &block_labels);
1198 void calc_hash_key(int key_len, hollerith & hash_key, int f_v);
1199 int is_in_center();
1200 void power_mod(int r, integer &P, discreta_matrix &C);
1201 int proj_order_mod(integer &P);
1202 void PG_rep(domain *dom, permutation &p, int f_action_from_right, int f_modified);
1203 void PG_rep(permutation &p, int f_action_from_right, int f_modified);
1204 void AG_rep(domain *dom, permutation &p, int f_action_from_right);
1205 void AG_rep(permutation &p, int f_action_from_right);
1206 void MacWilliamsTransform(int n, int q, int f_v);
1208 void Simplex_code_generator_matrix(domain *dom, int k, int f_v);
1209 void PG_design_point_vs_hyperplane(domain *dom, int k, int f_v);
1210 void PG_k_q_design(domain *dom, int k, int f_v, int f_vv);
1211 void determinant(discreta_base &d, int verbose_level);
1212 void det(discreta_base & d, int f_v, int f_vv);
1213 void det_modify_input_matrix(discreta_base & d, int f_v, int f_vv);
1214 void PG_line_rank(int &a, int f_v);
1215 void PG_line_unrank(int a);
1216 void PG_point_normalize(int i0, int j0, int di, int dj, int length);
1217 void PG_point_unrank(int i0, int j0, int di, int dj, int length, int a);
1218 void PG_point_rank(int i0, int j0, int di, int dj, int length, int &a);
1219 void PG_element_normalize();
1220 void AG_point_rank(int i0, int j0, int di, int dj, int length, int &a);
1221 void AG_point_unrank(int i0, int j0, int di, int dj, int length, int a);
1222 void save_as_inc_file(char *fname);
1223 void save_as_inc(std::ofstream &f);
1224};
1225
1226void determinant_map(discreta_base & x, discreta_base &d);
1227int nb_PG_lines(int n, int q);
1228
1229
1230
1232
1233
1234
1235class unipoly: public Vector
1236{
1237 public:
1238 unipoly();
1239 // constructor, sets the vector_pointer to NULL
1240 unipoly(const discreta_base& x);
1241 // copy constructor
1243 // copy assignment
1244 void *operator new(size_t, void *p) { return p; }
1245 void settype_unipoly();
1247 ~unipoly();
1248 void freeself_unipoly();
1250 std::ostream& print(std::ostream&);
1251 std::ostream& print_as_vector(std::ostream& ost);
1252
1253 void m_l(int l);
1254 int degree();
1255
1258 void negate_to(discreta_base &x);
1259 void one();
1260 void zero();
1261 void x();
1262 void x_to_the_i(int i);
1263 int is_one();
1264 int is_zero();
1267 discreta_base &q, discreta_base &r, int verbose_level);
1268 void derive();
1269 int is_squarefree(int verbose_level);
1270 int is_irreducible_GFp(int p, int verbose_level);
1271 int is_irreducible(int q, int verbose_level);
1272 int is_primitive(int m, int p, Vector& vp, int verbose_level);
1273 void numeric_polynomial(int n, int q);
1274 int polynomial_numeric(int q);
1275 void singer_candidate(int p, int f, int b, int a);
1276 void Singer(int p, int f, int verbose_level);
1277 void get_an_irreducible_polynomial(int f, int verbose_level);
1280 void monic();
1281 void normal_base(int p, discreta_matrix& F, discreta_matrix& N, int verbose_level);
1284 int verbose_level);
1287 int verbose_level);
1288 void normalize(discreta_base &p);
1289 void Xnm1(int n);
1290 void Phi(int n, int f_v);
1291 void weight_enumerator_MDS_code(int n, int k, int q,
1292 int verbose_level);
1293 void charpoly(int q, int size, int *mtx, int verbose_level);
1294
1295};
1296
1297
1298
1299
1300
1301
1302#define PARTITION_TYPE_VECTOR 0
1303#define PARTITION_TYPE_EXPONENT 1
1304
1306
1307
1308
1310{
1311 public:
1313 // constructor, sets the vector_pointer to NULL
1314 number_partition(int n);
1317 // copy constructor
1319 // copy assignment
1320 void *operator new(size_t, void *p) { return p; }
1326 std::ostream& print(std::ostream&);
1327
1328 int & s_type() { return Vector::s_i(0).as_integer().s_i(); }
1329 Vector & s_self() { return Vector::s_i(1).as_vector(); }
1330
1331 void m_l(int l) { s_self().m_l_n(l); }
1332 int s_l() { return s_self().s_l(); }
1333 int & s_i(int i) { return s_self().s_ii(i); }
1334 int & operator [] (int i) { return s_self().s_ii(i); }
1335
1336 void first(int n);
1337 int next();
1338 int next_exponent();
1339 int next_vector();
1340 int first_into_k_parts(int n, int k);
1341 int next_into_k_parts(int n, int k);
1342 int first_into_at_most_k_parts(int n, int k);
1343 int next_into_at_most_k_parts(int n, int k);
1344 int nb_parts();
1345 void conjugate();
1346 void type(number_partition &q);
1347 void multinomial(discreta_base &res, int f_v);
1348 void multinomial_ordered(discreta_base &res, int f_v);
1350
1351};
1352
1353
1354
1356
1357
1358
1359
1360class domain {
1361 private:
1362 domain_type the_type;
1363 discreta_base the_prime;
1364 //pc_presentation *the_pres;
1365 unipoly *the_factor_poly;
1366 domain *the_sub_domain;
1368
1369 public:
1370 domain(int p);
1373 //domain(pc_presentation *pres);
1374
1375 domain_type type();
1377 int order_int();
1378 int order_subfield_int();
1379 int characteristic();
1381 //pc_presentation *pres();
1383 domain *sub_domain();
1384};
1385
1386
1387// domain.cpp:
1388
1389int has_domain();
1391//domain *get_domain_if_pc_group();
1392int is_GFp_domain(domain *& d);
1393int is_GFq_domain(domain *& d);
1400void push_domain(domain *d);
1401void pop_domain(domain *& d);
1402domain *allocate_finite_field_domain(int q, int verbose_level);
1404
1405
1406
1407
1409
1410
1411
1412
1413class with {
1414 private:
1415 public:
1416
1417 with(domain *dom);
1418 ~with();
1419};
1420
1421
1423
1424
1425
1427 private:
1428 public:
1431};
1432
1433
1434
1435
1436
1438
1439
1440
1441class bt_key: public Vector
1442{
1443 public:
1444 bt_key();
1445 // constructor, sets the vector_pointer to NULL
1446 bt_key(const discreta_base& x);
1447 // copy constructor
1448 bt_key& operator = (const discreta_base &x);
1449 // copy assignment
1450 void *operator new(size_t, void *p) { return p; }
1451 void settype_bt_key();
1453 ~bt_key();
1454 void freeself_bt_key();
1456 std::ostream& print(std::ostream&);
1457
1458 enum bt_key_kind & type() { return (enum bt_key_kind&) Vector::s_i(0).as_integer().s_i(); }
1459 int & output_size() { return Vector::s_i(1).as_integer().s_i(); }
1460 int & int_vec_first() { return Vector::s_i(2).as_integer().s_i(); }
1461 int & int_vec_len() { return Vector::s_i(3).as_integer().s_i(); }
1462 int & field1() { return Vector::s_i(4).as_integer().s_i(); }
1463 int & field2() { return Vector::s_i(5).as_integer().s_i(); }
1464 int & f_ascending() { return Vector::s_i(6).as_integer().s_i(); }
1465
1466 void init(enum bt_key_kind type, int output_size, int field1, int field2);
1467 void init_int4(int field1, int field2);
1468 void init_int2(int field1, int field2);
1469 void init_string(int output_size, int field1, int field2);
1470 void init_int4_vec(int field1, int field2, int vec_fst, int vec_len);
1471 void init_int2_vec(int field1, int field2, int vec_fst, int vec_len);
1472};
1473
1474int bt_lexicographic_cmp(char *p1, char *p2);
1475int bt_key_int_cmp(char *p1, char *p2);
1476int bt_key_int2_cmp(char *p1, char *p2);
1477void bt_key_print_int4(char **key, std::ostream& ost);
1478void bt_key_print_int2(char **key, std::ostream& ost);
1479void bt_key_print(char *key, Vector& V, std::ostream& ost);
1480int bt_key_compare_int4(char **p_key1, char **p_key2);
1481int bt_key_compare_int2(char **p_key1, char **p_key2);
1482int bt_key_compare(char *key1, char *key2, Vector& V, int depth);
1483void bt_key_fill_in_int4(char **p_key, discreta_base& key_op);
1484void bt_key_fill_in_int2(char **p_key, discreta_base& key_op);
1485void bt_key_fill_in_string(char **p_key, int output_size, discreta_base& key_op);
1486void bt_key_fill_in(char *key, Vector& V, Vector& the_object);
1487void bt_key_get_int4(char **key, int_4 &i);
1488void bt_key_get_int2(char **key, int_2 &i);
1489
1490#define BTREEMAXKEYLEN 24
1491//#define BTREEMAXKEYLEN 48
1492//#define BTREEMAXKEYLEN 512
1493
1494
1496
1497
1498typedef struct keycarrier {
1501
1503
1505
1506
1507typedef struct datatype {
1511
1512//#define DB_SIZEOF_HEADER 16
1513//#define DB_SIZEOF_HEADER_LOG 4
1514#define DB_POS_FILESIZE 4
1515
1516#define DB_FILE_TYPE_STANDARD 1
1517#define DB_FILE_TYPE_COMPACT 2
1518
1519
1521
1522
1523
1524class database: public Vector
1525{
1526 public:
1527 database();
1528 // constructor, sets the vector_pointer to NULL
1529 database(const discreta_base& x);
1530 // copy constructor
1532 // copy assignment
1533 void *operator new(size_t, void *p) { return p; }
1534 void settype_database();
1536 ~database();
1537 void freeself_database();
1539 std::ostream& print(std::ostream&);
1540
1542 btree & btree_access_i(int i) { return btree_access().s_i(i).as_btree(); }
1544 int & f_compress() { return Vector::s_i(2).as_integer().s_i(); }
1545 int & objectkind() { return Vector::s_i(3).as_integer().s_i(); }
1546 int & f_open() { return Vector::s_i(4).as_integer().s_i(); }
1547 int & stream() { return Vector::s_i(5).as_integer().s_i(); }
1548 int & file_size() { return Vector::s_i(6).as_integer().s_i(); }
1549 int & file_type() { return Vector::s_i(7).as_integer().s_i(); }
1550
1551 void init(const char *filename, int objectkind, int f_compress);
1552 void init_with_file_type(const char *filename,
1553 int objectkind, int f_compress, int file_type);
1554
1555 void create(int verbose_level);
1556 void open(int verbose_level);
1557 void close(int verbose_level);
1558 void delete_files();
1559 void put_file_size();
1560 void get_file_size();
1561 void user2total(int user, int &total, int &pad);
1562 int size_of_header();
1563 int size_of_header_log();
1564
1565 void add_object_return_datref(Vector &the_object,
1566 uint_4 &datref, int verbose_level);
1567 void add_object(Vector &the_object, int verbose_level);
1568 void delete_object(Vector& the_object, uint_4 datref, int verbose_level);
1569 void get_object(uint_4 datref, Vector &the_object, int verbose_level);
1570 void get_object(DATATYPE *data_type, Vector &the_object, int verbose_level);
1571 void get_object_by_unique_int4(int btree_idx,
1572 int id, Vector& the_object, int verbose_level);
1573 int get_object_by_unique_int4_if_there(int btree_idx,
1574 int id, Vector& the_object, int verbose_level);
1575 int get_highest_int4(int btree_idx);
1576 void ith_object(int i, int btree_idx,
1577 Vector& the_object, int verbose_level);
1578 void ith(int i, int btree_idx,
1579 KEYTYPE *key_type, DATATYPE *data_type,
1580 int verbose_level);
1581 void print_by_btree(int btree_idx, std::ostream& ost);
1582 void print_by_btree_with_datref(int btree_idx, std::ostream& ost);
1583 void print_subset(Vector& datrefs, std::ostream& ost);
1584 void extract_subset(Vector& datrefs,
1585 char *out_path, int verbose_level);
1586 void search_int4(int btree_idx,
1587 int imin, int imax, Vector &datrefs,
1588 int verbose_level);
1589 void search_int4_2dimensional(int btree_idx0,
1590 int imin0, int imax0,
1591 int btree_idx1, int imin1, int imax1,
1592 Vector &datrefs, int verbose_level);
1593 void search_int4_multi_dimensional(Vector& btree_idx,
1594 Vector& i_min, Vector &i_max, Vector& datrefs,
1595 int verbose_level);
1596
1597 int get_size_from_datref(uint_4 datref, int verbose_level);
1598 void add_data_DB(void *d,
1599 int size, uint_4 *datref, int verbose_level);
1600 void add_data_DB_standard(void *d,
1601 int size, uint_4 *datref, int verbose_level);
1602 void add_data_DB_compact(void *d,
1603 int size, uint_4 *datref, int verbose_level);
1604 void free_data_DB(uint_4 datref, int size, int verbose_level);
1605
1606 void file_open(int verbose_level);
1607 void file_create(int verbose_level);
1608 void file_close(int verbose_level);
1609 void file_seek(int offset);
1610 void file_write(void *p, int size, int nb);
1611 void file_read(void *p, int size, int nb);
1612};
1613
1614
1615#define BTREEHALFPAGESIZE 128
1616#define BTREEMAXPAGESIZE (2 * BTREEHALFPAGESIZE)
1617
1618#define BTREE_PAGE_LENGTH_LOG 7
1619
1620/* Dateiformat:
1621 * In Block 0 sind AllocRec/NextFreeRec/RootRec gesetzt.
1622 * Block 1..AllocRec sind Datenpages.
1623 * Die freien Bloecke sind ueber NextFreeRec verkettet.
1624 * Der letzte freie Block hat NIL als Nachfolger.
1625 * Dateigroesse = (AllocRec + 1) * sizeof(PageTyp) */
1626
1627
1629
1630
1631typedef struct itemtyp {
1634 int_4 Childs; // Anzahl der Nachfolger ueber Ref
1637
1638
1640
1641
1642typedef struct pagetyp {
1646
1649/* Item[0] enthaelt keine Daten,
1650 * nur Ref/Childs ist verwendet.
1651 * Item[1..NumItems] fuer Daten und
1652 * Ref/Childs verwendet. */
1654
1655
1657
1658
1659typedef struct buffer {
1663 long align;
1665
1666
1668
1669
1670
1671class btree: public Vector
1672{
1673 public:
1674 btree();
1675 // constructor, sets the vector_pointer to NULL
1676 btree(const discreta_base& x);
1677 // copy constructor
1678 btree& operator = (const discreta_base &x);
1679 // copy assignment
1680 void *operator new(size_t, void *p) { return p; }
1681 void settype_btree();
1683 ~btree();
1684 void freeself_btree();
1686 std::ostream& print(std::ostream&);
1687
1688 int & f_duplicatekeys() { return Vector::s_i(0).as_integer().s_i(); }
1689 Vector & key() { return Vector::s_i(1).as_vector(); }
1691 int & f_open() { return Vector::s_i(3).as_integer().s_i(); }
1692 int & stream() { return Vector::s_i(4).as_integer().s_i(); }
1693 int & buf_idx() { return Vector::s_i(5).as_integer().s_i(); }
1694 int & Root() { return Vector::s_i(6).as_integer().s_i(); }
1695 int & FreeRec() { return Vector::s_i(7).as_integer().s_i(); }
1696 int & AllocRec() { return Vector::s_i(8).as_integer().s_i(); }
1697 int & btree_idx() { return Vector::s_i(9).as_integer().s_i(); }
1698 int & page_table_idx() { return Vector::s_i(10).as_integer().s_i(); }
1699
1700 void init(const char *file_name, int f_duplicatekeys, int btree_idx);
1701 void add_key_int4(int field1, int field2);
1702 void add_key_int2(int field1, int field2);
1703 void add_key_string(int output_size, int field1, int field2);
1704 void key_fill_in(char *the_key, Vector& the_object);
1705 void key_print(char *the_key, std::ostream& ost);
1706
1707 void create(int verbose_level);
1708 void open(int verbose_level);
1709 void close(int verbose_level);
1710
1711 void ReadInfo(int verbose_level);
1712 void WriteInfo(int verbose_level);
1713 int AllocateRec(int verbose_level);
1714 void ReleaseRec(int x);
1715 void LoadPage(Buffer *BF, int x, int verbose_level);
1716 void SavePage(Buffer *BF, int verbose_level);
1717
1718 int search_string(discreta_base& key_op,
1719 int& pos, int verbose_level);
1720 void search_interval_int4(int i_min, int i_max,
1721 int& first, int &len, int verbose_level);
1722 void search_interval_int4_int4(int l0, int u0,
1723 int l1, int u1,
1724 int& first, int &len,
1725 int verbose_level);
1726 void search_interval_int4_int4_int4(int l0, int u0,
1727 int l1, int u1,
1728 int l2, int u2,
1729 int& first, int &len,
1730 int verbose_level);
1731 void search_interval_int4_int4_int4_int4(int l0, int u0,
1732 int l1, int u1,
1733 int l2, int u2,
1734 int l3, int u3,
1735 int& first, int &len,
1736 int verbose_level);
1737 int search_int4_int4(int data1, int data2, int &idx, int verbose_level);
1738 int search_unique_int4(int i, int verbose_level);
1740 int i1, int i2, int i3, int verbose_level);
1741 // returns -1 if an element whose key starts
1742 // with [i0,i1,i2,i3] could not be found or is not unique.
1743 // otherwise, the idx of that element is returned
1745 int verbose_level);
1747 int verbose_level);
1748 int get_highest_int4();
1749 void get_datrefs(int first,
1750 int len, Vector& datrefs);
1751
1752 int search(void *pSearchKey,
1753 DATATYPE *pData, int *idx, int key_depth,
1754 int verbose_level);
1755 int SearchBtree(int page,
1756 void *pSearchKey, DATATYPE *pData,
1757 Buffer *Buf, int *idx, int key_depth,
1758 int verbose_level);
1759 int SearchPage(Buffer *buffer,
1760 void *pSearchKey, DATATYPE *pSearchData,
1761 int *cur, int *x, int key_depth,
1762 int verbose_level);
1763
1764 int length(int verbose_level);
1765 void ith(int l,
1766 KEYTYPE *key, DATATYPE *data, int verbose_level);
1767 int page_i_th(int l,
1768 Buffer *buffer, int *cur, int *i,
1769 int verbose_level);
1770
1771 void insert_key(KEYTYPE *pKey,
1772 DATATYPE *pData,
1773 int verbose_level);
1774 void Update(int Node, int *Rise,
1775 ItemTyp *RisenItem,
1776 int *RisenNeighbourChilds,
1777 int f_v);
1778 void Split(Buffer *BF,
1779 ItemTyp *Item, int x,
1780 int *RisenNeighbourChilds,
1781 int verbose_level);
1782
1783 void delete_ith(int idx, int verbose_level);
1784 void Delete(int Node, int& Underflow, int verbose_level);
1785 void FindGreatest(int Node1,
1786 int& Underflow, Buffer *DKBF, int x,
1787 int verbose_level);
1788 void Compensate(int Precedent,
1789 int Node, int Path, int& Underflow,
1790 int verbose_level);
1791
1792 void print_all(std::ostream& ost);
1793 void print_range(int first, int len, std::ostream& ost);
1794 void print_page(int x, std::ostream& ost);
1795 void page_print(Buffer *BF, std::ostream& ost);
1796 void item_print(ItemTyp *item, int i, std::ostream& ost);
1797
1798 void file_open();
1799 void file_create();
1800 void file_close();
1801 void file_write(PageTyp *page, const char *message);
1802 void file_read(PageTyp *page, const char *message);
1803 void file_seek(int page_no);
1804};
1805
1806#define MAX_FSTREAM_TABLE 1000
1807
1808
1810extern std::fstream *fstream_table[MAX_FSTREAM_TABLE];
1811
1813void database_init(int verbose_level);
1814void database_exit(void);
1815int root_buf_alloc(void);
1816void root_buf_free(int i);
1817
1818
1819
1820// #############################################################################
1821// class page_table
1822// #############################################################################
1823
1824
1825
1827
1829
1831 int x;
1832 int idx;
1833 int ref;
1834};
1835
1836
1838
1840
1842
1843
1845
1846
1847
1849public:
1854
1855
1856 page_table();
1857 ~page_table();
1858 void init(int verbose_level);
1859 void reallocate_table(int verbose_level);
1860 void print();
1861 int search(int len, int btree_idx, int btree_x, int &idx);
1862 int search_key_pair(int len, btree_page_registry_key_pair *K, int &idx);
1863 void save_page(Buffer *BF, int buf_idx, int verbose_level);
1864 int load_page(Buffer *BF, int x, int buf_idx, int verbose_level);
1865 void allocate_rec(Buffer *BF, int buf_idx, int x, int verbose_level);
1866 void write_pages_to_file(btree *B, int buf_idx, int verbose_level);
1867};
1868
1869
1870
1871
1872void page_table_init(int verbose_level);
1873void page_table_exit(int verbose_level);
1874int page_table_alloc(int verbose_level);
1875void page_table_free(int idx, int verbose_level);
1877
1878
1879
1880
1882
1883
1884
1885
1887{
1888 public:
1890 // constructor, sets the Vector_pointer to NULL
1892 // copy constructor
1894 // copy assignment
1895 void *operator new(size_t, void *p) { return p; }
1901 std::ostream& print(std::ostream&);
1902 void print2(design_parameter& p, std::ostream& ost);
1903
1904 int & prev() { return Vector::s_i(0).as_integer().s_i(); }
1905 int & rule() { return Vector::s_i(1).as_integer().s_i(); }
1909
1910 void init();
1911 void text(hollerith& h);
1912 void text2(design_parameter& p, hollerith& h);
1913 void text012(hollerith& s0, hollerith& s1, hollerith& s2);
1915};
1916
1917// design.cpp:
1918int design_parameters_admissible(int v, int t, int k, discreta_base &lambda);
1919int calc_delta_lambda(int v, int t, int k, int f_v);
1920void design_lambda_max(int t, int v, int k, discreta_base & lambda_max);
1921void design_lambda_max_half(int t, int v, int k, discreta_base & lambda_max_half);
1922void design_lambda_ijs_matrix(int t, int v, int k, discreta_base& lambda, int s, discreta_matrix & M);
1923void design_lambda_ijs(int t, int v, int k, discreta_base& lambda, int s, int i, int j, discreta_base & lambda_ijs);
1924void design_lambda_ij(int t, int v, int k, discreta_base& lambda, int i, int j, discreta_base & lambda_ij);
1925int is_trivial_clan(int t, int v, int k);
1926void print_clan_tex_int(int t, int v, int k);
1927void print_clan_tex_int(int t, int v, int k, int delta_lambda, discreta_base &m_max);
1928void print_clan_tex(discreta_base &t, discreta_base &v, discreta_base &k, int delta_lambda, discreta_base &m_max);
1929int is_ancestor(int t, int v, int k);
1930int is_ancestor(int t, int v, int k, int delta_lambda);
1931int calc_redinv(int t, int v, int k, int delta_lambda, int &c, int &T, int &V, int &K, int &Delta_lambda);
1932int calc_derinv(int t, int v, int k, int delta_lambda, int &c, int &T, int &V, int &K, int &Delta_lambda);
1933int calc_resinv(int t, int v, int k, int delta_lambda, int &c, int &T, int &V, int &K, int &Delta_lambda);
1934void design_mendelsohn_coefficient_matrix(int t, int m, discreta_matrix & M);
1935void design_mendelsohn_rhs(int v, int t, int k, discreta_base& lambda, int m, int s, Vector & rhs);
1936int design_parameter_database_already_there(database &D, design_parameter &p, int& idx);
1937void design_parameter_database_add_if_new(database &D, design_parameter &p, int& highest_id, int verbose_level);
1938void design_parameter_database_closure(database &D, int highest_id_already_closed, int minimal_t, int verbose_level);
1939void design_parameter_database_read_design_txt(char *fname_design_txt, char *path_db, int f_form_closure, int minimal_t, int verbose_level);
1940void design_parameter_database_export_tex(char *path_db);
1941int determine_restricted_number_of_designs_t(database &D, btree &B,
1942 int btree_idx_tvkl, int t, int first, int len);
1943int determine_restricted_number_of_designs_t_v(database &D, btree &B,
1944 int btree_idx_tvkl, int t, int v, int first, int len);
1945void prepare_design_parameters_from_id(database &D, int id, hollerith& h);
1946void prepare_link(hollerith& link, int id);
1947void design_parameter_database_clans(char *path_db, int f_html, int f_v, int f_vv);
1948void design_parameter_database_family_report(char *path_db, int t, int v, int k, int lambda, int minimal_t);
1949void design_parameter_database_clan_report(char *path_db, Vector &ancestor, Vector &clan_lambda, Vector & clan_member, Vector & clan_member_path);
1950int Maxfit(int i, int j);
1951
1952
1954
1955
1956
1958{
1959 public:
1961 // constructor, sets the vector_pointer to NULL
1963 // copy constructor
1965 // copy assignment
1966 void *operator new(size_t, void *p) { return p; }
1972 std::ostream& print(std::ostream&);
1973
1974 int & id() { return Vector::s_i(0).as_integer().s_i(); }
1975 int & t() { return Vector::s_i(1).as_integer().s_i(); }
1976 int & v() { return Vector::s_i(2).as_integer().s_i(); }
1977 int & K() { return Vector::s_i(3).as_integer().s_i(); }
1979 Vector & source() { return Vector::s_i(5).as_vector(); }
1981
1982 void init();
1983 void init(int t, int v, int k, int lambda);
1984 void init(int t, int v, int k, discreta_base& lambda);
1985 void text(hollerith& h);
1986 void text_parameter(hollerith& h);
1987 void reduced_t(design_parameter& p);
1990 void derived(design_parameter& p);
1993 void residual(design_parameter& p);
1994 void ancestor(design_parameter& p, Vector & path, int f_v, int f_vv);
1998 int trung_left_partner(int& t1, int& v1, int& k1, discreta_base& lambda1,
1999 int& t_new, int& v_new, int& k_new, discreta_base& lambda_new);
2000 int trung_right_partner(int& t1, int& v1, int& k1, discreta_base& lambda1,
2001 int& t_new, int& v_new, int& k_new, discreta_base& lambda_new);
2002 int alltop(design_parameter& p);
2006 void lambda_of_supplementary(discreta_base& lambda_supplementary);
2007
2008 void init_database(database& D, char *path);
2009};
2010
2011
2012
2013// discreta_global.cpp:
2014void free_global_data();
2015void the_end(int t0);
2016void the_end_quietly(int t0);
2017
2018
2019}}
2020
2021
2022#endif /* ORBITER_SRC_LIB_DISCRETA_DISCRETA_H_ */
2023
2024
2025
2026
2027
2028
2029
2030
bulk storage of group elements in compressed form
DISCRETA vector class for vectors of DISCRETA objects.
Definition: discreta.h:797
void first_word(int n, int q)
Definition: vector.cpp:791
Vector & append(discreta_base &x)
Definition: vector.cpp:400
void apply_permutation_to_elements(permutation &p)
Definition: vector.cpp:865
void PG_element_unrank_modified(int a)
Definition: vector.cpp:1446
void mult_scalar(discreta_base &a)
Definition: vector.cpp:781
void extract_subvector(Vector &v, int first, int len)
Definition: vector.cpp:1254
void mult_to(discreta_base &x, discreta_base &y)
Definition: vector.cpp:281
int n_choose_k_next(int n, int k)
Definition: vector.cpp:695
void q_adic(int n, int q)
Definition: vector.cpp:753
void scalar_product(Vector &w, discreta_base &a)
Definition: vector.cpp:1561
Vector & get_and_delete_element(int i, discreta_base &x)
Definition: vector.cpp:427
void vector_of_vectors_replace(Vector &v)
Definition: vector.cpp:1244
void print_word_nicely_with_generator_labels(std::ostream &ost, Vector &generator_labels)
Definition: vector.cpp:1825
int compare_with(discreta_base &a)
Definition: vector.cpp:343
void n_choose_k_first(int n, int k)
Definition: vector.cpp:685
std::ostream & Print(std::ostream &)
Definition: vector.cpp:112
Vector & append_integer(int a)
Definition: vector.cpp:390
void apply_permutation(permutation &p)
Definition: vector.cpp:851
std::ostream & print_intvec(std::ostream &ost)
Definition: vector.cpp:184
void conjugate(discreta_base &a)
Definition: vector.cpp:1074
void first_divisor(Vector &exponents)
Definition: vector.cpp:1663
void append_vector(Vector &v)
Definition: vector.cpp:372
void lehmercode2perm(permutation &p)
Definition: vector.cpp:732
int next_non_trivial_divisor(Vector &exponents)
Definition: vector.cpp:1687
void concatenation(Vector &v1, Vector &v2)
Definition: vector.cpp:1757
std::ostream & print_unformatted(std::ostream &ost)
Definition: vector.cpp:169
void first_regular_word(int n, int q)
Definition: vector.cpp:812
discreta_base & s_i(int i)
Definition: vector.cpp:202
void hadamard_product(Vector &w)
Definition: vector.cpp:1582
void intersect(Vector &b, Vector &c)
Definition: vector.cpp:1597
void add_to(discreta_base &x, discreta_base &y)
Definition: vector.cpp:299
void m_l_x(int l, discreta_base &x)
Definition: vector.cpp:257
Vector & operator=(const discreta_base &x)
Definition: vector.cpp:34
Vector & delete_element(int i)
Definition: vector.cpp:440
void get_first_and_remove(discreta_base &x)
Definition: vector.cpp:451
void sum_of_all_entries(discreta_base &x)
Definition: vector.cpp:671
void vector_of_vectors_lengths(Vector &lengths)
Definition: vector.cpp:1849
discreta_base & operator[](int i)
Definition: discreta.h:826
void m_ii(int i, int a)
Definition: discreta.h:824
void write_mem(memory &m, int debug_depth)
Definition: vector.cpp:954
void PG_element_rank_modified(int &a)
Definition: vector.cpp:1334
Vector & sort_with_logging(permutation &p)
Definition: vector.cpp:548
void sort_with_fellow(Vector &fellow)
Definition: vector.cpp:538
void print_word_nicely(std::ostream &ost, int f_generator_labels, Vector &generator_labels)
Definition: vector.cpp:1778
void read_mem(memory &m, int debug_depth)
Definition: vector.cpp:1001
void content_multiplicities_only(Vector &c, Vector &mult)
Definition: vector.cpp:899
void content(Vector &c, Vector &where)
Definition: vector.cpp:877
bool insert_sorted(discreta_base &x)
Definition: vector.cpp:456
Vector & insert_element(int i, discreta_base &x)
Definition: vector.cpp:410
void get_element_orders(Vector &vec_of_orders)
Definition: vector.cpp:1861
void multiply_out(Vector &primes, discreta_base &x)
Definition: vector.cpp:1712
int next_divisor(Vector &exponents)
Definition: vector.cpp:1669
bool search(discreta_base &x, int *idx)
Definition: vector.cpp:477
void print_word_nicely2(std::ostream &ost)
Definition: vector.cpp:1798
void conjugate_with_inverse(discreta_base &a)
Definition: vector.cpp:1090
std::ostream & print(std::ostream &)
Definition: vector.cpp:135
void copyobject_to(discreta_base &x)
Definition: vector.cpp:72
DISCRETA class for databases.
Definition: discreta.h:1442
bt_key & operator=(const discreta_base &x)
Definition: bt_key.cpp:31
void init_string(int output_size, int field1, int field2)
Definition: bt_key.cpp:109
void init_int2_vec(int field1, int field2, int vec_fst, int vec_len)
Definition: bt_key.cpp:121
void copyobject_to(discreta_base &x)
Definition: bt_key.cpp:65
void init_int2(int field1, int field2)
Definition: bt_key.cpp:104
enum bt_key_kind & type()
Definition: discreta.h:1458
void init(enum bt_key_kind type, int output_size, int field1, int field2)
Definition: bt_key.cpp:84
void init_int4_vec(int field1, int field2, int vec_fst, int vec_len)
Definition: bt_key.cpp:114
std::ostream & print(std::ostream &)
Definition: bt_key.cpp:78
void init_int4(int field1, int field2)
Definition: bt_key.cpp:99
DISCRETA class for a database.
Definition: discreta.h:1672
void file_read(PageTyp *page, const char *message)
Definition: btree.cpp:2159
void page_print(Buffer *BF, std::ostream &ost)
Definition: btree.cpp:2023
void search_interval_int4_int4(int l0, int u0, int l1, int u1, int &first, int &len, int verbose_level)
Definition: btree.cpp:666
void Update(int Node, int *Rise, ItemTyp *RisenItem, int *RisenNeighbourChilds, int f_v)
Definition: btree.cpp:1405
void add_key_int4(int field1, int field2)
Definition: btree.cpp:241
void init(const char *file_name, int f_duplicatekeys, int btree_idx)
Definition: btree.cpp:221
int search(void *pSearchKey, DATATYPE *pData, int *idx, int key_depth, int verbose_level)
Definition: btree.cpp:924
btree & operator=(const discreta_base &x)
Definition: btree.cpp:166
int search_int4_int4(int data1, int data2, int &idx, int verbose_level)
Definition: btree.cpp:783
int search_datref_of_unique_int4(int i, int verbose_level)
Definition: btree.cpp:860
void print_all(std::ostream &ost)
Definition: btree.cpp:1974
void open(int verbose_level)
Definition: btree.cpp:311
int search_datref_of_unique_int4_if_there(int i, int verbose_level)
Definition: btree.cpp:874
void file_write(PageTyp *page, const char *message)
Definition: btree.cpp:2143
void ReadInfo(int verbose_level)
Definition: btree.cpp:388
void print_page(int x, std::ostream &ost)
Definition: btree.cpp:2006
void add_key_string(int output_size, int field1, int field2)
Definition: btree.cpp:257
int page_i_th(int l, Buffer *buffer, int *cur, int *i, int verbose_level)
Definition: btree.cpp:1265
void search_interval_int4_int4_int4(int l0, int u0, int l1, int u1, int l2, int u2, int &first, int &len, int verbose_level)
Definition: btree.cpp:702
void key_print(char *the_key, std::ostream &ost)
Definition: btree.cpp:270
int length(int verbose_level)
Definition: btree.cpp:1165
int SearchPage(Buffer *buffer, void *pSearchKey, DATATYPE *pSearchData, int *cur, int *x, int key_depth, int verbose_level)
Definition: btree.cpp:1045
void item_print(ItemTyp *item, int i, std::ostream &ost)
Definition: btree.cpp:2057
void create(int verbose_level)
Definition: btree.cpp:275
void close(int verbose_level)
Definition: btree.cpp:356
void SavePage(Buffer *BF, int verbose_level)
Definition: btree.cpp:585
void add_key_int2(int field1, int field2)
Definition: btree.cpp:249
void search_interval_int4_int4_int4_int4(int l0, int u0, int l1, int u1, int l2, int u2, int l3, int u3, int &first, int &len, int verbose_level)
Definition: btree.cpp:740
void Compensate(int Precedent, int Node, int Path, int &Underflow, int verbose_level)
Definition: btree.cpp:1811
void Split(Buffer *BF, ItemTyp *Item, int x, int *RisenNeighbourChilds, int verbose_level)
Definition: btree.cpp:1528
void delete_ith(int idx, int verbose_level)
Definition: btree.cpp:1628
void Delete(int Node, int &Underflow, int verbose_level)
Definition: btree.cpp:1689
void insert_key(KEYTYPE *pKey, DATATYPE *pData, int verbose_level)
Definition: btree.cpp:1310
int search_unique_int4_int4_int4_int4(int i0, int i1, int i2, int i3, int verbose_level)
Definition: btree.cpp:826
std::ostream & print(std::ostream &)
Definition: btree.cpp:213
void get_datrefs(int first, int len, Vector &datrefs)
Definition: btree.cpp:911
void copyobject_to(discreta_base &x)
Definition: btree.cpp:200
int search_string(discreta_base &key_op, int &pos, int verbose_level)
Definition: btree.cpp:620
void key_fill_in(char *the_key, Vector &the_object)
Definition: btree.cpp:265
void ith(int l, KEYTYPE *key, DATATYPE *data, int verbose_level)
Definition: btree.cpp:1209
void FindGreatest(int Node1, int &Underflow, Buffer *DKBF, int x, int verbose_level)
Definition: btree.cpp:1761
void LoadPage(Buffer *BF, int x, int verbose_level)
Definition: btree.cpp:533
void file_seek(int page_no)
Definition: btree.cpp:2175
int AllocateRec(int verbose_level)
Definition: btree.cpp:451
void search_interval_int4(int i_min, int i_max, int &first, int &len, int verbose_level)
Definition: btree.cpp:637
void WriteInfo(int verbose_level)
Definition: btree.cpp:417
int SearchBtree(int page, void *pSearchKey, DATATYPE *pData, Buffer *Buf, int *idx, int key_depth, int verbose_level)
Definition: btree.cpp:968
void print_range(int first, int len, std::ostream &ost)
Definition: btree.cpp:1983
int search_unique_int4(int i, int verbose_level)
Definition: btree.cpp:809
DISCRETA class for a database.
Definition: discreta.h:1525
void copyobject_to(discreta_base &x)
Definition: database.cpp:65
void print_by_btree_with_datref(int btree_idx, std::ostream &ost)
Definition: database.cpp:591
void add_data_DB_standard(void *d, int size, uint_4 *datref, int verbose_level)
Definition: database.cpp:866
void get_object_by_unique_int4(int btree_idx, int id, Vector &the_object, int verbose_level)
Definition: database.cpp:498
void free_data_DB(uint_4 datref, int size, int verbose_level)
Definition: database.cpp:1020
void init_with_file_type(const char *filename, int objectkind, int f_compress, int file_type)
Definition: database.cpp:89
void print_by_btree(int btree_idx, std::ostream &ost)
Definition: database.cpp:574
void ith(int i, int btree_idx, KEYTYPE *key_type, DATATYPE *data_type, int verbose_level)
Definition: database.cpp:561
void search_int4_2dimensional(int btree_idx0, int imin0, int imax0, int btree_idx1, int imin1, int imax1, Vector &datrefs, int verbose_level)
Definition: database.cpp:678
void search_int4(int btree_idx, int imin, int imax, Vector &datrefs, int verbose_level)
Definition: database.cpp:664
int get_size_from_datref(uint_4 datref, int verbose_level)
Definition: database.cpp:799
void close(int verbose_level)
Definition: database.cpp:142
void add_object_return_datref(Vector &the_object, uint_4 &datref, int verbose_level)
Definition: database.cpp:256
int get_highest_int4(int btree_idx)
Definition: database.cpp:540
database & operator=(const discreta_base &x)
Definition: database.cpp:31
std::ostream & print(std::ostream &)
Definition: database.cpp:78
void add_object(Vector &the_object, int verbose_level)
Definition: database.cpp:325
void open(int verbose_level)
Definition: database.cpp:128
void create(int verbose_level)
Definition: database.cpp:105
void print_subset(Vector &datrefs, std::ostream &ost)
Definition: database.cpp:614
void delete_object(Vector &the_object, uint_4 datref, int verbose_level)
Definition: database.cpp:339
void add_data_DB_compact(void *d, int size, uint_4 *datref, int verbose_level)
Definition: database.cpp:955
void file_create(int verbose_level)
Definition: database.cpp:1087
void extract_subset(Vector &datrefs, char *out_path, int verbose_level)
Definition: database.cpp:627
void get_object(uint_4 datref, Vector &the_object, int verbose_level)
Definition: database.cpp:374
void ith_object(int i, int btree_idx, Vector &the_object, int verbose_level)
Definition: database.cpp:547
void file_open(int verbose_level)
Definition: database.cpp:1072
void file_close(int verbose_level)
Definition: database.cpp:1120
int get_object_by_unique_int4_if_there(int btree_idx, int id, Vector &the_object, int verbose_level)
Definition: database.cpp:516
void add_data_DB(void *d, int size, uint_4 *datref, int verbose_level)
Definition: database.cpp:855
void search_int4_multi_dimensional(Vector &btree_idx, Vector &i_min, Vector &i_max, Vector &datrefs, int verbose_level)
Definition: database.cpp:696
void file_write(void *p, int size, int nb)
Definition: database.cpp:1153
void file_read(void *p, int size, int nb)
Definition: database.cpp:1168
void user2total(int user, int &total, int &pad)
Definition: database.cpp:202
void init(const char *filename, int objectkind, int f_compress)
Definition: database.cpp:84
DISCRETA class for the design parameters database.
Definition: discreta.h:1887
void text012(hollerith &s0, hollerith &s1, hollerith &s2)
void print2(design_parameter &p, std::ostream &ost)
void text012_extended(design_parameter &p, hollerith &s0, hollerith &s1, hollerith &s2)
design_parameter_source & operator=(const discreta_base &x)
DISCRETA class for design parameters.
Definition: discreta.h:1958
void lambda_of_supplementary(discreta_base &lambda_supplementary)
void supplementary_reduced_t(design_parameter &p)
void init_database(database &D, char *path)
design_parameter_source & source_i(int i)
Definition: discreta.h:1980
int trung_left_partner(int &t1, int &v1, int &k1, discreta_base &lambda1, int &t_new, int &v_new, int &k_new, discreta_base &lambda_new)
int trung_right_partner(int &t1, int &v1, int &k1, discreta_base &lambda1, int &t_new, int &v_new, int &k_new, discreta_base &lambda_new)
design_parameter & operator=(const discreta_base &x)
void supplementary_residual(design_parameter &p)
void ancestor(design_parameter &p, Vector &path, int f_v, int f_vv)
std::ostream & print(std::ostream &)
DISCRETA base class. All DISCRETA classes are derived from this class.
Definition: discreta.h:382
design_parameter_source & as_design_parameter_source()
Definition: discreta.h:416
void integral_division_exact(discreta_base &x, discreta_base &q)
Definition: base.cpp:907
virtual void normalize(discreta_base &p)
Definition: base.cpp:732
discreta_base & divide_by(discreta_base &x)
Definition: base.cpp:621
virtual void integral_division(discreta_base &x, discreta_base &q, discreta_base &r, int verbose_level)
Definition: base.cpp:892
int invert_mod(discreta_base &p)
Definition: base.cpp:407
void add_apply(discreta_base &x)
Definition: base.cpp:724
discreta_matrix & change_to_matrix()
Definition: discreta.h:424
std::ostream & printobjectkind(std::ostream &)
Definition: base.cpp:246
void integral_division_by_integer_exact_apply(int x)
Definition: base.cpp:944
virtual std::ostream & print(std::ostream &)
Definition: base.cpp:219
void integral_division_by_integer_exact(int x, discreta_base &q)
Definition: base.cpp:935
virtual int compare_with_euclidean(discreta_base &a)
Definition: base.cpp:880
int is_divisor(discreta_base &y)
Definition: base.cpp:953
void add(discreta_base &x, discreta_base &y)
Definition: base.cpp:674
discreta_base & i_power_j(int i, int j)
Definition: base.cpp:873
void save_ascii(std::ostream &f)
Definition: base.cpp:1425
number_partition & change_to_number_partition()
Definition: discreta.h:423
void integral_division_by_integer(int x, discreta_base &q, discreta_base &r)
Definition: base.cpp:926
void pack(memory &M, int verbose_level, int debug_depth)
Definition: base.cpp:1387
discreta_base & factorial(int z)
Definition: base.cpp:859
discreta_base & power_longinteger_mod(longinteger &l, discreta_base &p)
Definition: base.cpp:558
virtual void negate_to(discreta_base &x)
Definition: base.cpp:711
void save_file(const char *fname)
Definition: base.cpp:1571
virtual void add_to(discreta_base &x, discreta_base &y)
Definition: base.cpp:690
void mult(discreta_base &x, discreta_base &y)
Definition: base.cpp:367
virtual int compare_with(discreta_base &a)
Definition: base.cpp:274
virtual void mult_to(discreta_base &x, discreta_base &y)
Definition: base.cpp:382
discreta_base & power_int_mod(int l, discreta_base &p)
Definition: base.cpp:499
void add_mod(discreta_base &x, discreta_base &y, discreta_base &p)
Definition: base.cpp:680
design_parameter_source & change_to_design_parameter_source()
Definition: discreta.h:431
void unpack(memory &M, int verbose_level, int debug_depth)
Definition: base.cpp:1418
void read_memory(memory &m, int debug_depth)
Definition: base.cpp:1201
void swap(discreta_base &a)
Definition: base.cpp:179
discreta_base & operator+=(discreta_base &y)
Definition: discreta.h:524
discreta_base & divide_by_exact(discreta_base &x)
Definition: base.cpp:629
std::ostream & println(std::ostream &)
Definition: base.cpp:225
number_partition & as_number_partition()
Definition: discreta.h:407
void modulo(discreta_base &p)
Definition: base.cpp:964
discreta_base & operator=(const discreta_base &x)
Definition: base.cpp:40
design_parameter & change_to_design_parameter()
Definition: discreta.h:432
void copyobject(discreta_base &x)
Definition: base.cpp:194
void mult_mod(discreta_base &x, discreta_base &y, discreta_base &p)
Definition: base.cpp:372
void load_file(const char *fname)
Definition: base.cpp:1578
discreta_base & conjugate(discreta_base &x, discreta_base &y)
Definition: base.cpp:604
void print_to_hollerith(hollerith &h)
Definition: base.cpp:231
discreta_base & power_int(int l)
Definition: base.cpp:447
virtual int invert_to(discreta_base &x)
Definition: base.cpp:424
design_parameter & as_design_parameter()
Definition: discreta.h:417
void write_memory(memory &m, int debug_depth)
Definition: base.cpp:1103
void mult_apply(discreta_base &x)
Definition: base.cpp:436
discreta_base & power_longinteger(longinteger &l)
Definition: base.cpp:526
int order_mod(discreta_base &p)
Definition: base.cpp:659
virtual void copyobject_to(discreta_base &x)
Definition: base.cpp:202
std::ostream & printobjectkindln(std::ostream &)
Definition: base.cpp:252
discreta_base & operator*=(discreta_base &y)
Definition: discreta.h:495
void load_ascii(std::istream &f)
Definition: base.cpp:1478
void extended_gcd(discreta_base &n, discreta_base &u, discreta_base &v, discreta_base &g, int verbose_level)
Definition: base.cpp:972
discreta_base & commutator(discreta_base &x, discreta_base &y)
Definition: base.cpp:589
void vector_mult_to(Vector &x, discreta_base &y)
void binomial(int n_min, int n_max, int k_min, int k_max)
int smith_eliminate_column(discreta_matrix &P, discreta_matrix &Pv, int i, int verbose_level)
void weight_enumerator_brute_force(domain *dom, Vector &v)
void incma_print_ascii(std::ostream &ost, int f_tex, int f_row_decomp, Vector &row_decomp, int f_col_decomp, Vector &col_decomp)
void print_decomposed(std::ostream &ost, Vector &row_decomp, Vector &col_decomp)
void KX_module_join(Vector &v1, unipoly &mue1, Vector &v2, unipoly &mue2, Vector &v3, unipoly &mue3, int verbose_level)
void PG_point_unrank(int i0, int j0, int di, int dj, int length, int a)
void KX_module_order_ideal(int i, unipoly &mue, int verbose_level)
void read_mem(memory &M, int debug_depth)
void det(discreta_base &d, int f_v, int f_vv)
void multiply_2by2_from_right(int i, int j, discreta_base &aii, discreta_base &aij, discreta_base &aji, discreta_base &ajj, int verbose_level)
void calc_hash_key(int key_len, hollerith &hash_key, int f_v)
void companion_matrix(unipoly &m, int verbose_level)
void PG_point_normalize(int i0, int j0, int di, int dj, int length)
int smith_eliminate_row(discreta_matrix &Q, discreta_matrix &Qv, int i, int verbose_level)
void stirling_first(int n_min, int n_max, int k_min, int k_max, int f_signless)
discreta_matrix & m_mn(int m, int n)
void KX_module_apply(unipoly &p, Vector &v)
void power_mod(int r, integer &P, discreta_matrix &C)
void smith_normal_form(discreta_matrix &P, discreta_matrix &Pv, discreta_matrix &Q, discreta_matrix &Qv, int verbose_level)
discreta_matrix & m_mn_n(int m, int n)
void Berlekamp(unipoly &m, int p, int verbose_level)
void mult_to(discreta_base &x, discreta_base &y)
void multiply_2by2_from_left(int i, int j, discreta_base &aii, discreta_base &aij, discreta_base &aji, discreta_base &ajj, int verbose_level)
discreta_matrix & operator=(const discreta_base &x)
void AG_point_rank(int i0, int j0, int di, int dj, int length, int &a)
void incma_print_latex(std::ostream &f, int f_row_decomp, Vector &row_decomp, int f_col_decomp, Vector &col_decomp, int f_labelling_points, Vector &point_labels, int f_labelling_blocks, Vector &block_labels)
void PG_k_q_design(domain *dom, int k, int f_v, int f_vv)
void apply_perms(int f_row_perm, permutation &row_perm, int f_col_perm, permutation &col_perm)
void AG_point_unrank(int i0, int j0, int di, int dj, int length, int a)
void add_to(discreta_base &x, discreta_base &y)
void incma_print_ascii_permuted_and_decomposed(std::ostream &ost, int f_tex, Vector &decomp, permutation &p)
void Simplex_code_generator_matrix(domain *dom, int k, int f_v)
void matrix_mult_to(discreta_matrix &x, discreta_base &y)
void m_iji(int i, int j, int a)
Definition: discreta.h:1099
int get_kernel(Vector &base_cols, discreta_matrix &kernel)
int Gauss(int f_special, int f_complete, Vector &base_cols, int f_P, discreta_matrix &P, int verbose_level)
void MacWilliamsTransform(int n, int q, int f_v)
void write_mem(memory &m, int debug_depth)
void stirling_second(int n_min, int n_max, int k_min, int k_max, int f_ordered)
discreta_matrix & realloc(int m, int n)
void AG_rep(domain *dom, permutation &p, int f_action_from_right)
std::ostream & print(std::ostream &)
void KX_cyclic_module_generator(Vector &v, unipoly &mue, int verbose_level)
void KX_module_minpol(unipoly &p, unipoly &m, unipoly &mue, int verbose_level)
void PG_design_point_vs_hyperplane(domain *dom, int k, int f_v)
void multiply_vector_from_left(Vector &x, Vector &y)
void determinant(discreta_base &d, int verbose_level)
void PG_rep(domain *dom, permutation &p, int f_action_from_right, int f_modified)
void incma_print_latex2(std::ostream &f, int width, int width_10, int f_outline_thin, const char *unit_length, const char *thick_lines, const char *thin_lines, const char *geo_line_width, int f_row_decomp, Vector &row_decomp, int f_col_decomp, Vector &col_decomp, int f_labelling_points, Vector &point_labels, int f_labelling_blocks, Vector &block_labels)
void det_modify_input_matrix(discreta_base &d, int f_v, int f_vv)
void Frobenius(unipoly &m, int p, int verbose_level)
void PG_point_rank(int i0, int j0, int di, int dj, int length, int &a)
DISCRETA class for influencing arithmetic operations.
Definition: discreta.h:1360
layer1_foundations::field_theory::finite_field * get_F()
Definition: domain.cpp:72
DISCRETA string class.
Definition: discreta.h:626
std::ostream & print(std::ostream &)
Definition: hollerith.cpp:90
void read_mem(memory &m, int debug_depth)
Definition: hollerith.cpp:161
void chop_off_extension_if_present(char *ext)
Definition: hollerith.cpp:189
int compare_with(discreta_base &a)
Definition: hollerith.cpp:99
void get_extension_if_present(char *ext)
Definition: hollerith.cpp:200
void copyobject_to(discreta_base &x)
Definition: hollerith.cpp:78
void write_mem(memory &m, int debug_depth)
Definition: hollerith.cpp:146
hollerith & operator=(const discreta_base &x)
Definition: hollerith.cpp:41
DISCRETA integer class.
Definition: discreta.h:667
void add_to(discreta_base &x, discreta_base &y)
Definition: integer.cpp:325
std::ostream & print(std::ostream &)
Definition: integer.cpp:89
int invert_to(discreta_base &x)
Definition: integer.cpp:237
void rand(int low, int high)
Definition: integer.cpp:649
void negate_to(discreta_base &x)
Definition: integer.cpp:393
void copyobject_to(discreta_base &x)
Definition: integer.cpp:81
void normalize(discreta_base &p)
Definition: integer.cpp:430
integer & operator=(const discreta_base &x)
Definition: integer.cpp:49
int compare_with_euclidean(discreta_base &a)
Definition: integer.cpp:589
int compare_with(discreta_base &a)
Definition: integer.cpp:134
void integral_division(discreta_base &x, discreta_base &q, discreta_base &r, int verbose_level)
Definition: integer.cpp:609
void mult_to(discreta_base &x, discreta_base &y)
Definition: integer.cpp:167
DISCRETA class for integers of arbitrary magnitude.
Definition: discreta.h:727
std::ostream & print(std::ostream &)
void integral_division(discreta_base &x, discreta_base &q, discreta_base &r, int verbose_level)
longinteger & operator=(const discreta_base &x)
Definition: longinteger.cpp:66
int compare_with_unsigned(longinteger &b)
void allocate_internal(int sign, int len, const char *p)
void mult_to(discreta_base &x, discreta_base &y)
int compare_with_euclidean(discreta_base &b)
void copyobject_to(discreta_base &x)
Definition: longinteger.cpp:99
void add_to(discreta_base &x, discreta_base &y)
void square_root_floor(discreta_base &x)
LONGINTEGER_REPRESENTATION * s_rep()
int Lucas_test_Mersenne(int m, int verbose_level)
void allocate(int sign, const char *p)
DISCRETA utility class for matrix access.
Definition: discreta.h:1053
DISCRETA class to serialize data structures.
Definition: discreta.h:582
void copyobject_to(discreta_base &x)
Definition: memory.cpp:105
int multiplicity_of_character(char c)
Definition: memory.cpp:363
void realloc(int new_length)
Definition: memory.cpp:208
void append(int length, char *d)
Definition: memory.cpp:189
void read_mem(memory &M, int debug_depth)
Definition: memory.cpp:520
void write_mem(memory &M, int debug_depth)
Definition: memory.cpp:508
memory & operator=(const discreta_base &x)
Definition: memory.cpp:52
void read_file(char *fname, int verbose_level)
Definition: memory.cpp:313
std::ostream & print(std::ostream &ost)
Definition: memory.cpp:127
void write_file(char *fname, int verbose_level)
Definition: memory.cpp:337
void init(int length, char *d)
Definition: memory.cpp:138
DISCRETA class for partitions of an integer.
Definition: discreta.h:1310
number_partition & operator=(const discreta_base &x)
std::ostream & print(std::ostream &)
void multinomial_ordered(discreta_base &res, int f_v)
void multinomial(discreta_base &res, int f_v)
DISCRETA class for bulk storage.
Definition: discreta.h:1848
int search_key_pair(int len, btree_page_registry_key_pair *K, int &idx)
Definition: page_table.cpp:275
void allocate_rec(Buffer *BF, int buf_idx, int x, int verbose_level)
Definition: page_table.cpp:383
void save_page(Buffer *BF, int buf_idx, int verbose_level)
Definition: page_table.cpp:318
int load_page(Buffer *BF, int x, int buf_idx, int verbose_level)
Definition: page_table.cpp:357
layer1_foundations::data_structures::page_storage * btree_pages
Definition: discreta.h:1850
void reallocate_table(int verbose_level)
Definition: page_table.cpp:223
btree_page_registry_key_pair * btree_table
Definition: discreta.h:1853
void write_pages_to_file(btree *B, int buf_idx, int verbose_level)
Definition: page_table.cpp:418
int search(int len, int btree_idx, int btree_x, int &idx)
Definition: page_table.cpp:266
void init(int verbose_level)
Definition: page_table.cpp:197
DISCRETA permutation class.
Definition: discreta.h:976
void read_mem(memory &m, int debug_depth)
void embed_at(permutation &b, int n, int at)
void remove_fixpoint(permutation &b, int i)
void AddNCycle(int first, int len)
std::ostream & print(std::ostream &)
void sscan(const char *s, int verbose_level)
void Add3Cycle(int i0, int i1, int i2)
void copyobject_to(discreta_base &x)
void write_mem(memory &m, int debug_depth)
void Add5Cycle(int i0, int i1, int i2, int i3, int i4)
void add_n_fixpoints_in_front(permutation &b, int n)
void cycle_type(Vector &type, int verbose_level)
std::ostream & print_cycle(std::ostream &ost)
void add_fixpoint_in_front(permutation &b)
void induce_on_2tuples(permutation &p, int f_injective)
void mult_to(discreta_base &x, discreta_base &y)
void cartesian_product_action(permutation &a, permutation &b)
void set_print_type_PG_1_q_element(domain *dom)
Definition: permutation.cpp:41
void add_n_fixpoints_at_end(permutation &b, int n)
void Add4Cycle(int i0, int i1, int i2, int i3)
void induce_on_lines_of_PG_k_q(int k, int q, permutation &per, int verbose_level)
void induce_action_on_blocks(permutation &gg, Vector &B)
std::ostream & print_list(std::ostream &ost)
int nb_of_inversions(int verbose_level)
permutation & operator=(const discreta_base &x)
Definition: permutation.cpp:93
void restrict_to_subset(permutation &q, int first, int len)
void singer_cycle_on_points_of_projective_plane(int p, int f_modified, int verbose_level)
void join(permutation &a, permutation &b)
void convert_digit(int i, hollerith &a)
Definition: permutation.cpp:47
void scan(std::istream &is, int verbose_level)
DISCRETA class related to printing of objects.
Definition: discreta.h:1426
printing_mode(enum printing_mode_enum printing_mode)
Definition: global.cpp:1581
DISCRETA class for polynomials in one variable.
Definition: discreta.h:1236
int is_squarefree(int verbose_level)
Definition: unipoly.cpp:449
void singer_candidate(int p, int f, int b, int a)
Definition: unipoly.cpp:555
void normal_base(int p, discreta_matrix &F, discreta_matrix &N, int verbose_level)
Definition: unipoly.cpp:718
void mult_to(discreta_base &x, discreta_base &y)
Definition: unipoly.cpp:196
void integral_division(discreta_base &x, discreta_base &q, discreta_base &r, int verbose_level)
Definition: unipoly.cpp:346
void weight_enumerator_MDS_code(int n, int k, int q, int verbose_level)
Definition: unipoly.cpp:938
void largest_divisor_prime_to(unipoly &q, unipoly &r)
Definition: unipoly.cpp:676
int first_irreducible_polynomial(int p, unipoly &m, discreta_matrix &F, discreta_matrix &N, Vector &v, int verbose_level)
Definition: unipoly.cpp:797
void add_to(discreta_base &x, discreta_base &y)
Definition: unipoly.cpp:231
void numeric_polynomial(int n, int q)
Definition: unipoly.cpp:537
void Singer(int p, int f, int verbose_level)
Definition: unipoly.cpp:564
int next_irreducible_polynomial(int p, unipoly &m, discreta_matrix &F, discreta_matrix &N, Vector &v, int verbose_level)
Definition: unipoly.cpp:824
int is_irreducible_GFp(int p, int verbose_level)
Definition: unipoly.cpp:471
unipoly & operator=(const discreta_base &x)
Definition: unipoly.cpp:35
void copyobject_to(discreta_base &x)
Definition: unipoly.cpp:69
int is_irreducible(int q, int verbose_level)
Definition: unipoly.cpp:493
void charpoly(int q, int size, int *mtx, int verbose_level)
Definition: unipoly.cpp:1005
void get_an_irreducible_polynomial(int f, int verbose_level)
Definition: unipoly.cpp:618
std::ostream & print_as_vector(std::ostream &ost)
Definition: unipoly.cpp:171
void Phi(int n, int f_v)
Definition: unipoly.cpp:875
void negate_to(discreta_base &x)
Definition: unipoly.cpp:265
int compare_with_euclidean(discreta_base &a)
Definition: unipoly.cpp:332
std::ostream & print(std::ostream &)
Definition: unipoly.cpp:87
int is_primitive(int m, int p, Vector &vp, int verbose_level)
Definition: unipoly.cpp:513
void evaluate_at(discreta_base &x, discreta_base &y)
Definition: unipoly.cpp:662
void normalize(discreta_base &p)
Definition: unipoly.cpp:850
DISCRETA class related to class domain.
Definition: discreta.h:1413
#define MAX_FSTREAM_TABLE
Definition: discreta.h:1806
#define BTREEMAXKEYLEN
Definition: discreta.h:1490
#define BTREEMAXPAGESIZE
Definition: discreta.h:1616
unsigned char uchar
Definition: foundations.h:204
int int_4
Definition: foundations.h:181
unsigned int uint_4
Definition: foundations.h:184
short int_2
Definition: foundations.h:180
algebra, combinatorics and graph theory, geometry, linear algebra, number theory, data structures,...
Definition: a_domain.cpp:18
int root_buf_alloc(void)
Definition: btree.cpp:123
void print_intvec_mod_10(Vector &v)
Definition: global.cpp:924
int determine_restricted_number_of_designs_t(database &D, btree &B, int btree_idx_tvkl, int t, int first, int len)
Definition: design.cpp:1031
void fill_char(void *v, int cnt, int c)
Definition: global.cpp:1605
int is_Orbiter_finite_field_domain(domain *&d)
Definition: domain.cpp:229
void discreta_print_factorization(Vector &primes, Vector &exponents, std::ostream &o)
void print_clan_tex(discreta_base &t, discreta_base &v, discreta_base &k, int delta_lambda, discreta_base &m_max)
Definition: design.cpp:195
int calc_redinv(int t, int v, int k, int delta_lambda, int &c, int &T, int &V, int &K, int &Delta_lambda)
Definition: design.cpp:243
domain * allocate_finite_field_domain(int q, int verbose_level)
Definition: domain.cpp:378
void html_foot(std::ostream &ost)
enum printing_mode_enum current_printing_mode()
Definition: global.cpp:1573
void bt_key_print_int4(char **key, ostream &ost)
Definition: bt_key.cpp:169
discreta_base * calloc_nobjects_plus_length(int n, kind k)
Definition: global.cpp:121
int bt_key_compare_int4(char **p_key1, char **p_key2)
Definition: bt_key.cpp:252
void design_lambda_max_half(int t, int v, int k, discreta_base &lambda_max_half)
Definition: design.cpp:100
void texable_string(char *in, char *out)
Definition: global.cpp:1394
void print_factorization_hollerith(Vector &primes, Vector &exponents, hollerith &h)
Definition: global.cpp:414
int calc_delta_lambda(int v, int t, int k, int f_v)
Definition: design.cpp:47
void uchar_move(uchar *p, uchar *q, int len)
void determinant_map(discreta_base &x, discreta_base &d)
void free_nobjects_plus_length(discreta_base *p)
Definition: global.cpp:144
void stirling_first(int n, int k, int f_signless, discreta_base &res, int verbose_level)
Definition: global.cpp:997
void freeobject(discreta_base *p)
Definition: global.cpp:89
void Catalan_nk_matrix(int n, discreta_matrix &Cnk, int verbose_level)
Definition: global.cpp:1105
discreta_base * callocobject(kind k)
Definition: global.cpp:81
int finite_field_domain_primitive_root()
Definition: domain.cpp:275
void ratio_int(int *Px, int *Py, int idx_from, int idx_to, int idx_result, double r)
Definition: global.cpp:1458
void sieve_primes(Vector &v, int from, int to, int limit, int verbose_level)
Definition: global.cpp:880
int bt_key_int2_cmp(char *p1, char *p2)
Definition: bt_key.cpp:148
int bt_lexicographic_cmp(char *p1, char *p2)
Definition: bt_key.cpp:128
fstream * fstream_table[MAX_FSTREAM_TABLE]
Definition: btree.cpp:39
void int_vector_realloc(int *&p, int old_length, int new_length)
Definition: global.cpp:1892
int sqrt_mod_involved(int a, int p, int verbose_level)
Definition: global.cpp:628
void tuple2_rank(int rank, int &i, int &j, int n, int f_injective)
Definition: global.cpp:1327
void design_mendelsohn_rhs(int v, int t, int k, discreta_base &lambda, int m, int s, Vector &rhs)
Definition: design.cpp:314
void bt_key_get_int2(char **key, int_2 &i)
Definition: bt_key.cpp:492
void free_m_times_n_objects(discreta_base *p)
Definition: global.cpp:186
void database_init(int verbose_level)
Definition: btree.cpp:53
void intersection_of_vectors(Vector &V, Vector &v)
Definition: vector.cpp:1618
void design_parameter_database_clan_report(char *path_db, Vector &ancestor, Vector &clan_lambda, Vector &clan_member, Vector &clan_member_path)
Definition: design.cpp:1414
int bt_key_int_cmp(char *p1, char *p2)
Definition: bt_key.cpp:133
struct orbiter::layer2_discreta::buffer Buffer
DISCRETA auxiliary class related to the class database.
void page_table_exit(int verbose_level)
Definition: page_table.cpp:51
domain * get_current_domain()
Definition: domain.cpp:179
int page_table_alloc(int verbose_level)
Definition: page_table.cpp:69
void sieve(Vector &primes, int factorbase, int verbose_level)
Definition: global.cpp:857
void int_matrix_realloc(int *&p, int old_m, int new_m, int old_n, int new_n)
Definition: global.cpp:1917
void bt_key_print_int2(char **key, ostream &ost)
Definition: bt_key.cpp:176
void prepare_design_parameters_from_id(database &D, int id, hollerith &h)
Definition: design.cpp:1098
void Binomial(int n, int k, discreta_base &n_choose_k)
Definition: global.cpp:1203
void page_table_free(int idx, int verbose_level)
Definition: page_table.cpp:98
void printobjectkind(std::ostream &ost, kind k)
void design_lambda_ij(int t, int v, int k, discreta_base &lambda, int i, int j, discreta_base &lambda_ij)
Definition: design.cpp:145
int calc_resinv(int t, int v, int k, int delta_lambda, int &c, int &T, int &V, int &K, int &Delta_lambda)
Definition: design.cpp:276
void frobenius_in_AG(domain *dom, int n, permutation &p)
Definition: global.cpp:1528
void free_nobjects(discreta_base *p, int n)
Definition: global.cpp:111
int Gauss_int(int *A, int f_special, int f_complete, int *base_cols, int f_P, int *P, int m, int n, int Pn, int q, int *add_table, int *mult_table, int *negate_table, int *inv_table, int verbose_level)
Definition: global.cpp:1716
struct orbiter::layer2_discreta::keycarrier KEYCARRIER
DISCRETA auxiliary class related to the class database.
int design_parameter_database_already_there(database &D, design_parameter &p, int &idx)
Definition: design.cpp:329
void uint4_swap(uint_4 &x, uint_4 &y)
Definition: global.cpp:265
int factor_if_prime_power(int n, int *p, int *e)
Definition: global.cpp:482
int finite_field_domain_characteristic(domain *d)
Definition: domain.cpp:263
int sqrt_mod(int a, int p, int verbose_level)
Definition: global.cpp:580
int is_ancestor(int t, int v, int k)
Definition: design.cpp:215
void prepare_link(hollerith &link, int id)
Definition: design.cpp:1116
void merge_with_fellows(Vector &v1, Vector &v1_fellow, Vector &v2, Vector &v2_fellow, Vector &v3, Vector &v3_fellow)
Definition: vector.cpp:1133
void bt_key_fill_in(char *key, Vector &V, Vector &the_object)
Definition: bt_key.cpp:416
void midpoint_of_5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int idx)
Definition: global.cpp:1448
int hash_int(int hash0, int a)
Definition: global.cpp:1618
int is_finite_field_domain(domain *&d)
Definition: domain.cpp:242
void stirling_second(int n, int k, int f_ordered, discreta_base &res, int verbose_level)
Definition: global.cpp:938
struct orbiter::layer2_discreta::pagetyp PageTyp
DISCRETA auxiliary class related to the class database.
int bt_key_compare_int2(char **p_key1, char **p_key2)
Definition: bt_key.cpp:277
void design_parameter_database_family_report(char *path_db, int t, int v, int k, int lambda, int minimal_t)
Definition: design.cpp:1304
void signum_map(discreta_base &x, discreta_base &d)
page_table * page_table_pointer(int slot)
Definition: page_table.cpp:130
void database_exit(void)
Definition: btree.cpp:98
int is_GFq_domain(domain *&d)
Definition: domain.cpp:216
void root_buf_free(int i)
Definition: btree.cpp:138
void design_parameter_database_read_design_txt(char *fname_design_txt, char *path_db, int f_form_closure, int minimal_t, int verbose_level)
Definition: design.cpp:553
const char * discreta_arch
Definition: global.cpp:37
void midpoint_of_2(int *Px, int *Py, int i1, int i2, int idx)
Definition: global.cpp:1438
void design_lambda_ijs_matrix(int t, int v, int k, discreta_base &lambda, int s, discreta_matrix &M)
Definition: design.cpp:110
struct orbiter::layer2_discreta::datatype DATATYPE
DISCRETA auxiliary class related to the class database.
int queue_get_and_remove_first_element(Vector &Q)
Definition: global.cpp:1642
int design_parameters_admissible(int v, int t, int k, discreta_base &lambda)
Definition: design.cpp:30
void bt_key_fill_in_int2(char **p_key, discreta_base &key_op)
Definition: bt_key.cpp:384
void finite_field_domain_base_over_subfield(Vector &b)
Definition: domain.cpp:312
int nb_PG_lines(int n, int q)
const char * kind_ascii(kind k)
Definition: global.cpp:213
void fine_tune(layer1_foundations::field_theory::finite_field *F, int *mtxD, int verbose_level)
Definition: global.cpp:2032
void Catalan(int n, Vector &v, int verbose_level)
Definition: global.cpp:1074
void free_finite_field_domain(domain *dom)
Definition: domain.cpp:415
void bt_key_fill_in_int4(char **p_key, discreta_base &key_op)
Definition: bt_key.cpp:364
page_table * ppage_table
Definition: discreta.h:1841
void print_classification_tex(Vector &content, Vector &multiplicities)
Definition: global.cpp:1684
int Maxfit(int i, int j)
Definition: design.cpp:1806
int queue_length(Vector &Q)
Definition: global.cpp:1661
void print_clan_tex_int(int t, int v, int k)
Definition: design.cpp:177
@ PERM_GROUP
PERM_GROUP.
Definition: discreta.h:76
@ PERMUTATION
PERMUTATION.
Definition: discreta.h:57
@ PERM_GROUP_STAB_CHAIN
PERM_GROUP_STAB_CHAIN.
Definition: discreta.h:77
@ DESIGN_PARAMETER
DESIGN_PARAMETER.
Definition: discreta.h:81
@ HOLLERITH
HOLLERITH.
Definition: discreta.h:71
@ NUMBER_PARTITION
NUMBER_PARTITION.
Definition: discreta.h:55
@ BITMATRIX
BITMATRIX.
Definition: discreta.h:89
@ LONGINTEGER
LONGINTEGER.
Definition: discreta.h:65
@ DESIGN_PARAMETER_SOURCE
DESIGN_PARAMETER_SOURCE.
Definition: discreta.h:86
std::ostream & operator<<(std::ostream &ost, class discreta_base &p)
void pop_domain(domain *&d)
Definition: domain.cpp:160
void merge(Vector &v1, Vector &v2, Vector &v3)
Definition: vector.cpp:1099
void bt_key_fill_in_string(char **p_key, int output_size, discreta_base &key_op)
Definition: bt_key.cpp:404
void page_table_init(int verbose_level)
Definition: page_table.cpp:33
void Catalan_n(int n, Vector &v, discreta_base &res, int verbose_level)
Definition: global.cpp:1087
void design_parameter_database_closure(database &D, int highest_id_already_closed, int minimal_t, int verbose_level)
Definition: design.cpp:379
int fstream_table_used[MAX_FSTREAM_TABLE]
Definition: btree.cpp:38
void the_first_n_primes(Vector &P, int n)
Definition: global.cpp:1420
void queue_init(Vector &Q, int elt)
Definition: global.cpp:1633
void bt_key_get_int4(char **key, int_4 &i)
Definition: bt_key.cpp:482
void N_choose_K(discreta_base &n, int k, discreta_base &res)
Definition: global.cpp:1165
int determine_restricted_number_of_designs_t_v(database &D, btree &B, int btree_idx_tvkl, int t, int v, int first, int len)
Definition: design.cpp:1058
int tuple2_unrank(int i, int j, int n, int f_injective)
Definition: global.cpp:1349
int NormRemainder(int a, int m)
Definition: global.cpp:538
void call_system(char *cmd)
Definition: global.cpp:1599
void design_lambda_max(int t, int v, int k, discreta_base &lambda_max)
Definition: design.cpp:95
void design_parameter_database_export_tex(char *path_db)
Definition: design.cpp:641
void html_head(std::ostream &ost, char *title_long, char *title_short)
void queue_append(Vector &Q, int elt)
Definition: global.cpp:1669
void translation_in_AG(domain *dom, int n, int i, discreta_base &a, permutation &p)
Definition: global.cpp:1551
void int_vector_shorten(int *&p, int new_length)
Definition: global.cpp:1905
void Krawtchouk(int n, int q, int i, int j, discreta_base &a)
Definition: global.cpp:1305
void factor_integer(int n, Vector &primes, Vector &exponents)
Definition: global.cpp:330
void merge_with_value(Vector &idx1, Vector &idx2, Vector &idx3, Vector &val1, Vector &val2, Vector &val3)
Definition: vector.cpp:1172
int is_GFp_domain(domain *&d)
Definition: domain.cpp:203
const char * discreta_home
Definition: global.cpp:36
void bt_key_print(char *key, Vector &V, ostream &ost)
Definition: bt_key.cpp:183
int bt_key_compare(char *key1, char *key2, Vector &V, int depth)
Definition: bt_key.cpp:302
void design_mendelsohn_coefficient_matrix(int t, int m, discreta_matrix &M)
Definition: design.cpp:295
discreta_base * calloc_nobjects(int n, kind k)
Definition: global.cpp:94
int fstream_table_get_free_entry()
Definition: btree.cpp:109
void design_parameter_database_clans(char *path_db, int f_html, int f_v, int f_vv)
Definition: design.cpp:1127
void Catalan_nk_star_matrix(int n, discreta_matrix &Cnk, int verbose_level)
Definition: global.cpp:1121
void perm2permutation(int *a, int n, permutation &p)
Definition: global.cpp:1706
int calc_derinv(int t, int v, int k, int delta_lambda, int &c, int &T, int &V, int &K, int &Delta_lambda)
Definition: design.cpp:265
void frobenius_in_PG(domain *dom, int n, permutation &p)
Definition: global.cpp:1505
const char * action_kind_ascii(action_kind k)
Definition: global.cpp:256
int remainder_mod(int i, int n)
Definition: global.cpp:317
void design_parameter_database_add_if_new(database &D, design_parameter &p, int &highest_id, int verbose_level)
Definition: design.cpp:343
int invert_mod_integer(int i, int p)
Definition: global.cpp:285
@ on_group_elements_via_conjugation_using_group_table
Definition: discreta.h:115
@ on_subset_of_group_elements_by_conjugation_with_table
Definition: discreta.h:114
@ on_subset_of_group_elements_by_conjugation
Definition: discreta.h:113
void output_texable_string(std::ostream &ost, char *in)
discreta_base * calloc_m_times_n_objects(int m, int n, kind k)
Definition: global.cpp:163
int is_trivial_clan(int t, int v, int k)
Definition: design.cpp:164
int finite_field_domain_order_int(domain *d)
Definition: domain.cpp:251
int code_is_irreducible(int k, int nmk, int idx_zero, int *M)
Definition: global.cpp:1933
void push_domain(domain *d)
Definition: domain.cpp:150
void Catalan_nk_star(int n, int k, discreta_matrix &Cnk, discreta_base &res, int verbose_level)
Definition: global.cpp:1146
struct orbiter::layer2_discreta::itemtyp ItemTyp
DISCRETA auxiliary class related to the class database.
void design_lambda_ijs(int t, int v, int k, discreta_base &lambda, int s, int i, int j, discreta_base &lambda_ijs)
Definition: design.cpp:123
the orbiter library for the classification of combinatorial objects
DISCRETA internal class related to class database.
Definition: discreta.h:1830
DISCRETA auxiliary class related to the class database.
Definition: discreta.h:1659
DISCRETA auxiliary class related to the class database.
Definition: discreta.h:1507
DISCRETA auxiliary class related to the class database.
Definition: discreta.h:1631
DISCRETA auxiliary class related to the class database.
Definition: discreta.h:1498
DISCRETA internal class to represent long integers.
Definition: discreta.h:365
DISCRETA auxiliary class related to the class database.
Definition: discreta.h:1642
ItemTyp Item[BTREEMAXPAGESIZE+1]
Definition: discreta.h:1648
DISCRETA internal class.
Definition: discreta.h:353
LONGINTEGER_REPRESENTATION * longinteger_rep
Definition: discreta.h:359