DPsim
Loading...
Searching...
No Matches
dpsim-models
include
dpsim-models
Utils.h
1
/* Copyright 2017-2021 Institute for Automation of Complex Power Systems,
2
* EONERC, RWTH Aachen University
3
*
4
* This Source Code Form is subject to the terms of the Mozilla Public
5
* License, v. 2.0. If a copy of the MPL was not distributed with this
6
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
7
*********************************************************************************/
8
9
#pragma once
10
11
#if defined(__GNUC__) && !defined(__clang__)
12
#include <cxxabi.h>
13
#endif
14
15
#include <dpsim-models/Definitions.h>
16
#include <dpsim-models/Logger.h>
17
18
namespace
CPS {
19
namespace
Utils {
20
21
template
<
typename
T> String className(T *ptr,
const
String &prefix =
"CPS::"
) {
22
const
char
*mangled;
23
mangled =
typeid
(*ptr).name();
24
#if !defined(__GNUC__) || defined(__clang__)
25
String ret(mangled);
26
return
ret;
27
#else
28
Int status = 1;
29
const
char
*unmangled;
30
unmangled = abi::__cxa_demangle(mangled, NULL, NULL, &status);
31
32
if
(status) {
33
return
mangled;
34
}
else
{
35
String ret(unmangled);
36
free((
void
*)unmangled);
37
if
(ret.find(prefix) == 0)
38
return
ret.substr(prefix.size());
39
else
40
return
ret;
41
}
42
#endif
43
}
44
45
struct
Rgb
{
46
double
r, g, b;
47
48
static
Rgb
gradient(
double
x) {
49
if
(x > 1.0)
50
x = 1.0;
51
52
Rgb
c = {2.0 * x, 2.0 * (1 - x), 0.0};
53
54
if
(c.r > 1.0)
55
c.r = 1.0;
56
if
(c.g > 1.0)
57
c.g = 1.0;
58
59
return
c;
60
}
61
62
String hex() {
63
return
fmt::format(
"#{:02x}{:02x}{:02x}"
, (
unsigned
)(r * 255),
64
(
unsigned
)(g * 255), (
unsigned
)(b * 255));
65
}
66
};
67
}
// namespace Utils
68
}
// namespace CPS
CPS::Utils::Rgb
Definition
Utils.h:45
Generated by
1.13.2