|
template<uint BVH_N, typename ITEM_BOX , typename NODE_BOX > |
SYS_FORCE_INLINE void | createBVHNodeBoxes (const UT::BVH< BVH_N > &bvh, const ITEM_BOX *item_boxes, NODE_BOX *node_boxes) noexcept |
|
template<uint NAXES, typename T , uint BVH_N, typename ITEM_BOX , typename NODE_BOX > |
SYS_FORCE_INLINE void | createBVHInterleavedBoxes (const UT::BVH< BVH_N > &bvh, const ITEM_BOX *item_boxes, NODE_BOX *node_boxes, float expand_factor=0.0f) noexcept |
|
template<uint NAXES, typename T , typename ITEM_BOX , typename NODE_BOX , typename INT_TYPE0 = uint> |
SYS_FORCE_INLINE void | createBVHInterleavedBoxes (const UT::BVH< 4 > &bvh, const ITEM_BOX *item_boxes, NODE_BOX *node_boxes, const v4uu *node_nitems, const INT_TYPE0 *indices_mapping=nullptr) noexcept |
|
template<uint NAXES, typename INT_TYPE > |
void | getIntersectingBoxes (const UT::BVH< 4 > &bvh, const UT::Box< v4uf, NAXES > *node_boxes, const UT::Box< float, NAXES > &query_box, UT_Array< INT_TYPE > &box_indices, BVHUnorderedStack &stack) noexcept |
|
template<uint NAXES, typename INT_TYPE > |
void | getIntersectingBoxesFromStack (const UT::BVH< 4 > &bvh, const UT::Box< v4uf, NAXES > *node_boxes, const UT::Box< float, NAXES > &query_box, UT_Array< INT_TYPE > &box_indices, BVHUnorderedStack &stack) noexcept |
|
template<uint NAXES, typename INT_TYPE > |
void | getIntersectingNodes (const UT::BVH< 4 > &bvh, const UT::Box< v4uf, NAXES > *node_boxes, const UT::Box< float, NAXES > &query_box, UT_Array< INT_TYPE > &box_indices, BVHUnorderedStack &stack) noexcept |
|
template<uint NAXES, typename INT_TYPE , int BATCH_SIZE> |
void | getIntersectingBoxesBatch (const UT::BVH< 4 > &bvh, const UT::Box< v4uf, NAXES > *node_boxes, const UT::Box< float, NAXES > *query_box, UT_Array< INT_TYPE > *box_indices, BVHUnorderedStack &stack) noexcept |
|
void | computeNodeNItems (const UT::BVH< 4 > &bvh, v4uu *node_nitems, exint nitems) noexcept |
| Computes the number of items per node entry and fills in node_nitems. More...
|
|
template<typename T > |
constexpr bool | allRadiiZero (const T &array) noexcept |
|
constexpr bool | allRadiiZero (const ZeroRadiiWrapper &array) noexcept |
|
template<typename T > |
constexpr bool | allRadiiZero (const T *const array) noexcept |
|
template<bool farthest, bool reordered, bool use_max_points, uint NAXES, typename QUERY_POINT , typename INT_TYPE0 , typename POSITION_ARRAY , typename RADIUS_ARRAY > |
void | findClosestPoints (const UT::BVH< 4 > &bvh, const UT::Box< v4uf, NAXES > *node_boxes, const v4uu *node_nitems, const INT_TYPE0 *indices_mapping, const POSITION_ARRAY &positions, QUERY_POINT &query_point, BVHOrderedStack &stack, BVHOrderedStack &output_queue, const RADIUS_ARRAY &radii=ZeroRadiiWrapper(), exint max_points=std::numeric_limits< exint >::max(), float max_dist_squared=std::numeric_limits< float >::max()) noexcept |
|
template<typename T , uint NAXES> |
SYS_FORCE_INLINE bool | utBoxExclude (const UT::Box< T, NAXES > &box) noexcept |
|
template<uint NAXES> |
SYS_FORCE_INLINE bool | utBoxExclude (const UT::Box< fpreal32, NAXES > &box) noexcept |
|
template<typename T , uint NAXES> |
SYS_FORCE_INLINE T | utBoxCenter (const UT::Box< T, NAXES > &box, uint axis) noexcept |
|
template<typename T , uint NAXES> |
SYS_FORCE_INLINE T | utBoxExclude (const UT_FixedVector< T, NAXES > &position) noexcept |
|
template<uint NAXES> |
SYS_FORCE_INLINE bool | utBoxExclude (const UT_FixedVector< fpreal32, NAXES > &position) noexcept |
|
template<typename T , uint NAXES> |
SYS_FORCE_INLINE T | utBoxCenter (const UT_FixedVector< T, NAXES > &position, uint axis) noexcept |
|
template<typename T > |
SYS_FORCE_INLINE bool | utBoxExclude (const UT_Vector2T< T > &position) noexcept |
|
template<typename T > |
SYS_FORCE_INLINE bool | utBoxExclude (const UT_Vector3T< T > &position) noexcept |
|
template<typename T > |
SYS_FORCE_INLINE bool | utBoxExclude (const UT_Vector4T< T > &position) noexcept |
|
template<> |
SYS_FORCE_INLINE bool | utBoxExclude (const UT_Vector2T< fpreal32 > &position) noexcept |
|
template<> |
SYS_FORCE_INLINE bool | utBoxExclude (const UT_Vector3T< fpreal32 > &position) noexcept |
|
template<> |
SYS_FORCE_INLINE bool | utBoxExclude (const UT_Vector4T< fpreal32 > &position) noexcept |
|
template<typename T > |
SYS_FORCE_INLINE T | utBoxCenter (const UT_Vector2T< T > &position, uint axis) noexcept |
|
template<typename T > |
SYS_FORCE_INLINE T | utBoxCenter (const UT_Vector3T< T > &position, uint axis) noexcept |
|
template<typename T > |
SYS_FORCE_INLINE T | utBoxCenter (const UT_Vector4T< T > &position, uint axis) noexcept |
|
template<typename BOX_TYPE , typename SRC_INT_TYPE , typename INT_TYPE > |
INT_TYPE | utExcludeNaNInfBoxIndices (const BOX_TYPE *boxes, SRC_INT_TYPE *indices, INT_TYPE &nboxes) noexcept |
|
template<typename T , uint NAXES, bool PARALLEL, typename INT_TYPE0 , typename DATA , typename INT_TYPE > |
void | utCreateBVHInterleavedBoxesHelper (INT_TYPE nodei, INT_TYPE next_node_id, const DATA &data, UT::Box< T, NAXES > *data_for_parent) noexcept |
|
template<bool PARALLEL, typename DATA > |
void | utComputeNodeNItemsHelper (uint nodei, uint next_node_id, uint next_item_id, const DATA &data) noexcept |
|
template<typename RADIUS_ARRAY > |
SYS_FORCE_INLINE void | utHandleRadiiLinearly (float &d2, const RADIUS_ARRAY &radii, uint index) |
|
template<bool farthest, bool reordered, bool use_max_points, uint NAXES, typename QUERY_POINT , typename INT_TYPE0 , typename POSITION_ARRAY , typename RADIUS_ARRAY > |
SYS_FORCE_INLINE void | utHandleSingleClosePoint (const uint index, const INT_TYPE0 *indices_mapping, const POSITION_ARRAY &positions, QUERY_POINT &query_point, BVHOrderedStack &output_queue, const RADIUS_ARRAY &radii, exint max_points, float &max_dist_squared) noexcept |
|
UT_API const UT_ErrorCategory & | GetOrmMigErrorCategory () |
|
UT_ErrorCode | make_error_code (UT::OrmMigError e) |
|
template<typename ITEM_INDEX , int MAX_ORDER, typename FT > |
RTreeT< ITEM_INDEX, MAX_ORDER > | constructRTree (const UT_BoxT< FT > item_box[], const ITEM_INDEX num_items) |
|
template<typename ITEM_INDEX , int MAX_ORDER, typename FT > |
RTreeT< ITEM_INDEX, MAX_ORDER > | constructRTree (const UT_Array< UT_BoxT< FT > > &item_box) |
|
template<typename ITEM_INDEX , int MAX_ORDER, typename FT > |
RTreeConfigurationT< FT > | constructRTreeConfiguration (const UT::RTreeT< ITEM_INDEX, MAX_ORDER > &tree, const UT_BoxT< FT > item_box[], const ITEM_INDEX num_items) |
|
template<typename ITEM_INDEX , int MAX_ORDER, typename FT > |
RTreeConfigurationT< FT > | constructRTreeConfiguration (const RTreeT< ITEM_INDEX, MAX_ORDER > &tree, const UT_Array< UT_BoxT< FT > > &item_box) |
|
template<typename ITEM_INDEX , int MAX_ORDER, typename FT , typename QUERY_SHAPE , typename ACCEPT_ITEM > |
void | forEachIntersecting (ACCEPT_ITEM &&accept_item, const RTreeT< ITEM_INDEX, MAX_ORDER > &tree, const RTreeConfigurationT< FT > &configuration, const QUERY_SHAPE &query_shape) |
|
template<typename ITEM_INDEX , int MAX_ORDER, typename FT > |
void | updateConfiguration (RTreeConfigurationT< FT > &configuration, const RTreeT< ITEM_INDEX, MAX_ORDER > &tree, const UT_BoxT< FT > item_box[], const ITEM_INDEX num_items) |
|
template<typename FT > |
exint | heapMemoryUsage (const RTreeConfigurationT< FT > &configuration) |
|
template<typename ITEM_INDEX , int MAX_ORDER, typename FT > |
void | updateConfiguration (RTreeConfigurationT< FT > &configuration, const RTreeT< ITEM_INDEX, MAX_ORDER > &tree, const UT_Array< UT_BoxT< FT > > &item_box) |
|
template<typename QUERY_SHAPE , typename ITEM_INDEX , int MAX_ORDER, typename FT > |
void | getIntersecting (UT_Array< ITEM_INDEX > &results, const RTreeT< ITEM_INDEX, MAX_ORDER > &tree, const RTreeConfigurationT< FT > &configuration, const QUERY_SHAPE &query_shape) |
|
template<typename QUERY_SHAPE , typename ITEM_INDEX , int MAX_ORDER, typename FT > |
ITEM_INDEX * | getIntersectingRaw (const RTreeT< ITEM_INDEX, MAX_ORDER > &tree, const RTreeConfigurationT< FT > &configuration, const QUERY_SHAPE &query_shape, ITEM_INDEX *const items_begin) |
|
size_t | subtreeDetermineNumNodes (const int MAX_ORDER, const size_t size) |
|
template<typename BOX , typename ITEM_INDEX_REP , int MAX_ORDER> |
RNodeT< ITEM_INDEX_REP,
MAX_ORDER > * | subtreeCreate (BOX &bounding_box, BOX shared_boxes[], UT_BoxedItemT< BOX, ITEM_INDEX_REP > *const begin, UT_BoxedItemT< BOX, ITEM_INDEX_REP > *const end, RNodeT< ITEM_INDEX_REP, MAX_ORDER > shared_nodes[], RNodeT< ITEM_INDEX_REP, MAX_ORDER > *&shared_nodes_end) |
|
template<typename ITEM_INDEX_REP , int MAX_ORDER, typename ITEM_BOX , typename FT > |
void | subtreeAssignItemBoxArray (UT_BoxT< FT > &bounding_box, UT_BoxT< FT > shared_boxes[], const RNodeT< ITEM_INDEX_REP, MAX_ORDER > shared_nodes[], const RNodeT< ITEM_INDEX_REP, MAX_ORDER > *const node, ITEM_BOX &&item_box) |
|
template<typename ITEM_INDEX_REP , int MAX_ORDER> |
exint | subtreeComputeMaxDepth (const RNodeT< ITEM_INDEX_REP, MAX_ORDER > shared_nodes[], const RNodeT< ITEM_INDEX_REP, MAX_ORDER > *const node) |
|
UT_API const UT_ErrorCategory & | GetSqliteErrorCategory () |
|
UT_API const UT_ErrorCategory & | GetSqlErrorCategory () |
|
UT_ErrorCode | make_error_code (UT::SqlError e) |
|
UT_API const UT_ErrorCategory & | GetOrmErrorCategory () |
|
UT_ErrorCode | make_error_code (UT::SqlOrmError e) |
|
numbers, this only applies to the integer portion of the float.
<width>
specifies the minimum width of the field. Arguments wider than this value will still be printed out in full. Preceding the width field with 0
will automatically set the alignment to number alignment, and the fill value to 0
.
<precision>
sets the precision for floating point numbers. For other types it specifies the maximum width of the field.
<type>
is a single character code that specifies how the type should be interpreted. If an argument type is not valid for the formatting type, the formatting type is ignored. The supported types are:
b
: Output integers as binary numbers.
B
: Output integers as binary numbers with an upper-case prefix (if using the #
option.
c
: Output integers interpreted as a Unicode code point.
d
: Output integers as decimal numbers. This is the default for integers.
e
: Use the exponent notation for floating point numbers.
E
: Same as e
, except the exponent separator is upper-cased.
f
: Use the fixed point notation for floating point numbers.
F
: Same as f
.
g
: Format a floating point number as either fixed point or scientific, depending on its magnitude, which mostly results in the shortest form being used. This is the default for floats.
G
: Same as g
, except the exponent separator is upper-cased.
o
: Output integers as octals.
x
: Output integers and floats as hexadecimal. For floats this uses the special hexadecimal float output.
X
: The same as x
, except all alphabetic digits and prefix are output in upper-case.
%
: Takes a floating point number, multiplies it by 100 and outputs it with a percentage sign appended, using fixed point notation. The default precision in this mode is 2.
Example:
UTformat(
"Index : {3} {0} {2} {1}\n",
'A',
'B',
'C',
'D');
Result:
String: foobar
Field : =========1==========
Perc : 12.3%
Printf Grammar
The UTprintf and UT_Format::printf functions use formatting code very similar to the POSIX specification for printf. The code begins with a single %
character, followed by zero or more modifiers, ending with the type specifier. Where this implementation of the printf
formatting code differs, is that there is no need to add length modifiers. Any length modifers will simply be ignored.
Custom Formatting
Custom types are supported through custom formatting functions. To define a custom formatting function for a specific type, the following function specialization needs to be implemented:
Where:
buffer
is a byte buffer to write the result into. If buffer
is a nullptr
, then the function should return the number of bytes required to store the final result.
buffer_size
is the size of the byte buffer passed in via buffer
. This should be ignored if buffer
is nullptr
.
- is value to custom format. The function should return the number of bytes written out, or, if
buffer
is nullptr
, the amount of bytes needed to write out the entire custom type representation.
A user-defined string literal to construct UT_StringHolder objects. E.g:
auto lit = "This is my UT_StringHolder literal"_sh;