ACloudViewer
3.9.4
A Modern Library for 3D Data Processing
Universe.cpp
Go to the documentation of this file.
1
// ----------------------------------------------------------------------------
2
// - CloudViewer: www.cloudViewer.org -
3
// ----------------------------------------------------------------------------
4
// Copyright (c) 2018-2024 www.cloudViewer.org
5
// SPDX-License-Identifier: MIT
6
// ----------------------------------------------------------------------------
7
#include "
Universe.h
"
8
9
namespace
cloudViewer
{
10
11
Universe::Universe
(
int
elements) {
12
elts
=
new
uni_elt
[
static_cast<
unsigned
long
>
(elements)];
13
allelems
= elements;
14
num
= elements;
15
initialize
();
16
}
17
18
void
Universe::initialize
() {
19
num
=
allelems
;
20
for
(
int
i = 0; i <
allelems
; i++) {
21
elts
[i].
rank
= 0;
22
elts
[i].
size
= 1;
23
elts
[i].
p
= i;
// initialized to the index
24
}
25
}
26
27
Universe::~Universe
() {
delete
[]
elts
; }
28
29
int
Universe::find
(
int
x) {
30
int
y = x;
31
while
(y !=
elts
[y].p)
// follow the index stored in p if not the same that
32
// the index
33
y =
elts
[y].
p
;
34
elts
[x].
p
= y;
// update x element to the final value (instead of keeping
35
// multiple indirections), so next time we will access it
36
// directly.
37
return
y;
38
}
39
40
void
Universe::join
(
int
x,
int
y) {
41
// join elements in the one with the highest rank
42
if
(
elts
[x].rank >
elts
[y].rank) {
43
elts
[y].
p
= x;
44
elts
[x].
size
+=
elts
[y].
size
;
45
}
else
{
46
elts
[x].
p
= y;
47
elts
[y].
size
+=
elts
[x].
size
;
48
if
(
elts
[x].rank ==
elts
[y].rank)
elts
[y].
rank
++;
49
}
50
num
--;
// the number of elements has been reduced by one
51
}
52
53
void
Universe::addEdge
(
int
x,
int
y) {
54
int
a =
find
(x);
55
int
b =
find
(y);
56
if
(a != b) {
57
join
(a, b);
58
}
59
}
60
61
}
// namespace cloudViewer
Universe.h
cloudViewer::Universe::addEdge
void addEdge(int x, int y)
Definition:
Universe.cpp:53
cloudViewer::Universe::find
int find(int x)
Definition:
Universe.cpp:29
cloudViewer::Universe::elts
uni_elt * elts
Definition:
Universe.h:39
cloudViewer::Universe::join
void join(int x, int y)
Definition:
Universe.cpp:40
cloudViewer::Universe::initialize
void initialize()
Initialize all elements to the default values.
Definition:
Universe.cpp:18
cloudViewer::Universe::num
int num
Definition:
Universe.h:40
cloudViewer::Universe::allelems
int allelems
Definition:
Universe.h:40
cloudViewer::Universe::Universe
Universe(int elements)
Definition:
Universe.cpp:11
cloudViewer::Universe::~Universe
~Universe()
Definition:
Universe.cpp:27
cloudViewer
Generic file read and write utility for python interface.
Definition:
AutoSegmentationTools.h:16
cloudViewer::uni_elt
Definition:
Universe.h:15
cloudViewer::uni_elt::size
int size
Definition:
Universe.h:18
cloudViewer::uni_elt::rank
int rank
Definition:
Universe.h:16
cloudViewer::uni_elt::p
int p
Definition:
Universe.h:17
core
src
Universe.cpp
Generated on Wed Jan 28 2026 09:00:54 for ACloudViewer by
1.9.1