[Support] Make BinaryStreamArray extractors stateless.
Instead, we now pass a context memeber through the extraction
process.
llvm-svn: 301556
diff --git a/llvm/unittests/Support/BinaryStreamTest.cpp b/llvm/unittests/Support/BinaryStreamTest.cpp
index 1e646a6..74c51e3 100644
--- a/llvm/unittests/Support/BinaryStreamTest.cpp
+++ b/llvm/unittests/Support/BinaryStreamTest.cpp
@@ -358,12 +358,14 @@
struct StringExtractor {
public:
- Error operator()(BinaryStreamRef Stream, uint32_t &Len, StringRef &Item) {
- if (Index == 0)
+ typedef uint32_t ContextType;
+ static Error extract(BinaryStreamRef Stream, uint32_t &Len, StringRef &Item,
+ uint32_t *Index) {
+ if (*Index == 0)
Len = strlen("1. Test");
- else if (Index == 1)
+ else if (*Index == 1)
Len = strlen("2. Longer Test");
- else if (Index == 2)
+ else if (*Index == 2)
Len = strlen("3. Really Long Test");
else
Len = strlen("4. Super Extra Longest Test Of All");
@@ -372,16 +374,14 @@
return EC;
Item =
StringRef(reinterpret_cast<const char *>(Bytes.data()), Bytes.size());
- ++Index;
+ ++(*Index);
return Error::success();
}
-
- private:
- uint32_t Index = 0;
};
for (auto &Stream : Streams) {
- VarStreamArray<StringRef, StringExtractor> Array(*Stream.Input);
+ uint32_t Context = 0;
+ VarStreamArray<StringRef, StringExtractor> Array(*Stream.Input, &Context);
auto Iter = Array.begin();
ASSERT_EQ("1. Test", *Iter++);
ASSERT_EQ("2. Longer Test", *Iter++);