24#if !BOOST_PP_IS_ITERATING
26#ifndef PXR_BASE_VT_FUNCTIONS_H
27#define PXR_BASE_VT_FUNCTIONS_H
32#include "pxr/base/vt/api.h"
34#include <boost/preprocessor/enum_params.hpp>
35#include <boost/preprocessor/iterate.hpp>
36#include <boost/preprocessor/repeat.hpp>
39PXR_NAMESPACE_OPEN_SCOPE
41#define VT_FUNCTIONS_MAX_ARGS 6
47#define BOOST_PP_ITERATION_PARAMS_1 (4, \
48 (0, VT_FUNCTIONS_MAX_ARGS, "pxr/base/vt/functions.h", 0))
49#include BOOST_PP_ITERATE()
200 for (
size_t i = 0; i != a.
size(); ++i) {
201 if (a[i] != VtZero<T>())
226 for (
size_t i = 0; i != a.
size(); ++i) {
227 if (a[i] == VtZero<T>())
244#define VTFUNCTION_BOOL(funcname,op) \
245template<typename T> \
247funcname(T const &scalar, VtArray<T> const &vec) { \
248 VtArray<bool> ret(vec.size()); \
249 for (size_t i = 0, n = vec.size(); i != n; ++i) { \
250 ret[i] = (scalar op vec[i]); \
254template<typename T> \
256funcname(VtArray<T> const &vec, T const &scalar) { \
257 VtArray<bool> ret(vec.size()); \
258 for (size_t i = 0, n = vec.size(); i != n; ++i) { \
259 ret[i] = (vec[i] op scalar); \
263template<typename T> \
265funcname(VtArray<T> const &a, VtArray<T> const &b) \
267 if (a.empty() || b.empty()) { \
268 return VtArray<bool>(); \
271 if (a.size() == 1) { \
272 return funcname(a[0], b); \
273 } else if (b.size() == 1) { \
274 return funcname(a, b[0]); \
275 } else if (a.size() == b.size()) { \
276 VtArray<bool> ret(a.size()); \
277 for (size_t i = 0, n = a.size(); i != n; ++i) { \
278 ret[i] = (a[i] op b[i]); \
282 TF_CODING_ERROR("Non-conforming inputs."); \
283 return VtArray<bool>(); \
294PXR_NAMESPACE_CLOSE_SCOPE
306#define N BOOST_PP_ITERATION()
308#if BOOST_PP_ITERATION_FLAGS() == 0
310#define VtCat_SIZE(dummy, n, dummy2) newSize += s##n.size();
311#define VtCat_COPY(dummy, n, dummy2) \
312 for (size_t i = 0; i < s##n.size(); ++i) \
313 ret[offset+i] = s##n[i]; \
314 offset += s##n.size();
323 BOOST_PP_REPEAT( N, VtCat_SIZE, ignored )
334 BOOST_PP_REPEAT( N, VtCat_COPY, ignored )
Represents an arbitrary dimensional rectangular container class.
bool VtAllTrue(VtArray< T > const &a)
Returns true if every element of input array is not VtZero, else false.
VtArray< T > VtCat(VtArray< T > const &a0, VtArray< T > const &a1,... VtArray< T > const &aN)
Concatenates arrays.
bool VtAnyTrue(VtArray< T > const &a)
Returns true if any element of input array is not VtZero, else false.
VtArray< T > VtLessOrEqual(VtArray< T > const &a, VtArray< T > const &b)
Returns a bool array specifying, element-by-element, if the first input contains values less than or ...
VtArray< T > VtGreaterOrEqual(VtArray< T > const &a, VtArray< T > const &b)
Returns a bool array specifying, element-by-element, if the first input contains values greater than ...
VtArray< T > VtNotEqual(VtArray< T > const &a, VtArray< T > const &b)
Returns a bool array specifying, element-by-element, if the two inputs contain inequal values.
VtArray< T > VtEqual(VtArray< T > const &a, VtArray< T > const &b)
Returns a bool array specifying, element-by-element, if the two inputs contain equal values.
VtArray< T > VtLess(VtArray< T > const &a, VtArray< T > const &b)
Returns a bool array specifying, element-by-element, if the first input contains values less than tho...
VtArray< T > VtGreater(VtArray< T > const &a, VtArray< T > const &b)
Returns a bool array specifying, element-by-element, if the first input contains values greater than ...
size_t size() const
Return the total number of elements in this array.
bool empty() const
Return true if this array contains no elements, false otherwise.