Orbiter
2022
Combinatorial Objects
norm_tables.cpp
Go to the documentation of this file.
1
// norm_tables.cpp
2
//
3
// Anton Betten
4
// 11/28/2008
5
//
6
//
7
//
8
//
9
//
10
11
#include "
foundations.h
"
12
13
using namespace
std;
14
15
16
namespace
orbiter
{
17
namespace
layer1_foundations {
18
namespace
field_theory {
19
20
21
norm_tables::norm_tables
()
22
{
23
norm_table
= NULL;
24
norm_table_sorted
= NULL;
25
sorting_perm
= NULL;
26
sorting_perm_inv
= NULL;
27
nb_types
= 0;
28
type_first
= NULL;
29
type_len
= NULL;
30
the_type
= NULL;
31
}
32
33
norm_tables::~norm_tables
()
34
{
35
if
(
norm_table
) {
36
FREE_int
(
norm_table
);
37
norm_table
= NULL;
38
}
39
if
(
norm_table_sorted
) {
40
FREE_int
(
norm_table_sorted
);
41
norm_table_sorted
= NULL;
42
}
43
if
(
sorting_perm
) {
44
FREE_int
(
sorting_perm
);
45
sorting_perm
= NULL;
46
}
47
if
(
sorting_perm_inv
) {
48
FREE_int
(
sorting_perm_inv
);
49
sorting_perm_inv
= NULL;
50
}
51
if
(
type_first
) {
52
FREE_int
(
type_first
);
53
type_first
= NULL;
54
}
55
if
(
type_len
) {
56
FREE_int
(
type_len
);
57
type_len
= NULL;
58
}
59
if
(
the_type
) {
60
FREE_int
(
the_type
);
61
the_type
= NULL;
62
}
63
}
64
65
void
norm_tables::init
(
orthogonal_geometry::unusual_model
&U,
int
verbose_level)
66
{
67
int
qq = U.
FQ
->
q
;
68
int
i, f, l, j, a, b, c, jj;
69
data_structures::sorting
Sorting;
70
71
norm_table
=
NEW_int
(qq);
72
for
(i = 1; i < qq; i++) {
73
norm_table
[i - 1] = U.
N2
(i);
74
}
75
76
Sorting.
int_vec_classify
(qq - 1,
norm_table
,
norm_table_sorted
,
77
sorting_perm
,
sorting_perm_inv
,
78
nb_types
,
type_first
,
type_len
);
79
80
//cout << "nb_types=" << NT.nb_types << endl;
81
the_type
=
NEW_int
(
nb_types
);
82
for
(i = 0; i <
nb_types
; i++) {
83
f =
type_first
[i];
84
l =
type_len
[i];
85
//cout << "type " << i << " f=" << f << " l=" << l << endl;
86
for
(j = 0; j < l; j++) {
87
jj = f + j;
88
a =
sorting_perm_inv
[jj];
89
b = a + 1;
90
c = U.
N2
(b);
91
//cout << "j=" << j << " a=" << a << " b=" << b
92
// << " N2(b)=" << c << endl;
93
if
(j == 0) {
94
the_type
[i] = c;
95
}
96
}
97
}
98
99
}
100
101
int
norm_tables::choose_an_element_of_given_norm
(
102
int
norm,
int
verbose_level)
103
{
104
int
idx, f, gamma;
105
data_structures::sorting
Sorting;
106
107
Sorting.
int_vec_search
(
the_type
,
nb_types
, norm, idx);
108
f =
type_first
[idx];
109
//l = type_len[idx];
110
gamma =
sorting_perm_inv
[f + 0] + 1;
111
return
gamma;
112
}
113
114
}}}
115
orbiter::layer1_foundations::data_structures::sorting
a collection of functions related to sorted vectors
Definition:
data_structures.h:1148
orbiter::layer1_foundations::data_structures::sorting::int_vec_search
int int_vec_search(int *v, int len, int a, int &idx)
Definition:
sorting.cpp:1094
orbiter::layer1_foundations::data_structures::sorting::int_vec_classify
void int_vec_classify(int length, int *the_vec, int *&the_vec_sorted, int *&sorting_perm, int *&sorting_perm_inv, int &nb_types, int *&type_first, int *&type_len)
Definition:
sorting.cpp:1503
orbiter::layer1_foundations::field_theory::finite_field::q
int q
Definition:
finite_fields.h:490
orbiter::layer1_foundations::field_theory::norm_tables::type_first
int * type_first
Definition:
finite_fields.h:814
orbiter::layer1_foundations::field_theory::norm_tables::norm_table
int * norm_table
Definition:
finite_fields.h:810
orbiter::layer1_foundations::field_theory::norm_tables::nb_types
int nb_types
Definition:
finite_fields.h:813
orbiter::layer1_foundations::field_theory::norm_tables::~norm_tables
~norm_tables()
Definition:
norm_tables.cpp:33
orbiter::layer1_foundations::field_theory::norm_tables::the_type
int * the_type
Definition:
finite_fields.h:815
orbiter::layer1_foundations::field_theory::norm_tables::type_len
int * type_len
Definition:
finite_fields.h:814
orbiter::layer1_foundations::field_theory::norm_tables::choose_an_element_of_given_norm
int choose_an_element_of_given_norm(int norm, int verbose_level)
Definition:
norm_tables.cpp:101
orbiter::layer1_foundations::field_theory::norm_tables::norm_table_sorted
int * norm_table_sorted
Definition:
finite_fields.h:811
orbiter::layer1_foundations::field_theory::norm_tables::sorting_perm_inv
int * sorting_perm_inv
Definition:
finite_fields.h:812
orbiter::layer1_foundations::field_theory::norm_tables::sorting_perm
int * sorting_perm
Definition:
finite_fields.h:812
orbiter::layer1_foundations::field_theory::norm_tables::init
void init(orthogonal_geometry::unusual_model &U, int verbose_level)
Definition:
norm_tables.cpp:65
orbiter::layer1_foundations::field_theory::norm_tables::norm_tables
norm_tables()
Definition:
norm_tables.cpp:21
orbiter::layer1_foundations::orthogonal_geometry::unusual_model
Penttila's unusual model to create BLT-sets.
Definition:
orthogonal.h:676
orbiter::layer1_foundations::orthogonal_geometry::unusual_model::N2
int N2(int a)
Definition:
unusual_model.cpp:887
orbiter::layer1_foundations::orthogonal_geometry::unusual_model::FQ
field_theory::finite_field * FQ
Definition:
orthogonal.h:678
foundations.h
FREE_int
#define FREE_int(p)
Definition:
foundations.h:640
NEW_int
#define NEW_int(n)
Definition:
foundations.h:625
orbiter
the orbiter library for the classification of combinatorial objects
Definition:
classification.h:18
src
lib
foundations
finite_fields
norm_tables.cpp
Generated by
1.9.3