Euphoria
Main Page
Related Pages
Topics
Namespaces
Concepts
Classes
Files
File List
File Members
libs
core
src
eu
core
tablelayout.h
Go to the documentation of this file.
1
#pragma once
2
3
4
#include "
eu/base/numeric.h
"
5
6
#include "
eu/assert/assert.h
"
7
8
9
namespace
eu::core
10
{
20
template
<
typename
T>
21
std::vector<T>
22
perform_table_layout
(
const
std::vector<T>&
pieces
,
T
total_size
,
T
zero = 0)
23
{
24
ASSERTX
(
total_size
>= 0,
total_size
);
25
ASSERT
(zero <= 0);
26
27
T
min_size
= 0;
28
T
total_percentage
= 0;
29
for
(
T
f
:
pieces
)
30
{
31
if
(
f
> 0)
32
{
33
min_size
+=
f
;
34
}
35
else
36
{
37
total_percentage
+= -
f
;
38
}
39
}
40
const
T
size_left
=
total_size
-
min_size
;
41
const
T
fixed_scale
=
min_size
<
total_size
? 1 :
total_size
/
min_size
;
42
43
std::vector<T>
ret
;
44
ret
.reserve(
pieces
.size());
45
for
(
T
f
:
pieces
)
46
{
47
if
(
f
> 0)
48
{
49
ret
.push_back(
f
*
fixed_scale
);
50
}
51
else
52
{
53
if
(
size_left
<= 0)
54
{
55
// no more room, add 0
56
ret
.push_back(zero);
57
}
58
else
59
{
60
const
T
p
= (-
f
/
total_percentage
);
61
const
T
size =
p
*
size_left
;
62
ret
.push_back(size);
63
}
64
}
65
}
66
return
ret
;
67
}
68
69
}
70
assert.h
ASSERTX
#define ASSERTX(x,...)
Assert that a value is true.
Definition
assert.h:68
ASSERT
#define ASSERT(x)
Assert that a value is true.
Definition
assert.h:45
eu::core
Definition
color.h:4
eu::core::perform_table_layout
std::vector< T > perform_table_layout(const std::vector< T > &pieces, T total_size, T zero=0)
Calculates a table layout based on the input layout.
Definition
tablelayout.h:22
numeric.h
eu::R
A (inclusive) range between two values.
Definition
range.h:19
Generated by
1.9.8