about summary refs log tree commit diff stats
path: root/freevars.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'freevars.cpp')
-rw-r--r--freevars.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/freevars.cpp b/freevars.cpp new file mode 100644 index 0000000..ca69f6c --- /dev/null +++ b/freevars.cpp
@@ -0,0 +1,45 @@
1#include "freevars.h"
2#include <fstream>
3
4freevars::freevars()
5{
6 vars = new map<string, vector<string>* >();
7}
8
9void freevars::addVar(string name, string filename)
10{
11 vector<string>* eltlist = new vector<string>();
12
13 ifstream infile(filename.c_str());
14 if (infile)
15 {
16 string line;
17
18 while (getline(infile, line))
19 {
20 eltlist->push_back(line);
21 }
22 } else {
23 eltlist->push_back("");
24 }
25
26 (*vars)[name] = eltlist;
27}
28
29string freevars::parse(string in)
30{
31 string res(in);
32
33 for (map<string, vector<string>* >::iterator it = vars->begin(); it != vars->end(); it++)
34 {
35 string tofind = "$" + it->first + "$";
36 size_t fpos = res.find(tofind);
37 if (fpos != string::npos)
38 {
39 int r = rand() % it->second->size();
40 res.replace(fpos, tofind.length(), (*it->second)[r], 0, string::npos);
41 }
42 }
43
44 return res;
45} \ No newline at end of file