Enumerables Without the Garbage: Part 7
Today we’ll wrap up the iterator series by finishing up porting C++’s <algorithm> header. We end up with a library of functions for common LINQ-style algorithms but without any of the garbage creation that slows our games down. Read on for the source and examples!
Here are the functions from the “min/max” and “other” sections that finish up the <algorithm> header:
MinElement
: find the smallest elementMaxElement
: find the largest elementMinMaxElement
: find the smallest and largest elementsLexicographicalCompare
: lexicographic order comparisonNextPermutation
: get the next permutation of a rangePrevPermutation
: get the previous permutation of a range
Building again on the test app from the previous articles in this series, I’ve added tests for each of the above functions to show you how to use them and that they work. You can also consult the thorough C++ documentation since these are direct ports from there. The test app also has a GcTest
function to show that no garbage is created by any of these functions. You can check it out in the TestScript.cs file in the GitHub project. You can also check out the output in the TestScript_output.txt file.
And here’s a screenshot of the GcTest
function in Unity’s profiler in “deep” mode to prove that none of this creates any garbage whatsoever:
Check out the GitHub project for the Iterator.cs
file that implements all of this. If you’ve got any questions about the iterator library or any suggestions on how to make it better, let me know in the comments!
Update: check out part eight