ReUseX
0.0.5
3D Point Cloud Processing for Building Reuse
Toggle main menu visibility
Loading...
Searching...
No Matches
processing_observer.hpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2025 Povl Filip Sonne-Frederiksen
2
//
3
// SPDX-License-Identifier: GPL-3.0-or-later
4
5
#pragma once
6
7
// PCL-free core observer interface (STANDARDS §1: core/ must not pull PCL).
8
// The progress-reporting interface lives here; the PCL/Eigen-typed
9
// visualization payloads live in core/visual_observer.hpp, which core headers
10
// never include. The visual-observer registry below only traffics in an opaque
11
// IVisualObserver* (forward-declared), so this header stays PCL-free.
12
13
#include "reusex/core/stages.hpp"
14
15
#include <cstddef>
16
17
namespace
reusex::core
{
18
19
// Forward declaration: the full definition (with PCL/Eigen payloads) lives in
20
// core/visual_observer.hpp. Consumers that emit visualization events include
21
// that header; the registry here only stores/returns the pointer.
22
class
IVisualObserver
;
23
24
enum class
EventType
{
25
process
,
26
progress
,
27
visualization
28
//
29
};
30
31
class
IObserver
{};
32
33
class
IProgressObserver
;
34
46
class
ProgressObserver
{
47
public
:
48
explicit
ProgressObserver
(
Stage
stage,
size_t
total = 0);
49
~ProgressObserver
();
50
51
ProgressObserver
(
const
ProgressObserver
&) =
delete
;
52
ProgressObserver
&
operator=
(
const
ProgressObserver
&) =
delete
;
53
54
void
update
(
size_t
progress = 1);
55
56
inline
void
operator++
() {
update
(1); };
57
inline
void
operator+=
(
size_t
increment) {
update
(increment); };
58
59
private
:
60
Stage
stage_;
61
size_t
total_ = 0;
62
IProgressObserver
*observer_ =
nullptr
;
63
};
64
65
class
IProgressObserver
:
IObserver
{
66
public
:
67
virtual
~IProgressObserver
() =
default
;
68
69
// Progress bar callbacks
70
virtual
void
on_process_started
(
Stage
,
size_t
) {}
71
virtual
void
on_process_finished
(
Stage
) {}
72
virtual
void
on_process_updated
(
Stage
,
size_t
) {}
73
};
74
75
// Register a global processing observer. The caller retains ownership and must
76
// keep the observer alive until reset or replacement. Passing nullptr clears
77
// it.
78
//
79
// The global observer is the fallback for a thread with no
80
// ScopedProgressObserver installed — the rux CLI's progress bar. A server that
81
// runs several stages at once (ruxd's job scheduler) must not use it: it would
82
// interleave every job's progress into one observer. It installs a
83
// ScopedProgressObserver per job instead.
84
85
void
set_visual_observer
(
IVisualObserver
*observer);
86
void
set_progress_observer
(
IProgressObserver
*observer);
87
88
void
reset_visual_observer
();
89
void
reset_progress_observer
();
90
91
auto
get_visual_observer
() ->
IVisualObserver
*;
92
auto
get_progress_observer
() ->
IProgressObserver
*;
93
97
auto
current_progress_observer
() ->
IProgressObserver
*;
98
108
class
ScopedProgressObserver
{
109
public
:
110
explicit
ScopedProgressObserver
(
IProgressObserver
*observer);
111
~ScopedProgressObserver
();
112
113
ScopedProgressObserver
(
const
ScopedProgressObserver
&) =
delete
;
114
ScopedProgressObserver
&
operator=
(
const
ScopedProgressObserver
&) =
delete
;
115
116
private
:
117
IProgressObserver
*previous_ =
nullptr
;
118
bool
previous_set_ =
false
;
119
};
120
121
}
// namespace reusex::core
reusex::core::IObserver
Definition
processing_observer.hpp:31
reusex::core::IProgressObserver
Definition
processing_observer.hpp:65
reusex::core::IProgressObserver::on_process_started
virtual void on_process_started(Stage, size_t)
Definition
processing_observer.hpp:70
reusex::core::IProgressObserver::on_process_finished
virtual void on_process_finished(Stage)
Definition
processing_observer.hpp:71
reusex::core::IProgressObserver::on_process_updated
virtual void on_process_updated(Stage, size_t)
Definition
processing_observer.hpp:72
reusex::core::IProgressObserver::~IProgressObserver
virtual ~IProgressObserver()=default
reusex::core::IVisualObserver
Definition
visual_observer.hpp:39
reusex::core::ProgressObserver::operator+=
void operator+=(size_t increment)
Definition
processing_observer.hpp:57
reusex::core::ProgressObserver::ProgressObserver
ProgressObserver(Stage stage, size_t total=0)
reusex::core::ProgressObserver::operator++
void operator++()
Definition
processing_observer.hpp:56
reusex::core::ProgressObserver::operator=
ProgressObserver & operator=(const ProgressObserver &)=delete
reusex::core::ProgressObserver::~ProgressObserver
~ProgressObserver()
reusex::core::ProgressObserver::update
void update(size_t progress=1)
reusex::core::ProgressObserver::ProgressObserver
ProgressObserver(const ProgressObserver &)=delete
reusex::core::ScopedProgressObserver::~ScopedProgressObserver
~ScopedProgressObserver()
reusex::core::ScopedProgressObserver::operator=
ScopedProgressObserver & operator=(const ScopedProgressObserver &)=delete
reusex::core::ScopedProgressObserver::ScopedProgressObserver
ScopedProgressObserver(const ScopedProgressObserver &)=delete
reusex::core::ScopedProgressObserver::ScopedProgressObserver
ScopedProgressObserver(IProgressObserver *observer)
reusex::core
Wire form of one stored report PDF version — the ReportPdfVersion schema in ruxd's API contract (docs...
Definition
component_record.hpp:12
reusex::core::reset_visual_observer
void reset_visual_observer()
reusex::core::Stage
Stage
Definition
stages.hpp:11
reusex::core::current_progress_observer
auto current_progress_observer() -> IProgressObserver *
The observer progress reported from THIS thread goes to: the innermost ScopedProgressObserver install...
reusex::core::set_visual_observer
void set_visual_observer(IVisualObserver *observer)
reusex::core::get_visual_observer
auto get_visual_observer() -> IVisualObserver *
reusex::core::reset_progress_observer
void reset_progress_observer()
reusex::core::get_progress_observer
auto get_progress_observer() -> IProgressObserver *
reusex::core::EventType
EventType
Definition
processing_observer.hpp:24
reusex::core::EventType::progress
@ progress
Definition
processing_observer.hpp:26
reusex::core::EventType::process
@ process
Definition
processing_observer.hpp:25
reusex::core::EventType::visualization
@ visualization
Definition
processing_observer.hpp:27
reusex::core::set_progress_observer
void set_progress_observer(IProgressObserver *observer)
libs
reusex
include
core
processing_observer.hpp
Generated by
1.18.0