9a94270e95
The previous implementation of `ListAt` would iteratively pass through the list to find the i'th entry. It was made faster by searching through 8 indices at a time, but it could still be time consuming for long lists. This change instead uses a divide-and-conquer approach. It does this by first creating a `vtkm::List` with i repetitions of `const void*`. It can do this by recursively splitting i in half and appending the resulting lists together. It then uses this list of `const void*` by constructing a method that first takes these i `const void*` arguments, then a pointer, then whatever. The method returns the type of that pointer. The method is never actually defined, but a `declspec` can determine what the return type should be. This method was taken from brigand (https://github.com/edouarda/brigand). |
||
---|---|---|
.. | ||
cont | ||
exec | ||
filter | ||
internal | ||
interop | ||
io | ||
random | ||
rendering | ||
source | ||
testing | ||
thirdparty | ||
worklet | ||
.gitattributes | ||
Algorithms.h | ||
Assert.h | ||
Atomic.h | ||
BinaryOperators.h | ||
BinaryPredicates.h | ||
Bitset.h | ||
Bounds.h | ||
CellClassification.h | ||
CellShape.h | ||
CellTraits.h | ||
CMakeLists.txt | ||
Deprecated.h | ||
ErrorCode.h | ||
Flags.h | ||
Geometry.h | ||
Geometry.hxx | ||
Hash.h | ||
ImplicitFunction.h | ||
List.h | ||
ListTag.h | ||
LowerBound.h | ||
Math.h | ||
Math.h.in | ||
Matrix.h | ||
NewtonsMethod.h | ||
Pair.h | ||
Particle.h | ||
Range.h | ||
RangeId2.h | ||
RangeId3.h | ||
RangeId.h | ||
StaticAssert.h | ||
Swap.h | ||
TopologyElementTag.h | ||
Transform3D.h | ||
Tuple.h | ||
Tuple.h.in | ||
TypeList.h | ||
TypeListTag.h | ||
Types.h | ||
TypeTraits.h | ||
UnaryPredicates.h | ||
UpperBound.h | ||
VecAxisAlignedPointCoordinates.h | ||
VecFlat.h | ||
VecFromPortal.h | ||
VecFromPortalPermute.h | ||
VecFromVirtPortal.h | ||
VectorAnalysis.h | ||
VecTraits.h | ||
VecVariable.h | ||
Version.h.in | ||
VirtualObjectBase.h |