59 lines
1.2 KiB
C
59 lines
1.2 KiB
C
![]() |
/*
|
||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the LICENSE
|
||
|
* file in the root directory of this source tree.
|
||
|
*/
|
||
|
namespace {
|
||
|
|
||
|
union YGNodeContext {
|
||
|
uintptr_t edgesSet = 0;
|
||
|
void* asVoidPtr;
|
||
|
};
|
||
|
|
||
|
class YGNodeEdges {
|
||
|
uintptr_t edges_;
|
||
|
|
||
|
public:
|
||
|
enum Edge {
|
||
|
MARGIN = 1,
|
||
|
PADDING = 2,
|
||
|
BORDER = 4,
|
||
|
};
|
||
|
|
||
|
YGNodeEdges(YGNodeRef node) {
|
||
|
auto context = YGNodeContext{};
|
||
|
context.asVoidPtr = node->getContext();
|
||
|
edges_ = context.edgesSet;
|
||
|
}
|
||
|
|
||
|
void setOn(YGNodeRef node) {
|
||
|
auto context = YGNodeContext{};
|
||
|
context.edgesSet = edges_;
|
||
|
node->setContext(context.asVoidPtr);
|
||
|
}
|
||
|
|
||
|
bool has(Edge edge) { return (edges_ & edge) == edge; }
|
||
|
|
||
|
YGNodeEdges& add(Edge edge) {
|
||
|
edges_ |= edge;
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
int get() { return edges_; }
|
||
|
};
|
||
|
|
||
|
struct YogaValue {
|
||
|
static constexpr jint NAN_BYTES = 0x7fc00000;
|
||
|
|
||
|
static jlong asJavaLong(const YGValue& value) {
|
||
|
uint32_t valueBytes = 0;
|
||
|
memcpy(&valueBytes, &value.value, sizeof valueBytes);
|
||
|
return ((jlong) value.unit) << 32 | valueBytes;
|
||
|
}
|
||
|
constexpr static jlong undefinedAsJavaLong() {
|
||
|
return ((jlong) YGUnitUndefined) << 32 | NAN_BYTES;
|
||
|
}
|
||
|
};
|
||
|
} // namespace
|