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 |