18#ifndef TEEUI_LIBTEEUI_UTILS_H_
19#define TEEUI_LIBTEEUI_UTILS_H_
27#include <initializer_list>
39template <
typename T,
size_t elements>
class Array {
45 constexpr Array(
const std::initializer_list<uint8_t>& li) {
47 for (
auto& item : li) {
50 if (i == elements)
break;
52 for (; i < elements; ++i) {
59 constexpr size_t size()
const {
return elements; }
64 const T*
end()
const {
return data_ + elements; }
68 for (
size_t i = 0; i < elements; ++i) {
78template <
typename T>
auto bytesCast(
const T& v) ->
const uint8_t (&)[
sizeof(T)] {
79 return *
reinterpret_cast<const uint8_t(*)[sizeof(T)]
>(&v);
81template <
typename T>
auto bytesCast(T& v) -> uint8_t (&)[
sizeof(T)] {
82 return *
reinterpret_cast<uint8_t(*)[sizeof(T)]
>(&v);
87 template <
typename U>
static int f(
const U*,
const void*) {
return 0; }
88 template <
typename U>
static int*
f(
const U* u,
decltype(u->data())) {
return nullptr; }
89 static constexpr bool value = std::is_pointer<
decltype(
f((T*)
nullptr,
""))>
::value;
96 static_assert(
sizeof(
decltype(*buffer.data())) == 1,
"elements to large");
99 template <
size_t size>
101 :
data_(reinterpret_cast<const uint8_t*>(buffer)),
size_(
size - 1) {
102 static_assert(
size > 0,
"even an empty string must be 0-terminated");
105 template <
size_t size>
131template <
typename Impl>
class HMac {
133 template <
typename... Data>
135 return Impl::hmac256(key, {
data...});
139bool operator==(
const ByteBufferProxy& lhs,
const ByteBufferProxy& rhs);
141template <
typename IntType, u
int32_t
byteOrder>
struct choose_hton;
143template <
typename IntType>
struct choose_hton<IntType, __ORDER_LITTLE_ENDIAN__> {
144 inline static IntType
hton(
const IntType& value) {
146 const unsigned char* inbytes =
reinterpret_cast<const unsigned char*
>(&value);
147 unsigned char* outbytes =
reinterpret_cast<unsigned char*
>(&result);
148 for (
int i =
sizeof(IntType) - 1; i >= 0; --i) {
149 *(outbytes++) = inbytes[i];
155template <
typename IntType>
struct choose_hton<IntType, __ORDER_BIG_ENDIAN__> {
156 inline static IntType
hton(
const IntType& value) {
return value; }
159template <
typename IntType>
inline IntType
hton(
const IntType& value) {
163template <
typename IntType>
inline IntType
ntoh(
const IntType& value) {
180template <
typename Unit>
inline constexpr const char*
str =
"N/A";
182template <>
inline constexpr const char*
str<px> =
"px";
183template <>
inline constexpr const char*
str<dp> =
"dp";
184template <>
inline constexpr const char*
str<mm> =
"mm";
190inline long double abs(
long double v) {
193inline double abs(
double v) {
197inline long double ceil(
long double v) {
205inline long double floor(
long double v) {
213inline long double sqrt(
long double v) {
225inline long double round(
long double v) {
235template <
typename Unit,
typename Numeric = DefaultNumericType>
class Coordinate;
237template <
typename Numeric>
struct Add {
243template <
typename Numeric>
struct Sub {
249template <
typename Numeric>
struct Mul {
255template <
typename Numeric>
struct Div {
262template <
typename T1,
typename T2,
typename Numeric,
template <
typename>
class Op>
struct BinOp;
269template <
typename T1,
typename T2,
typename Numeric,
template <
typename>
class Op>
struct BinOp {
282 return Op<Numeric>::eval(v1, v2);
298template <
typename Name,
typename ParamType>
struct MetaParam {};
300template <
typename Name,
typename Unit,
typename Numeric>
316template <
typename Name,
typename ParamType>
class Param {
342 if constexpr (std::is_floating_point<N>::value && std::is_integral<Numeric>::value) {
405template <
typename ParamName,
typename ParamType>
412template <
typename ParamName,
typename ParamType>
420 constexpr static const bool value =
true;
425template <
typename ParamName,
typename ParamType>
432template <
typename ParamName,
typename ParamType>
434 constexpr static const bool value =
true;
437template <
typename Param,
typename Numeric = DefaultNumericType>
class context;
439template <
typename... ParamsNames,
typename... ParamTypes,
typename Numeric>
443 std::tuple<Param<ParamsNames, ParamTypes>...>
params_;
450 Proxy(Numeric valuepx, Numeric mm2px, Numeric dp2px)
451 : valuepx_(valuepx), mm2px_(mm2px), dp2px_(dp2px) {}
463 dp2px_ = (mm2px * 25.4) / 160.0;
466 context(Numeric mm2px, Numeric dp2px) : mm2px_(mm2px), dp2px_(dp2px) {}
476 template <
typename MetaParam>
const auto&
getParam()
const {
480 template <typename MetaParam, typename = std::enable_if_t<isCoordinateParam<MetaParam>::value>>
482 *getParam<MetaParam>() = v;
486 typename = std::enable_if_t<isCoordinateParam<MetaParam>::value>>
488 *getParam<MetaParam>() = *
this = v;
491 template <
typename MetaParam>
494 *getParam<MetaParam>() = v;
498 return {rhs.
count(), mm2px_, dp2px_};
501 return {rhs.
count() * mm2px_, mm2px_, dp2px_};
504 return {rhs.
count() * dp2px_, mm2px_, dp2px_};
506 template <
typename T1,
typename T2,
template <
typename>
class Op>
508 return {rhs.
eval(*this).count(), mm2px_, dp2px_};
510 template <
typename ParamName,
typename ParamType>
511 std::enable_if_t<isCoordinateParam<MetaParam<ParamName, ParamType>>::value,
Proxy>
513 return {getParam<MetaParam<ParamName, ParamType>>()->count(), mm2px_, dp2px_};
515 template <
typename ParamName,
typename ParamType>
516 std::enable_if_t<!isCoordinateParam<MetaParam<ParamName, ParamType>>::value,
const ParamType&>
518 return *getParam<MetaParam<ParamName, ParamType>>();
520 template <
typename T,
522 inline T&&
operator=(T&& v)
const {
523 return std::forward<T>(v);
531template <
typename Coord>
class Vec2d {
536 constexpr Vec2d(Coord x, Coord y) : x_(x), y_(y) {}
539 template <
typename N>
541 : x_(other.x()), y_(other.y()) {}
573 Coord factor = *
this * *
this;
577 Coord
x()
const {
return x_; }
578 Coord
y()
const {
return y_; }
581#ifdef TEEUI_DO_LOG_DEBUG
582template <
typename Unit,
typename Numeric>
583std::ostream&
operator<<(std::ostream& out,
const Coordinate<Unit, Numeric>& p) {
584 out << std::setprecision(10) << p.count() << str<Unit>;
588template <
typename Coord> std::ostream&
operator<<(std::ostream& out,
const Vec2d<Coord>& p) {
589 out <<
"Vec2d(" << p.x() <<
", " << p.y() <<
")";
644 explicit constexpr ConvexObject(std::initializer_list<PxPoint> l) : fill_(0) {
646 for (
const auto& p : l) {
647 points_[fill_++] = p;
655 constexpr size_t size()
const {
return fill_; }
658 constexpr const PxPoint*
end()
const {
return &points_[fill_]; }
660 template <
size_t result_cap>
662 static_assert(result_cap >=
capacity,
663 "resulting capacity must be at least as large as the original");
670 std::copy(begin(), end(), &result.
points_[0]);
673 result.
fill_ = vCount;
677 template <
size_t result_cap,
size_t arg_cap>
679 return intersect<result_cap>(other.
begin(), other.
end());
682 template <
size_t result_cap>
684 if (end - begin < 3)
return {};
687 auto result = intersect<result_cap>(*a, *b);
689 while (result && b != end) {
690 result = result->template intersect<result_cap>(*a, *b);
700 points_[fill_++] = p;
705#ifdef TEEUI_DO_LOG_DEBUG
706template <
size_t capacity>
707std::ostream&
operator<<(std::ostream& out,
const ConvexObject<capacity>& o) {
708 out <<
"ConvexObject(";
710 for (
const auto& p : o) {
722template <
typename Coord>
class Box {
728 template <
typename N>
731 Box(
const Coord&
x,
const Coord&
y,
const Coord&
w,
const Coord&
h)
737 return p.
y().count() >= 0 && p.
y().count() <=
extend_.y().count() && p.
x().count() >= 0 &&
738 p.
x().count() <=
extend_.x().count();
771 Coord
w = std::max(br.x(), obr.x()) -
x;
772 Coord
h = std::max(br.y(), obr.y()) -
y;
784 Coord
w = std::max(br.x(), p.
x()) -
x;
785 Coord
h = std::max(br.y(), p.
y()) -
y;
796 while (begin != end) {
797 TEEUI_LOG <<
"A tl: " << tl <<
" br: " << br <<
" new: " << *begin <<
ENDL;
799 br = {std::max(br.x(), begin->
x()), std::max(br.y(), begin->
y())};
800 TEEUI_LOG <<
"B tl: " << tl <<
" br: " << br <<
" new: " << *begin <<
ENDL;
803 return {tl, br - tl};
810 if (begin == end)
return {};
811 Box result(*begin, {0, 0});
812 result.
merge(begin + 1, end);
840#ifdef TEEUI_DO_LOG_DEBUG
841template <
typename Coord> std::ostream&
operator<<(std::ostream& out,
const Box<Coord>& p) {
842 out <<
"Box(x: " << p.x().count() <<
" y: " << p.y().count() <<
" w: " << p.w().count()
843 <<
" h: " << p.h().count() <<
")";
863 Ret (*callback_)(
Args... args,
void* priv_data);
868template <
typename Ret,
typename...
Args>
870 return {fn, priv_data};
877 [](
Args... args,
void* priv_data) -> Ret {
887template <
typename Fn>
897 template <
typename Context>
906template <
typename... Elements,
typename Context>
908 std::tuple<Elements...> result{Elements(
context)...};
915 using type = std::tuple<Elements...>;
920template <
typename... Coords>
925template <
size_t capacity,
typename Tuple,
typename Context,
size_t... I>
926constexpr inline ConvexObject<capacity>
932template <
size_t capacity,
typename... Points,
typename Context>
934 const std::tuple<Points...>& outline) {
935 return initConvexObject<capacity>(
context, outline, std::index_sequence_for<Points...>{});
938template <
size_t capacity,
typename Tuple,
typename Context,
size_t... I,
size_t size>
941 std::index_sequence<I...>) {
942 static_assert(
sizeof...(I) <=
size,
943 "Array to initialize must be big enough to hold all tuple elements");
944 [](
auto...) {}((out[I] = initConvexObject<capacity>(
context, std::get<I>(t)))...);
947template <
size_t capacity,
typename... COs,
typename Context,
size_t size>
950 const std::tuple<COs...>& t) {
954template <
typename Iterator>
class Range {
970#define Position(x, y) \
971 static const constexpr auto pos_x = x; \
972 static const constexpr auto pos_y = y
974#define Dimension(w, h) \
975 static const constexpr auto dim_w = w; \
976 static const constexpr auto dim_h = h
978#define BEGIN_ELEMENT(name, type, ...) \
979 struct name : public type<name, ##__VA_ARGS__> { \
981 template <typename Context> \
982 name(const Context& context) : type<name, ##__VA_ARGS__>(context) {}
984#define END_ELEMENT() }
986#define DECLARE_TYPED_PARAMETER(name, type) \
987 struct Param_##name {}; \
988 using name = ::teeui::MetaParam<Param_##name, type>
990#define DECLARE_PARAMETER(name) DECLARE_TYPED_PARAMETER(name, ::teeui::pxs)
992#define CONSTANT(name, value) static constexpr const auto name = value
994#define BOTTOM_EDGE_OF(name) (name::pos_y + name::dim_h)
996#define CONVEX_OBJECT(...) makeConvexObject(__VA_ARGS__)
998#define CONVEX_OBJECTS(...) std::make_tuple(__VA_ARGS__)
1004#define NEW_LAYOUT(name, ...) using name = ::teeui::MetaList<__VA_ARGS__>
1006#define NEW_PARAMETER_SET(name, ...) using name = ::teeui::MetaList<__VA_ARGS__>
1008#define LABELS(name, ...) using ::teeui::MetaList<__VA_ARGS__>
1010#define TEXT_ID(textId) static_cast<uint32_t>(textId)
static constexpr Array fill(const T &v)
Definition: utils.h:66
T[elements] array_type
Definition: utils.h:40
T * end()
Definition: utils.h:62
constexpr Array()
Definition: utils.h:43
T * begin()
Definition: utils.h:61
const T * end() const
Definition: utils.h:64
constexpr Array(const T(&data)[elements])
Definition: utils.h:44
const T * begin() const
Definition: utils.h:63
array_type data_
Definition: utils.h:75
constexpr size_t size() const
Definition: utils.h:59
const T * data() const
Definition: utils.h:58
constexpr Array(const std::initializer_list< uint8_t > &li)
Definition: utils.h:45
T * data()
Definition: utils.h:57
Vec2d< Coord > extend() const
Definition: utils.h:760
Box(const Coord &x, const Coord &y, const Coord &w, const Coord &h)
Definition: utils.h:731
bool contains(const Box &other) const
Definition: utils.h:740
Coord h() const
Definition: utils.h:764
static Box boundingBox(const Point< Coord > *begin, const Point< Coord > *end)
Definition: utils.h:809
Box merge(const Box &other) const
Definition: utils.h:766
Vec2d< Coord > extend_
Definition: utils.h:724
Box merge(const Point< Coord > &p) const
Definition: utils.h:779
Box translate(const Point< Coord > &offset) &&
Definition: utils.h:834
Coord x() const
Definition: utils.h:761
Point< Coord > bottomRight() const
Definition: utils.h:758
bool fitsInside(const Box &other) const
Definition: utils.h:757
Box(const Box< Coordinate< typename Coord::unit_t, N > > &other)
Definition: utils.h:729
bool overlaps(const Box &other) const
Definition: utils.h:746
Box translate(const Point< Coord > &offset) const &
Definition: utils.h:826
Box()
Definition: utils.h:727
Coord w() const
Definition: utils.h:763
Box merge(const Point< Coord > *begin, const Point< Coord > *end) const
Definition: utils.h:793
Box(const Point< Coord > &topLeft, const Vec2d< Coord > &extend)
Definition: utils.h:733
Point< Coord > topLeft_
Definition: utils.h:723
Coord y() const
Definition: utils.h:762
Point< Coord > topLeft() const
Definition: utils.h:759
bool contains(Point< Coord > p) const
Definition: utils.h:735
Box & translateSelf(const Point< Coord > &offset)
Definition: utils.h:819
const uint8_t * begin() const
Definition: utils.h:113
const uint8_t * data_
Definition: utils.h:117
size_t size() const
Definition: utils.h:111
const uint8_t * data() const
Definition: utils.h:110
ByteBufferProxy(const uint8_t(&buffer)[size])
Definition: utils.h:106
size_t size_
Definition: utils.h:118
ByteBufferProxy(const T &buffer, decltype(buffer.data())=nullptr)
Definition: utils.h:94
ByteBufferProxy()
Definition: utils.h:108
const uint8_t * end() const
Definition: utils.h:114
ByteBufferProxy(const char(&buffer)[size])
Definition: utils.h:100
ConvexObject(const ConvexObject &other)=default
ConvexObject(ConvexObject &&other)=default
friend class ConvexObject
Definition: utils.h:636
ConvexObject & operator=(ConvexObject &&other)=default
constexpr size_t size() const
Definition: utils.h:655
size_t fill_
Definition: utils.h:640
void push_back(const PxPoint &p)
Definition: utils.h:698
optional< ConvexObject< result_cap > > intersect(const PxPoint *begin, const PxPoint *end) const
Definition: utils.h:683
optional< ConvexObject< result_cap > > intersect(const ConvexObject< arg_cap > &other) const
Definition: utils.h:678
constexpr ConvexObject(std::initializer_list< PxPoint > l)
Definition: utils.h:644
constexpr const PxPoint * begin() const
Definition: utils.h:657
ConvexObject & operator=(const ConvexObject &other)=default
ConvexObject()
Definition: utils.h:643
constexpr const PxPoint * end() const
Definition: utils.h:658
pxs area() const
Definition: utils.h:696
PxPoint points_[capacity]
Definition: utils.h:639
optional< ConvexObject< result_cap > > intersect(const PxPoint &A, const PxPoint &B) const
Definition: utils.h:661
constexpr bool operator==(const Coordinate &v) const
Definition: utils.h:378
Coordinate & operator=(const Coordinate &rhs)=default
Coordinate floor() const
Definition: utils.h:375
Coordinate(const Coordinate< Unit, N > &other)
Definition: utils.h:341
constexpr bool operator<(const Coordinate &v) const
Definition: utils.h:380
Numeric count() const
Definition: utils.h:398
constexpr Coordinate & operator+=(const Coordinate &v)
Definition: utils.h:357
constexpr bool operator!=(const Coordinate &v) const
Definition: utils.h:379
constexpr Coordinate & operator*=(const Coordinate &v)
Definition: utils.h:362
constexpr Coordinate operator/(const Coordinate &v) const
Definition: utils.h:366
constexpr Coordinate & operator/=(const Coordinate &v)
Definition: utils.h:367
Coordinate abs() const
Definition: utils.h:373
constexpr Coordinate operator-(const Coordinate &v) const
Definition: utils.h:351
constexpr add< Coordinate, T, Numeric > operator+(const T &v) const
Definition: utils.h:385
constexpr Coordinate operator-() const
Definition: utils.h:371
constexpr sub< Coordinate, T, Numeric > operator-(const T &v) const
Definition: utils.h:388
Coordinate(Coordinate &&)=default
Numeric value_
Definition: utils.h:333
Coordinate sqrt() const
Definition: utils.h:376
constexpr bool operator>(const Coordinate &v) const
Definition: utils.h:381
constexpr Coordinate & operator-=(const Coordinate &v)
Definition: utils.h:353
constexpr Coordinate operator*(const Coordinate &v) const
Definition: utils.h:361
Coordinate & operator=(Coordinate &&rhs)=default
constexpr Coordinate()
Definition: utils.h:337
constexpr mul< Coordinate, T, Numeric > operator*(const T &v) const
Definition: utils.h:391
constexpr bool operator<=(const Coordinate &v) const
Definition: utils.h:382
constexpr Coordinate(Numeric value)
Definition: utils.h:338
constexpr Coordinate operator+(const Coordinate &v) const
Definition: utils.h:352
constexpr bool operator>=(const Coordinate &v) const
Definition: utils.h:383
Coordinate(const Coordinate &)=default
constexpr div< Coordinate, T, Numeric > operator/(const T &v) const
Definition: utils.h:394
Coordinate ceil() const
Definition: utils.h:374
@ OK
Definition: error.h:29
static optional< Hmac > hmac256(const AuthTokenKey &key, const Data &... data)
Definition: utils.h:134
ParamType param_
Definition: utils.h:318
ParamType * operator->()
Definition: utils.h:329
Param & operator=(Param &&)=default
Param & operator=(const Param &)=default
const ParamType * operator->() const
Definition: utils.h:328
Param(const Param &)=default
ParamType & operator*()
Definition: utils.h:327
Param()
Definition: utils.h:321
const ParamType & operator*() const
Definition: utils.h:326
Iterator begin_
Definition: utils.h:955
const Iterator end() const
Definition: utils.h:961
Range(Iterator begin, Iterator end)
Definition: utils.h:959
const Iterator begin() const
Definition: utils.h:960
Iterator end_
Definition: utils.h:956
constexpr Vec2d()
Definition: utils.h:535
Vec2d & operator*=(const Coord &f)
Definition: utils.h:560
Vec2d(const Vec2d &)=default
Vec2d operator-(const Vec2d &rhs) const
Definition: utils.h:546
Vec2d operator+(const Vec2d &rhs) const
Definition: utils.h:547
Vec2d & operator-=(const Vec2d &rhs)
Definition: utils.h:548
Coord operator*(const Vec2d &rhs) const
Definition: utils.h:558
Coord y_
Definition: utils.h:532
bool operator==(const Vec2d &rhs) const
Definition: utils.h:571
Coord length() const
Definition: utils.h:572
Vec2d & operator+=(const Vec2d &rhs)
Definition: utils.h:553
Coord x_
Definition: utils.h:532
Vec2d & operator/=(const Coord &f)
Definition: utils.h:566
Vec2d & operator=(Vec2d &&rhs)=default
Vec2d operator/(const Coord &f)
Definition: utils.h:565
Vec2d & operator=(const Vec2d &rhs)=default
Coord y() const
Definition: utils.h:578
Vec2d unit() const
Definition: utils.h:576
Vec2d(const Vec2d< Coordinate< typename Coord::unit_t, N > > &other)
Definition: utils.h:540
Coord x() const
Definition: utils.h:577
Vec2d operator*(const Coord &f) const
Definition: utils.h:559
constexpr Vec2d(Coord x, Coord y)
Definition: utils.h:536
Proxy(const Proxy &)=default
Numeric dp2px_
Definition: utils.h:447
Numeric valuepx_
Definition: utils.h:446
Proxy(Numeric valuepx, Numeric mm2px, Numeric dp2px)
Definition: utils.h:450
void setParam(const Coordinate< Unit, N > &v)
Definition: utils.h:487
void setParam(const Coordinate< px, Numeric > &v)
Definition: utils.h:481
Proxy operator=(const Coordinate< mm, Numeric > &rhs) const
Definition: utils.h:500
std::tuple< Param< ParamsNames, ParamTypes >... > params_
Definition: utils.h:443
const auto & getParam() const
Definition: utils.h:476
context & operator=(const context &)=default
context(context &&)=default
std::enable_if_t< isCoordinateParam< MetaParam< ParamName, ParamType > >::value, Proxy > operator=(const MetaParam< ParamName, ParamType > &) const
Definition: utils.h:512
context(Numeric mm2px, Numeric dp2px)
Definition: utils.h:466
void setParam(std::enable_if_t<!isCoordinateParam< MetaParam >::value, const typename metaParam2ParamType< MetaParam >::type > &v)
Definition: utils.h:492
std::enable_if_t<!isCoordinateParam< MetaParam< ParamName, ParamType > >::value, const ParamType & > operator=(const MetaParam< ParamName, ParamType > &) const
Definition: utils.h:517
Numeric mm2px_
Definition: utils.h:441
context(Numeric mm2px)
Definition: utils.h:461
context(const context &)=default
auto & getParam()
Definition: utils.h:473
Proxy operator=(const Coordinate< dp, Numeric > &rhs) const
Definition: utils.h:503
Numeric dp2px_
Definition: utils.h:442
context & operator=(context &&)=default
Proxy operator=(const Coordinate< px, Numeric > &rhs) const
Definition: utils.h:497
Proxy operator=(const BinOp< T1, T2, Numeric, Op > &rhs) const
Definition: utils.h:507
#define min(a, b)
Definition: ext4_utils.h:44
int capacity()
Definition: health.cpp:64
char data[Size]
Definition: incremental_server.cpp:1
uint32_t size
Definition: io.h:2
Size< 0 > B
Definition: storage_literals.h:36
std::set< Range >::iterator Iterator
Definition: disjoint_range_set.cc:64
void Proxy(SharedFD server, std::function< SharedFD()> conn_factory)
Definition: socket2socket_proxy.cpp:191
std::vector< std::string_view > Args
Definition: incremental.h:28
std::ostream & operator<<(std::ostream &os, const ServiceInfo &service_info)
Definition: mdns_service_info.h:43
long double ceil(long double v)
Definition: utils.h:197
static constexpr const ssize_t kIntersectEmpty
Definition: utils.h:614
long double floor(long double v)
Definition: utils.h:205
long double sqrt(long double v)
Definition: utils.h:213
ssize_t intersect(const PxPoint *oBegin, const PxPoint *oEnd, const PxPoint &lineA, const PxPoint &lineB, PxPoint *nBegin, PxPoint *nEnd)
Definition: utils.cpp:155
double floor(double v)
Definition: utils.h:209
static constexpr const ssize_t kIntersectAllPositive
Definition: utils.h:618
double round(double v)
Definition: utils.h:229
pxs area(const PxPoint *begin, const PxPoint *end)
Definition: utils.cpp:250
double sqrt(double v)
Definition: utils.h:217
long double abs(long double v)
Definition: utils.h:190
double ceil(double v)
Definition: utils.h:201
float round(float v)
Definition: utils.h:221
EventType
Definition: utils.h:848
bool operator==(const ByteBufferProxy &lhs, const ByteBufferProxy &rhs)
Definition: utils.cpp:22
Array< uint8_t, kAuthTokenKeySize > AuthTokenKey
Definition: utils.h:123
std::tuple< Elements... > instantiateLayout(MetaList< Elements... >, const Context &context)
Definition: utils.h:907
constexpr const char * str< dp >
Definition: utils.h:183
constexpr const char * str< mm >
Definition: utils.h:184
constexpr const char * str< px >
Definition: utils.h:182
constexpr ConvexObject< capacity > initConvexObject(const Context &context, const Tuple &outline, std::index_sequence< I... >)
Definition: utils.h:927
constexpr const char * str
Definition: utils.h:180
auto bytesCast(const T &v) -> const uint8_t(&)[sizeof(T)]
Definition: utils.h:78
Range< Iterator > makeRange(Iterator begin, Iterator end)
Definition: utils.h:964
PixelDrawerHelper< Fn > makePixelDrawer(Fn fn)
Definition: utils.h:890
Color drawCirclePoint(Point< pxs > center, pxs r, Point< pxs > px_origin, Color c)
Definition: utils.cpp:117
IntType hton(const IntType &value)
Definition: utils.h:159
uint32_t Color
Definition: utils.h:594
constexpr const uint8_t kHmacKeySize
Definition: utils.h:122
typename MetaList2Layout< T >::type layout_t
Definition: utils.h:918
optional< PxPoint > intersect(const PxVec &a, const PxPoint &b, const PxVec &c, const PxPoint &d)
Definition: utils.cpp:128
float DefaultNumericType
Definition: utils.h:186
constexpr const uint8_t kAuthTokenKeySize
Definition: utils.h:121
constexpr void initConvexObjectArray(const Context &context, ConvexObject< capacity >(&out)[size], const Tuple &t, std::index_sequence< I... >)
Definition: utils.h:939
Unit
Definition: utils.h:168
constexpr std::tuple< Vec2d< Coords >... > makeConvexObject(const Vec2d< Coords > &... points)
Definition: utils.h:921
Vec2d< pxs > PxVec
Definition: utils.h:604
IntType ntoh(const IntType &value)
Definition: utils.h:163
Color drawLinePoint(Point< pxs > a, Point< pxs > b, Point< pxs > px_origin, Color c, pxs width=pxs(1.0))
Definition: utils.cpp:91
Callback< Ret(Args...)> makeCallback(Ret(*fn)(Args..., void *), void *priv_data)
Definition: utils.h:869
Coordinate< px > pxs
Definition: utils.h:529
uint8_t type
Definition: pairing_connection.h:0
static constexpr Coordinate< px, Numeric > eval(const Coordinate< px, Numeric > &v1, const Coordinate< px, Numeric > &v2)
Definition: utils.h:238
constexpr mul< BinOp, T, Numeric > operator*(const T &v) const
Definition: utils.h:290
constexpr div< BinOp, T, Numeric > operator/(const T &v) const
Definition: utils.h:293
Coordinate< px, Numeric > eval(const Context &ctx) const
Definition: utils.h:279
constexpr BinOp(const T1 &v1, const T2 &v2)
Definition: utils.h:275
T2 v2_
Definition: utils.h:272
constexpr sub< BinOp, T, Numeric > operator-(const T &v) const
Definition: utils.h:287
BinOp(const BinOp &)=default
constexpr add< BinOp, T, Numeric > operator+(const T &v) const
Definition: utils.h:284
T1 v1_
Definition: utils.h:271
static int * f(const U *u, decltype(u->data()))
Definition: utils.h:88
static int f(const U *, const void *)
Definition: utils.h:87
static constexpr bool value
Definition: utils.h:89
Fn fn_
Definition: utils.h:874
Ret operator()(Args... args) const
Definition: utils.h:865
void * priv_data_
Definition: utils.h:864
static constexpr Coordinate< px, Numeric > eval(const Coordinate< px, Numeric > &v1, const Coordinate< px, Numeric > &v2)
Definition: utils.h:256
uint32_t x_
Definition: utils.h:855
EventType event_
Definition: utils.h:857
uint32_t y_
Definition: utils.h:856
LayoutElement(const Context &context)
Definition: utils.h:898
Box< pxs > bounds_
Definition: utils.h:895
Error hit(const Event &)
Definition: utils.h:903
Error draw(const PixelDrawer &)
Definition: utils.h:902
static constexpr Coordinate< px, Numeric > eval(const Coordinate< px, Numeric > &v1, const Coordinate< px, Numeric > &v2)
Definition: utils.h:250
static constexpr Coordinate< px, Numeric > eval(const Coordinate< px, Numeric > &v1, const Coordinate< px, Numeric > &v2)
Definition: utils.h:244
static constexpr const Unit value
Definition: utils.h:174
static IntType hton(const IntType &value)
Definition: utils.h:156
static IntType hton(const IntType &value)
Definition: utils.h:144
static constexpr const bool value
Definition: utils.h:417
#define TEEUI_LOG
Definition: log.h:27
#define ENDL
Definition: log.h:28