| OLD | NEW |
| (Empty) |
| 1 // Copyright 2008 The RE2 Authors. All Rights Reserved. | |
| 2 // Use of this source code is governed by a BSD-style | |
| 3 // license that can be found in the LICENSE file. | |
| 4 | |
| 5 // String generator: generates all possible strings of up to | |
| 6 // maxlen letters using the set of letters in alpha. | |
| 7 // Fetch strings using a Java-like Next()/HasNext() interface. | |
| 8 | |
| 9 #ifndef RE2_TESTING_STRING_GENERATOR_H__ | |
| 10 #define RE2_TESTING_STRING_GENERATOR_H__ | |
| 11 | |
| 12 #include <string> | |
| 13 #include <vector> | |
| 14 #include "util/util.h" | |
| 15 #include "util/random.h" | |
| 16 #include "re2/stringpiece.h" | |
| 17 | |
| 18 namespace re2 { | |
| 19 | |
| 20 class StringGenerator { | |
| 21 public: | |
| 22 StringGenerator(int maxlen, const vector<string>& alphabet); | |
| 23 ~StringGenerator(); | |
| 24 const StringPiece& Next(); | |
| 25 bool HasNext() { return hasnext_; } | |
| 26 | |
| 27 // Resets generator to start sequence over. | |
| 28 void Reset(); | |
| 29 | |
| 30 // Causes generator to emit random strings for next n calls to Next(). | |
| 31 void Random(int32 seed, int n); | |
| 32 | |
| 33 // Causes generator to emit a NULL as the next call. | |
| 34 void GenerateNULL(); | |
| 35 | |
| 36 private: | |
| 37 bool IncrementDigits(); | |
| 38 bool RandomDigits(); | |
| 39 | |
| 40 // Global state. | |
| 41 int maxlen_; // Maximum length string to generate. | |
| 42 vector<string> alphabet_; // Alphabet, one string per letter. | |
| 43 | |
| 44 // Iteration state. | |
| 45 StringPiece sp_; // Last StringPiece returned by Next(). | |
| 46 string s_; // String data in last StringPiece returned by Next
(). | |
| 47 bool hasnext_; // Whether Next() can be called again. | |
| 48 vector<int> digits_; // Alphabet indices for next string. | |
| 49 bool generate_null_; // Whether to generate a NULL StringPiece next. | |
| 50 bool random_; // Whether generated strings are random. | |
| 51 int nrandom_; // Number of random strings left to generate. | |
| 52 ACMRandom* acm_; // Random number generator | |
| 53 DISALLOW_COPY_AND_ASSIGN(StringGenerator); | |
| 54 }; | |
| 55 | |
| 56 } // namespace re2 | |
| 57 | |
| 58 #endif // RE2_TESTING_STRING_GENERATOR_H__ | |
| OLD | NEW |