11#ifndef ORBITER_SRC_LIB_FOUNDATIONS_FOUNDATIONS_H_
12#define ORBITER_SRC_LIB_FOUNDATIONS_FOUNDATIONS_H_
96#if __cplusplus >= 201103L
97#define COLOR_UNICODE "\u001b"
99#define COLOR_UNICODE "\x1b"
102#define RESET_COLOR_SCHEME COLOR_UNICODE "[0m"
103#define BLACK COLOR_UNICODE "[30m"
104#define RED COLOR_UNICODE "[31m"
105#define GREEN COLOR_UNICODE "[32m"
106#define YELLOW COLOR_UNICODE "[33m"
107#define BLUE COLOR_UNICODE "[34m"
108#define MAGENTA COLOR_UNICODE "[35m"
109#define CYAN COLOR_UNICODE "[36m"
110#define WHITE COLOR_UNICODE "[37m"
112#define BRIGHT_BLACK COLOR_UNICODE "[30;1m"
113#define BRIGHT_RED COLOR_UNICODE "[31;1m"
114#define BRIGHT_GREEN COLOR_UNICODE "[32;1m"
115#define BRIGHT_YELLOW COLOR_UNICODE "[33;1m"
116#define BRIGHT_BLUE COLOR_UNICODE "[34;1m"
117#define BRIGHT_MAGENTA COLOR_UNICODE "[35;1m"
118#define BRIGHT_CYAN COLOR_UNICODE "[36;1m"
119#define BRIGHT_WHITE COLOR_UNICODE "[37;1m"
128#if defined(unix) || defined(__unix) || defined(__unix__)
132#if defined(_WIN32) || defined(_WIN64)
136#if defined(__APPLE__) || defined(__MACH__)
138#define SYSTEM_IS_MACINTOSH
142#if defined(__linux__) || defined(linux) || defined(__linux)
162#define MAGIC_SYNC 762873656L
167#undef int_HAS_2_charS
168#define int_HAS_4_charS
169#undef int_HAS_8_charS
171#ifdef int_HAS_2_charS
175typedef unsigned short uint_2;
176typedef unsigned long uint_4;
177typedef unsigned long uint_8;
179#ifdef int_HAS_4_charS
187#ifdef int_HAS_8_charS
189typedef short int int_4;
191typedef unsigned short uint_2;
192typedef unsigned short int uint_4;
193typedef unsigned int uint_8;
210#define PAGE_LENGTH_LOG 20
211#define MAX_PAGE_SIZE_IN_charS (5 * 1L << 20)
212#define BUFSIZE 100000
213#undef DEBUG_PAGE_STORAGE
216#define MINIMUM(x, y) ( ((x) < (y)) ? (x) : (y) )
217#define MAXIMUM(x, y) ( ((x) > (y)) ? (x) : (y) )
218#define MIN(x, y) ( ((x) < (y)) ? (x) : (y) )
219#define MAX(x, y) ( ((x) > (y)) ? (x) : (y) )
220#define ABS(x) ( ((x) < 0 ) ? (-(x)) : (x) )
221#define EVEN(x) ( ((x) % 2) == 0 )
222#define ODD(x) ( ((x) % 2) == 1 )
223#define DOUBLYEVEN(x) ( ((x) % 4) == 0 )
224#define SINGLYEVEN(x) ( ((x) % 4) == 2 )
225#define ONE_char_int(a) (((a) > -126) && ((a) < 127))
226#define ONE_MILLION 1000000
227#define ONE_HUNDRED_THOUSAND 100000
237#define M_PI 3.14159265358979323846264
249namespace layer1_foundations {
259 class algebra_global;
260 class generators_symplectic_group;
263 class group_generators_domain;
265 class matrix_block_data;
266 class null_polarity_generator;
275namespace algebraic_geometry {
278 class arc_lifting_with_two_lines;
281 class del_pezzo_surface_of_degree_two_domain;
282 class del_pezzo_surface_of_degree_two_object;
283 class eckardt_point_info;
285 class quartic_curve_domain;
286 class quartic_curve_object_properties;
287 class quartic_curve_object;
288 class schlaefli_labels;
290 class seventytwo_cases;
291 class surface_domain;
292 class surface_object_properties;
293 class surface_object;
294 class web_of_cubic_curves;
300namespace coding_theory {
303 class coding_theory_domain;
304 class create_BCH_code;
310namespace combinatorics {
313 class boolean_function_domain;
315 class classification_of_objects_description;
316 class classification_of_objects_report_options;
317 class classification_of_objects;
318 class combinatorics_domain;
319 class encoded_combinatorial_object;
321 class pentomino_puzzle;
323 class tdo_refinement_description;
324 class tdo_refinement;
325 class tdo_scheme_compute;
326 class tdo_scheme_synthetic;
327 struct solution_file_data;
334namespace cryptography {
337 class cryptography_domain;
343namespace data_structures {
349 class classify_bitvectors;
350 class classify_using_canonical_forms;
352 class data_input_stream_description;
353 class data_input_stream;
354 class data_structures_global;
362 class partitionstack;
363 class set_builder_description;
365 class set_of_sets_lint;
370 class tally_vector_data;
372 class vector_hashing;
379namespace expression_parser {
382 class expression_parser_domain;
383 class expression_parser;
386 class syntax_tree_node_terminal;
387 class syntax_tree_node;
395namespace field_theory {
398 class finite_field_activity_description;
399 class finite_field_activity;
400 class finite_field_description;
402 class finite_field_implementation_by_tables;
403 class finite_field_implementation_wo_tables;
406 class subfield_structure;
475namespace graph_theory {
490class nauty_interface;
539namespace number_theory {
551namespace orbiter_kernel_system {
574namespace orthogonal_geometry {
587namespace ring_theory {
625#define NEW_int(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_int(n, __FILE__, __LINE__)
626#define NEW_int_with_tracking(n, file, line) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_int(n, file, line)
627#define NEW_pint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pint(n, __FILE__, __LINE__)
628#define NEW_lint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_lint(n, __FILE__, __LINE__)
629#define NEW_plint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_plint(n, __FILE__, __LINE__)
630#define NEW_ppint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_ppint(n, __FILE__, __LINE__)
631#define NEW_pplint(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pplint(n, __FILE__, __LINE__)
632#define NEW_char(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_char(n, __FILE__, __LINE__)
633#define NEW_char_with_tracking(n, file, line) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_char(n, file, line)
634#define NEW_uchar(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_uchar(n, __FILE__, __LINE__)
635#define NEW_pchar(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pchar(n, __FILE__, __LINE__)
636#define NEW_puchar(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_puchar(n, __FILE__, __LINE__)
637#define NEW_pvoid(n) orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_pvoid(n, __FILE__, __LINE__)
638#define NEW_OBJECT(type) (type *)orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_OBJECT(new type, (std::size_t) sizeof(type), #type, __FILE__, __LINE__)
639#define NEW_OBJECTS(type, n) (type *)orbiter_kernel_system::Orbiter->global_mem_object_registry->allocate_OBJECTS(new type[n], n, (std::size_t) sizeof(type), #type, __FILE__, __LINE__)
640#define FREE_int(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_int(p, __FILE__, __LINE__)
641#define FREE_pint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pint(p, __FILE__, __LINE__)
642#define FREE_lint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_lint(p, __FILE__, __LINE__)
643#define FREE_plint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_plint(p, __FILE__, __LINE__)
644#define FREE_ppint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_ppint(p, __FILE__, __LINE__)
645#define FREE_pplint(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pplint(p, __FILE__, __LINE__)
646#define FREE_char(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_char(p, __FILE__, __LINE__)
647#define FREE_uchar(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_uchar(p, __FILE__, __LINE__)
648#define FREE_pchar(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pchar(p, __FILE__, __LINE__)
649#define FREE_puchar(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_puchar(p, __FILE__, __LINE__)
650#define FREE_pvoid(p) orbiter_kernel_system::Orbiter->global_mem_object_registry->free_pvoid(p, __FILE__, __LINE__)
651#define FREE_OBJECT(p) {orbiter_kernel_system::Orbiter->global_mem_object_registry->free_OBJECT(p, __FILE__, __LINE__); delete p;}
652#define FREE_OBJECTS(p) {orbiter_kernel_system::Orbiter->global_mem_object_registry->free_OBJECTS(p, __FILE__, __LINE__); delete [] p;}
654#define NEW_int(n) new int[n]
655#define NEW_int_with_tracking(n, file, line) new int[n]
656#define NEW_pint(n) new pint[n]
657#define NEW_lint(n) new long int[n]
658#define NEW_lint(n) new (long int *)[n]
659#define NEW_ppint(n) new ppint[n]
660#define NEW_pplint(n) new pplint[n]
661#define NEW_char(n) new char[n]
662#define NEW_char_with_tracking(n, file, line) new char[n]
663#define NEW_uchar(n) new uchar[n]
664#define NEW_pchar(n) new pchar[n]
665#define NEW_puchar(n) new puchar[n]
666#define NEW_pvoid(n) new pvoid[n]
667#define NEW_OBJECT(type) new type
668#define NEW_OBJECTS(type, n) new type[n]
669#define FREE_int(p) delete [] p
670#define FREE_pint(p) delete [] p
671#define FREE_lint(p) delete [] p
672#define FREE_plint(p) delete [] p
673#define FREE_ppint(p) delete [] p
674#define FREE_pplint(p) delete [] p
675#define FREE_char(p) delete [] p
676#define FREE_uchar(p) delete [] p
677#define FREE_pchar(p) delete [] p
678#define FREE_puchar(p) delete [] p
679#define FREE_pvoid(p) delete [] p
680#define FREE_OBJECT(p) delete p
681#define FREE_OBJECTS(p) delete [] p
685#define Int_vec_print(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print(A, B, C)
686#define Lint_vec_print(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print(A, B, C)
687#define Int_vec_print_fully(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_fully(A, B, C)
688#define Lint_vec_print_fully(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print_fully(A, B, C)
690#define Int_vec_print_integer_matrix(A,B,C,D) orbiter_kernel_system::Orbiter->Int_vec->print_integer_matrix(A, B, C, D)
691#define Int_vec_print_integer_matrix_width(A,B,C,D,E,F) orbiter_kernel_system::Orbiter->Int_vec->print_integer_matrix_width(A, B, C, D, E, F)
693#define Int_vec_copy(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->copy(A, B, C)
694#define Lint_vec_copy(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->copy(A, B, C)
696#define Int_vec_print_to_str(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_to_str(A, B, C)
697#define Lint_vec_print_to_str(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print_to_str(A, B, C)
700#define Int_vec_print_str_naked(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_str_naked(A, B, C)
703#define Int_vec_print_GAP(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->print_GAP(A, B, C)
704#define Lint_vec_print_GAP(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->print_GAP(A, B, C)
707#define Int_matrix_print(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->matrix_print(A, B, C)
708#define Lint_matrix_print(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->matrix_print(A, B, C)
710#define Int_matrix_print_bitwise(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->matrix_print_bitwise(A, B, C)
713#define Int_vec_zero(A, B) orbiter_kernel_system::Orbiter->Int_vec->zero(A, B);
714#define Lint_vec_zero(A, B) orbiter_kernel_system::Orbiter->Lint_vec->zero(A, B);
716#define Int_vec_scan(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->scan(A, B, C)
717#define Lint_vec_scan(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->scan(A, B, C)
719#define Get_int_vector_from_label(A, B, C, D) orbiter_kernel_system::Orbiter->get_int_vector_from_label(A, B, C, D)
720#define Get_lint_vector_from_label(A, B, C, D) orbiter_kernel_system::Orbiter->get_lint_vector_from_label(A, B, C, D)
722#define Int_vec_copy_to_lint(A, B, C) orbiter_kernel_system::Orbiter->Int_vec->copy_to_lint(A, B, C)
723#define Lint_vec_copy_to_int(A, B, C) orbiter_kernel_system::Orbiter->Lint_vec->copy_to_int(A, B, C)
726#define Int_vec_print_integer_matrix_in_C_source(A, B, C, D) orbiter_kernel_system::Orbiter->Int_vec->print_integer_matrix_in_C_source(A, B, C, D)
865#include "data_structures/data_structures.h"
871#include "graph_theory/graph_theory.h"
872#include "graph_theory_nauty/graph_theory_nauty.h"
an individual command which is part of a function expressed in reverse polish notation
description of a function in reverse polish notation from the command line
a set of functions in reverse polish notation
isomorphism between the W(3,q) and the Q(4,q) generalized quadrangles
a line in the projective plane created using the Andre construction
a point in the projective plane created using the Andre construction
Andre / Bruck / Bose construction of a translation plane from a spread.
arcs, ovals, hyperovals etc. in projective planes
arcs, ovals, hyperovals etc. in projective planes
decomposition of an incidence matrix
a maximal chain of subspaces
to create a geometric object from a description using class geometric_object_description
to create a geometric object encoded as a set using a description from the command line
various functions related to geometries
subspaces with a fixed embedding
to rank and unrank subspaces of a fixed dimension in F_q^n
interface for various incidence geometries
the Klein correspondence between lines in PG(3,q) and points on the Klein quadric
the Knarr construction of a GQ from a BLT-set
a data structure for general projective planes, including non-desarguesian ones
points and lines in projective space, for instance on a surface
a polarity between points and hyperplanes in PG(n,q)
internal representation of a projective space PG(n,q)
projective space PG(n,q) of dimension n over Fq
tables with line-spreads in PG(3,q)
a permutation for use in class gen_geo
a row-tactical decomposition with fuse, to be used by the geometry_builder
description of a configuration which is part of class decomposition_with_fuse
classification of geometries with a given row-tactical decomposition
classification of geometries with a given row-tactical decomposition
description of a geometry
classification of geometries
classification of geometries
row-by-row encoding of an incidence geometry
encoding of an incidence geometry during classification
classification of geometries based on canonical forms
classification of geometries
parameters that control the clique finding process
finds all cliques of a certain size in a graph
a graph with a vertex coloring
part of the data structure layered_graph
part of the data structure layered_graph
various functions related to graph theory
a data structure to store layered graphs or Hasse diagrams
to search for rainbow cliques in graphs
creates 3D animations using Povray
options for drawing bitmap files
options for drawing an incidence structure
options for drawing modulo n
options for drawing a projective curve
a set of objects that should be drawn with certain povray properties
a catch-all class for things related to 2D graphics
options for drawing an object of type layered_graph
a general 2D graphical output interface (metapost, tikz, postscript)
an individual point on a continuous curve, sampled through parametric_curve
a continuous curve sampled by individual points
povray interface for 3D graphics
description of a povray job
a collection of 3D geometry objects
options for drawing a tree
part of the data structure tree
a data structure for trees
options for povray videos
provides access to pre-computed combinatorial data in encoded form
linear algebra over a finite field
catch all class for representation theory
cyclotomic sets for cyclic codes
a fixed elliptic curve in Weierstrass form
basic number theoretic functions
numerical functions, mostly concerned with double
rules to create text files
a collection of functions related to file io
a wrapper class for an ofstream which allows to store extra data
interface to create latex output files
interface to the computer algebra system MAGMA
a class related to mem_object_registry
maintains a registry of allocated memory
for serialization of complex data types
read output files from the poset classification
The orbiter session is responsible for the command line interface and the program execution.
symbol table to store data entries for the orbiter run-time system
symbol table to store data entries for the orbiter run-time system
interface to system functions
to temporarily override a double variable with a new value
to prepare files using a unified file naming scheme
invariants of a BLT-sets in Q(4,q)
indexing of points in an orthogonal geometry O^epsilon(n,q)
an orthogonal geometry O^epsilon(n,q)
Penttila's unusual model to create BLT-sets.
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
domain to compute with objects of type longinteger
a class to represent arbitrary precision integers
partial derivative connects two homogeneous polynomial domains
domain for polynomials with double coefficients
polynomials with double coefficients, related to class polynomial_double_domain
global functions related to ring theory
a table of all irreducible polynomials over GF(q) of degree less than a certain value
domain of polynomials in one variable over a finite field
to describe an activity for a diophantine system from command line arguments
to perform an activity for a diophantine system using diophant_activity_description
to create a diophantine system from diophant_description
to describe a diophantine system from command line arguments
diophantine systems of equations (i.e., linear systems over the integers)
description of a problem instance for dancing links solver
An implementation of Donald Knuth's dancing links algorithm to solve exact cover problems.
void orbiter_eigenvalues(int *Mtx, int nb_points, double *E, int verbose_level)
ring_theory::longinteger_object * plonginteger_object
struct dlx_node * pdlx_node
@ t_classification_of_cubic_surfaces_with_double_sixes
@ t_packing_was_choose_fixed_points
@ t_combinatorial_objects
object_with_canonical_form_type
syntax_tree_node_operation_type
@ t_data_input_stream_incidence_geometry_by_row_ranks
@ t_data_input_stream_set_of_points
@ t_data_input_stream_file_of_incidence_geometries
@ t_data_input_stream_set_of_lines
@ t_data_input_stream_file_of_point_set
@ t_data_input_stream_from_parallel_search
@ t_data_input_stream_file_of_points
@ t_data_input_stream_file_of_packings_through_spread_table
@ t_data_input_stream_file_of_designs
@ t_data_input_stream_file_of_packings
@ t_data_input_stream_incidence_geometry
@ t_data_input_stream_set_of_points_and_lines
@ t_data_input_stream_file_of_lines
@ t_data_input_stream_unknown
@ t_data_input_stream_set_of_packing
@ t_data_input_stream_file_of_incidence_geometries_by_row_ranks
the orbiter library for the classification of combinatorial objects
internal class for the dancing links exact cover algorithm