Orbiter 2022
Combinatorial Objects
graph_layer.cpp
Go to the documentation of this file.
1// graph_layer.cpp
2//
3// Anton Betten
4// December 30, 2013
5//
6//
7//
8//
9//
10
11#include "foundations.h"
12
13
14using namespace std;
15
16
17namespace orbiter {
18namespace layer1_foundations {
19namespace graph_theory {
20
21
23{
24 null();
25}
26
28{
29 freeself();
30}
31
33{
34 Nodes = NULL;
35}
36
38{
39 if (Nodes) {
41 }
42 null();
43}
44
45void graph_layer::init(int nb_nodes,
46 int id_of_first_node, int verbose_level)
47{
48 int i, id;
49
54 for (i = 0; i < nb_nodes; i++) {
55 Nodes[i].id =id;
56 Nodes[i].layer = i;
57 Nodes[i].label = NULL;
58 id++;
59 }
60}
61
62void graph_layer::place(int verbose_level)
63{
64 double dx, dx2;
65 int i;
66
67 dx = 1. / nb_nodes;
68 dx2 = dx * .5;
69 for (i = 0; i < nb_nodes; i++) {
70 Nodes[i].x_coordinate = i * dx + dx2;
71 }
72
73}
74
76 int *group_size, int nb_groups,
77 double x_stretch, int verbose_level)
78// x_stretch is less than 1.
79{
80 int f_v = (verbose_level >= 1);
81 int *group_start;
82 double *group_x;
83 double *group_dx;
84 int i, j, nb_elements;
85
86 if (f_v) {
87 cout << "graph_layer::place_with_grouping "
88 "nb_groups=" << nb_groups << endl;
89 }
90 group_start = NEW_int(nb_groups + 1);
91 group_dx = new double[nb_groups + 1];
92 group_x = new double[nb_groups + 1];
93 group_start[0] = 0;
94 for (j = 0; j < nb_groups; j++) {
95 group_start[j + 1] = group_start[j] + group_size[j];
96 }
97 nb_elements = group_start[nb_groups];
98 for (j = 0; j < nb_groups; j++) {
99 group_dx[j] = group_size[j] / (double) nb_elements;
100 }
101 for (j = 0; j < nb_groups; j++) {
102 group_x[j] = (double) group_start[j] / (double) nb_elements
103 + (double) group_dx[j] * .5;
104 }
105 for (j = 0; j < nb_groups; j++) {
106 if (f_v) {
107 cout << "j=" << j << " / " << nb_groups
108 << " group_size[j]=" << group_size[j] << endl;
109 }
110 for (i = 0; i < group_size[j]; i++) {
111 if (FALSE) {
112 cout << "i=" << i << " / " << group_size[j] << endl;
113 }
114 Nodes[group_start[j] + i].x_coordinate =
115 group_x[j] -
116 ((double) group_dx[j] * .5) * x_stretch +
117 (((double)i + .5) * group_dx[j] / (double) group_size[j]) * x_stretch;
118 }
119 }
120 FREE_int(group_start);
121 delete [] group_dx;
122 delete [] group_x;
123 if (f_v) {
124 cout << "graph_layer::place_with_grouping done" << endl;
125 }
126}
127
128void graph_layer::scale_x_coordinates(double x_stretch, int verbose_level)
129{
130 int i;
131
132 for (i = 0; i < nb_nodes; i++) {
133 Nodes[i].scale_x_coordinate(x_stretch, verbose_level);
134 }
135}
136
137
139 orbiter_kernel_system::memory_object *m, int verbose_level)
140{
141 int f_v = (verbose_level >= 1);
142 int i;
143
144 if (f_v) {
145 cout << "graph_layer::write_memory_object "
146 << nb_nodes << " nodes" << endl;
147 }
151 for (i = 0; i < nb_nodes; i++) {
152 Nodes[i].write_memory_object(m, verbose_level - 1);
153 }
155 if (f_v) {
156 cout << "graph_layer::write_memory_object finished, "
157 "data size (in chars) = " << m->used_length << endl;
158 }
159}
160
162 orbiter_kernel_system::memory_object *m, int verbose_level)
163{
164 int f_v = (verbose_level >= 1);
165 int i;
166
167 if (f_v) {
168 cout << "graph_layer::read_memory_object" << endl;
169 }
170 freeself();
171
173 m->read_int(&nb_nodes);
175
177
178 for (i = 0; i < nb_nodes; i++) {
179 Nodes[i].read_memory_object(m, verbose_level - 1);
180 }
182 if (f_v) {
183 cout << "graph_layer::read_memory_object finished" << endl;
184 }
185}
186
187}}}
188
189
190
191
void write_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
void init(int nb_nodes, int id_of_first_node, int verbose_level)
Definition: graph_layer.cpp:45
void scale_x_coordinates(double x_stretch, int verbose_level)
void place_with_grouping(int *group_size, int nb_groups, double x_stretch, int verbose_level)
Definition: graph_layer.cpp:75
void read_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
part of the data structure layered_graph
Definition: graph_theory.h:482
void read_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
Definition: graph_node.cpp:196
void write_memory_object(orbiter_kernel_system::memory_object *m, int verbose_level)
Definition: graph_node.cpp:151
void scale_x_coordinate(double x_stretch, int verbose_level)
Definition: graph_node.cpp:436
#define FREE_OBJECTS(p)
Definition: foundations.h:652
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_int(n)
Definition: foundations.h:625
#define NEW_OBJECTS(type, n)
Definition: foundations.h:639
#define FALSE
Definition: foundations.h:234
the orbiter library for the classification of combinatorial objects