Orbiter 2022
Combinatorial Objects
orthogonal_rank_unrank.cpp
Go to the documentation of this file.
1/*
2 * orthogonal_rank_unrank.cpp
3 *
4 * Created on: Oct 31, 2019
5 * Author: betten
6 */
7
8
9
10
11
12
13#include "foundations.h"
14
15using namespace std;
16
17
18namespace orbiter {
19namespace layer1_foundations {
20namespace orthogonal_geometry {
21
22
24 int *v, int stride, long int rk, int verbose_level)
25{
26 int f_v = (verbose_level >= 1);
27
28 if (f_v) {
29 cout << "orthogonal::unrank_point rk=" << rk
30 << " epsilon=" << epsilon << " n=" << n << endl;
31 }
33 form_c1, form_c2, form_c3, rk, verbose_level);
34}
35
36long int orthogonal::rank_point(int *v, int stride, int verbose_level)
37{
38 int i;
39 int f_v = (verbose_level >= 1);
40 long int ret;
41
42 if (f_v) {
43 cout << "orthogonal::rank_point" << endl;
44 }
45 // copy the vector since Q_epsilon_rank has side effects
46 // (namely, Q_epsilon_rank damages its input vector)
47
48 for (i = 0; i < n; i++) {
49 rk_pt_v[i] = v[i * stride];
50 }
51
52 if (f_v) {
53 cout << "orthogonal::rank_point before F->Q_epsilon_rank" << endl;
54 }
56 form_c1, form_c2, form_c3, verbose_level);
57 if (f_v) {
58 cout << "orthogonal::rank_point after F->Q_epsilon_rank" << endl;
59 }
60 if (f_v) {
61 cout << "orthogonal::rank_point done" << endl;
62 }
63 return ret;
64}
65
66
67void orthogonal::unrank_line(long int &p1, long int &p2,
68 long int rk, int verbose_level)
69{
70 if (epsilon == 1) {
71 hyperbolic_unrank_line(p1, p2, rk, verbose_level);
72 return;
73 }
74 else if (epsilon == 0) {
75 parabolic_unrank_line(p1, p2, rk, verbose_level);
76 return;
77 }
78 else {
79 cout << "orthogonal::unrank_line epsilon = " << epsilon << endl;
80 exit(1);
81 }
82}
83
84long int orthogonal::rank_line(long int p1, long int p2, int verbose_level)
85{
86 int f_v = (verbose_level >= 1);
87 long int ret;
88
89 if (f_v) {
90 cout << "orthogonal::rank_line p1=" << p1 << " p2=" << p2 << endl;
91 }
92 if (epsilon == 1) {
93 ret = hyperbolic_rank_line(p1, p2, verbose_level);
94 }
95 else if (epsilon == 0) {
96 ret = parabolic_rank_line(p1, p2, verbose_level);
97 }
98 else {
99 cout << "orthogonal::rank_line epsilon = " << epsilon << endl;
100 exit(1);
101 }
102 if (f_v) {
103 cout << "orthogonal::rank_line done" << endl;
104 }
105 return ret;
106}
107
109 long int pt1, long int pt2, long int pt1_type, long int pt2_type)
110{
111 if (epsilon == 1) {
113 pt1, pt2, pt1_type, pt2_type);
114 }
115 else if (epsilon == 0) {
117 pt1, pt2, pt1_type, pt2_type, FALSE);
118 }
119 else {
120 cout << "type_and_index_to_point_rk "
121 "epsilon = " << epsilon << endl;
122 exit(1);
123 }
124}
125
127 long int type, long int index, int verbose_level)
128{
129 int f_v = (verbose_level >= 1);
130 long int ret;
131
132 if (f_v) {
133 cout << "orthogonal::type_and_index_to_point_rk" << endl;
134 }
135 if (epsilon == 1) {
136 if (f_v) {
137 cout << "orthogonal::type_and_index_to_point_rk before hyperbolic_type_and_index_to_point_rk" << endl;
138 }
140 type, index, verbose_level);
141 if (f_v) {
142 cout << "orthogonal::type_and_index_to_point_rk after hyperbolic_type_and_index_to_point_rk" << endl;
143 }
144 }
145 else if (epsilon == 0) {
146 if (f_v) {
147 cout << "orthogonal::type_and_index_to_point_rk before parabolic_type_and_index_to_point_rk" << endl;
148 }
150 type, index, verbose_level);
151 if (f_v) {
152 cout << "orthogonal::type_and_index_to_point_rk after parabolic_type_and_index_to_point_rk" << endl;
153 }
154 }
155 else {
156 cout << "type_and_index_to_point_rk "
157 "epsilon = " << epsilon << endl;
158 exit(1);
159 }
160 if (f_v) {
161 cout << "orthogonal::type_and_index_to_point_rk done" << endl;
162 }
163 return ret;
164}
165
167 long int rk, long int &type, long int &index,
168 int verbose_level)
169{
170 if (epsilon == 1) {
172 rk, type, index);
173 }
174 else if (epsilon == 0) {
176 rk, type, index, verbose_level);
177 }
178 else {
179 cout << "type_and_index_to_point_rk epsilon = " << epsilon << endl;
180 exit(1);
181 }
182}
183
185 int line_type, long int pt1, long int pt2,
186 long int &cpt1, long int &cpt2, int verbose_level)
187{
188 if (epsilon == 1) {
190 pt1, pt2, cpt1, cpt2, verbose_level);
191 }
192 else if (epsilon == 0) {
194 pt1, pt2, cpt1, cpt2, verbose_level);
195 }
196 else {
197 cout << "canonical_points_of_line epsilon = " << epsilon << endl;
198 exit(1);
199 }
200}
201
202
203
204void orthogonal::unrank_S(int *v, int stride, int m, int rk)
205// m = Witt index
206{
207 if (m == 0) {
208 return;
209 }
210 F->Orthogonal_indexing->S_unrank(v, stride, m, rk);
211}
212
213long int orthogonal::rank_S(int *v, int stride, int m)
214// m = Witt index
215{
216 long int rk;
217
218 if (m == 0) {
219 return 0;
220 }
221 F->Orthogonal_indexing->S_rank(v, stride, m, rk);
222 return rk;
223}
224
225void orthogonal::unrank_N(int *v, int stride, int m, long int rk)
226// m = Witt index
227{
228 F->Orthogonal_indexing->N_unrank(v, stride, m, rk);
229}
230
231long int orthogonal::rank_N(int *v, int stride, int m)
232// m = Witt index
233{
234 long int rk;
235
236 F->Orthogonal_indexing->N_rank(v, stride, m, rk);
237 return rk;
238}
239
240void orthogonal::unrank_N1(int *v, int stride, int m, long int rk)
241// m = Witt index
242{
243 F->Orthogonal_indexing->N1_unrank(v, stride, m, rk);
244}
245
246long int orthogonal::rank_N1(int *v, int stride, int m)
247// m = Witt index
248{
249 long int rk;
250
251 F->Orthogonal_indexing->N1_rank(v, stride, m, rk);
252 return rk;
253}
254
255void orthogonal::unrank_Sbar(int *v, int stride, int m, long int rk)
256// m = Witt index
257{
258 F->Orthogonal_indexing->Sbar_unrank(v, stride, m, rk, 0 /* verbose_level */);
259}
260
261long int orthogonal::rank_Sbar(int *v, int stride, int m)
262// m = Witt index
263{
264 long int rk;
265 int i;
266
267 for (i = 0; i < 2 * m; i++) {
268 v_tmp[i] = v[i * stride];
269 }
270 F->Orthogonal_indexing->Sbar_rank(v_tmp, 1, m, rk, 0 /* verbose_level */);
271 return rk;
272}
273
274void orthogonal::unrank_Nbar(int *v, int stride, int m, long int rk)
275// m = Witt index
276{
277 F->Orthogonal_indexing->Nbar_unrank(v, stride, m, rk);
278}
279
280long int orthogonal::rank_Nbar(int *v, int stride, int m)
281// m = Witt index
282{
283 long int rk;
284
285 F->Orthogonal_indexing->Nbar_rank(v, stride, m, rk);
286 return rk;
287}
288
289
290
291}}}
292
293
294
orthogonal_geometry::orthogonal_indexing * Orthogonal_indexing
void Q_epsilon_unrank(int *v, int stride, int epsilon, int k, int c1, int c2, int c3, long int a, int verbose_level)
void Sbar_rank(int *v, int stride, int n, long int &a, int verbose_level)
long int Q_epsilon_rank(int *v, int stride, int epsilon, int k, int c1, int c2, int c3, int verbose_level)
void Sbar_unrank(int *v, int stride, int n, long int a, int verbose_level)
long int rank_point(int *v, int stride, int verbose_level)
void parabolic_unrank_line(long int &p1, long int &p2, long int rk, int verbose_level)
long int hyperbolic_rank_line(long int p1, long int p2, int verbose_level)
void unrank_point(int *v, int stride, long int rk, int verbose_level)
int parabolic_type_and_index_to_point_rk(int type, int index, int verbose_level)
long int parabolic_rank_line(long int p1, long int p2, int verbose_level)
void hyperbolic_canonical_points_of_line(int line_type, long int pt1, long int pt2, long int &cpt1, long int &cpt2, int verbose_level)
int hyperbolic_line_type_given_point_types(long int pt1, long int pt2, int pt1_type, int pt2_type)
void hyperbolic_point_rk_to_type_and_index(long int rk, long int &type, long int &index)
long int hyperbolic_type_and_index_to_point_rk(long int type, long int index, int verbose_level)
long int rank_line(long int p1, long int p2, int verbose_level)
void parabolic_point_rk_to_type_and_index(long int rk, long int &type, long int &index, int verbose_level)
long int parabolic_line_type_given_point_types(long int pt1, long int pt2, long int pt1_type, long int pt2_type, int verbose_level)
void unrank_line(long int &p1, long int &p2, long int index, int verbose_level)
void point_rk_to_type_and_index(long int rk, long int &type, long int &index, int verbose_level)
long int type_and_index_to_point_rk(long int type, long int index, int verbose_level)
void parabolic_canonical_points_of_line(int line_type, long int pt1, long int pt2, long int &cpt1, long int &cpt2, int verbose_level)
int line_type_given_point_types(long int pt1, long int pt2, long int pt1_type, long int pt2_type)
void hyperbolic_unrank_line(long int &p1, long int &p2, long int rk, int verbose_level)
void canonical_points_of_line(int line_type, long int pt1, long int pt2, long int &cpt1, long int &cpt2, int verbose_level)
#define FALSE
Definition: foundations.h:234
the orbiter library for the classification of combinatorial objects