1 // txt2c.cpp : This simple app builds a table
2 // of discrete probability distribution functions
3 // and generates a .cpp/.h file that describe them.
4 //
5
6 #include <string.h>
7 #include <iostream>
8 #include <fstream>
9 #include <stdio.h>
10 #include <stdlib.h>
11
12 #include "dpdf.h"
13
14 using namespace std;
15
16 int
main(int argc,char * argv[])17 main(int argc, char* argv[])
18 {
19 if (argc < 4)
20 {
21 cerr << "Usage is " << argv[0] << " maxsides maxrolls scale" << endl;
22 cerr << "This will build dpdf_table.cpp and dpdf_table.h" << endl;
23 return -2;
24 }
25
26 ifstream is(argv[1], ios::in);
27
28 int maxsides, maxrolls, scale, roll, side;
29
30 maxsides = atoi(argv[1]);
31 maxrolls = atoi(argv[2]);
32 scale = atoi(argv[3]);
33
34 ofstream os("dpdf_table.cpp");
35 if (!os)
36 {
37 cerr << "Couldn't open for write " << "dpdf_table.cpp" << endl;
38 }
39 ofstream hos("dpdf_table.h");
40 if (!hos)
41 {
42 cerr << "Couldn't open for write " << "dpdf_table.h" << endl;
43 }
44
45 // Build the header file.
46 hos << "// dpdf_table.h" << endl
47 << "// Automagically generated by builddpdf" << endl
48 << "// DO NOT HAND EDIT. Yes, this means you." << endl
49 << endl;
50
51 hos << "// Dimensions of table, these are inclusive." << endl;
52 hos << "#define DPDF_MAXSIDES " << maxsides << endl;
53 hos << "#define DPDF_MAXROLLS " << maxrolls << endl;
54 hos << "#define DPDF_SCALE " << scale << endl;
55 hos << endl;
56
57 hos << "// Since 0 and 1 are obvious for sides, hence the -1" << endl;
58 hos << "extern const int glb_dpdftable[DPDF_MAXROLLS+1][DPDF_MAXSIDES-1];" << endl;
59
60
61 os << "// dpdf_table.cpp" << endl
62 << "// Automagically generated by builddpdf" << endl
63 << "// DO NOT HAND EDIT. Yes, this means you." << endl
64 << endl;
65
66 os << "#include \"dpdf_table.h\"" << endl
67 << endl;
68
69 os << "const int glb_dpdftable[DPDF_MAXROLLS+1][DPDF_MAXSIDES-1] =" << endl
70 << "{" << endl;
71
72 for (roll = 0; roll <= maxrolls; roll++)
73 {
74 os << " { ";
75 for (side = 2; side <= maxsides; side++)
76 {
77 DPDF r(1, side), u(1, side);
78 int mean;
79 int i;
80
81 for (i = 0; i < roll; i++)
82 {
83 r.max(r, u);
84 }
85
86 mean = (int) (r.expectedValue() * scale + 0.5);
87
88 os << mean << ", ";
89 }
90 os << "}," << endl;
91 }
92
93 os << "};" << endl;
94
95 return 0;
96 }
97
98
99