blob: fe21042ba9b5876ff324fb8d953264952cd2f861 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#pragma once
#include "StarJson.hpp"
#include "StarRandom.hpp"
namespace Star {
STAR_EXCEPTION(NameGeneratorException, StarException);
STAR_CLASS(PatternedNameGenerator);
struct MarkovSource {
size_t prefixSize;
size_t endSize;
StringList starts;
StringMap<StringList> chains;
StringSet ends;
};
class PatternedNameGenerator {
public:
PatternedNameGenerator();
String generateName(String const& rulesAsset) const;
String generateName(String const& rulesAsset, uint64_t seed) const;
String generateName(String const& rulesAsset, RandomSource& random) const;
private:
String processRule(JsonArray const& rule, RandomSource& random) const;
bool isProfane(String const& name) const;
MarkovSource makeMarkovSource(size_t prefixSize, size_t endSize, StringList sourceNames);
StringMap<MarkovSource> m_markovSources;
StringSet m_profanityFilter;
};
}
|