Euphoria
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
9namespace 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 {
25 ASSERT(zero <= 0);
26
27 T min_size = 0;
29 for(T f: pieces)
30 {
31 if(f > 0)
32 {
33 min_size += f;
34 }
35 else
36 {
38 }
39 }
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
#define ASSERTX(x,...)
Assert that a value is true.
Definition assert.h:68
#define ASSERT(x)
Assert that a value is true.
Definition assert.h:45
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
A (inclusive) range between two values.
Definition range.h:19