1*404b540aSrobert // This is a slow larval-stage kludge to help massage the generated man
2*404b540aSrobert // pages. It's used like this:
3*404b540aSrobert const char* const usage =
4*404b540aSrobert "\nTakes on stdin, whitespace-separated words of the form\n"
5*404b540aSrobert "\n"
6*404b540aSrobert " [bits/]stl_foo.h\n"
7*404b540aSrobert " [bits/]std_foo.h\n"
8*404b540aSrobert "\n"
9*404b540aSrobert "and writes on stdout the nearest matching standard header name.\n"
10*404b540aSrobert "\n"
11*404b540aSrobert "Takes no command-line arguments.\n"
12*404b540aSrobert "\n";
13*404b540aSrobert
14*404b540aSrobert #include <string>
15*404b540aSrobert #include <map>
16*404b540aSrobert #include <iostream>
17*404b540aSrobert
18*404b540aSrobert typedef std::map<std::string, std::string> Map;
19*404b540aSrobert
20*404b540aSrobert Map headers;
21*404b540aSrobert
init_map()22*404b540aSrobert void init_map()
23*404b540aSrobert {
24*404b540aSrobert // Enter the glamourous world of data entry!! Maintain these!
25*404b540aSrobert headers["algo.h"] = "algorithm";
26*404b540aSrobert headers["algobase.h"] = "algorithm";
27*404b540aSrobert headers["algorithm.h"] = "algorithm";
28*404b540aSrobert headers["heap.h"] = "algorithm";
29*404b540aSrobert headers["bitset.h"] = "bitset";
30*404b540aSrobert headers["complex.h"] = "complex";
31*404b540aSrobert //headers["construct.h"] stl_construct.h entirely internal
32*404b540aSrobert headers["deque.h"] = "deque";
33*404b540aSrobert headers["deque.tcc"] = "deque";
34*404b540aSrobert headers["fstream.h"] = "fstream";
35*404b540aSrobert headers["fstream.tcc"] = "fstream";
36*404b540aSrobert headers["function.h"] = "functional";
37*404b540aSrobert headers["functional.h"] = "functional";
38*404b540aSrobert headers["iomanip.h"] = "iomanip";
39*404b540aSrobert headers["basic_ios.h"] = "ios";
40*404b540aSrobert headers["basic_ios.tcc"] = "ios";
41*404b540aSrobert headers["ios.h"] = "ios";
42*404b540aSrobert headers["iosfwd.h"] = "iosfwd";
43*404b540aSrobert headers["iostream.h"] = "iostream";
44*404b540aSrobert headers["istream.h"] = "istream";
45*404b540aSrobert headers["istream.tcc"] = "istream";
46*404b540aSrobert headers["iterator.h"] = "iterator";
47*404b540aSrobert headers["iterator_base_funcs.h"] = "iterator";
48*404b540aSrobert headers["iterator_base_types.h"] = "iterator";
49*404b540aSrobert headers["stream_iterator.h"] = "iterator";
50*404b540aSrobert headers["streambuf_iterator.h"] = "iterator";
51*404b540aSrobert headers["limits.h"] = "limits";
52*404b540aSrobert headers["list.h"] = "list";
53*404b540aSrobert headers["list.tcc"] = "list";
54*404b540aSrobert headers["codecvt.h"] = "locale";
55*404b540aSrobert headers["locale.h"] = "locale";
56*404b540aSrobert headers["localefwd.h"] = "locale";
57*404b540aSrobert headers["locale_classes.h"] = "locale";
58*404b540aSrobert headers["locale_facets.h"] = "locale";
59*404b540aSrobert headers["locale_facets.tcc"] = "locale";
60*404b540aSrobert headers["map.h"] = "map";
61*404b540aSrobert headers["multimap.h"] = "map";
62*404b540aSrobert headers["memory.h"] = "memory";
63*404b540aSrobert headers["allocator.h"] = "memory";
64*404b540aSrobert headers["raw_storage_iter.h"] = "memory";
65*404b540aSrobert headers["tempbuf.h"] = "memory";
66*404b540aSrobert headers["uninitialized.h"] = "memory";
67*404b540aSrobert headers["numeric.h"] = "numeric";
68*404b540aSrobert headers["ostream.h"] = "ostream";
69*404b540aSrobert headers["ostream.tcc"] = "ostream";
70*404b540aSrobert headers["queue.h"] = "queue";
71*404b540aSrobert headers["set.h"] = "set";
72*404b540aSrobert headers["multiset.h"] = "set";
73*404b540aSrobert headers["sstream.h"] = "sstream";
74*404b540aSrobert headers["sstream.tcc"] = "sstream";
75*404b540aSrobert headers["stack.h"] = "stack";
76*404b540aSrobert headers["functexcept.h"] = "stdexcept";
77*404b540aSrobert headers["stdexcept.h"] = "stdexcept";
78*404b540aSrobert headers["streambuf.h"] = "streambuf";
79*404b540aSrobert headers["streambuf.tcc"] = "streambuf";
80*404b540aSrobert headers["string.h"] = "string";
81*404b540aSrobert headers["char_traits.h"] = "string";
82*404b540aSrobert headers["postypes.h"] = "string";
83*404b540aSrobert headers["basic_string.h"] = "string";
84*404b540aSrobert headers["basic_string.tcc"] = "string";
85*404b540aSrobert headers["tree.h"] = "backward/tree.h";
86*404b540aSrobert headers["pair.h"] = "utility";
87*404b540aSrobert headers["utility.h"] = "utility";
88*404b540aSrobert headers["relops.h"] = "utility";
89*404b540aSrobert headers["gslice.h"] = "valarray";
90*404b540aSrobert headers["gslice_array.h"] = "valarray";
91*404b540aSrobert headers["indirect_array.h"] = "valarray";
92*404b540aSrobert headers["mask_array.h"] = "valarray";
93*404b540aSrobert headers["slice_array.h"] = "valarray";
94*404b540aSrobert headers["valarray.h"] = "valarray";
95*404b540aSrobert headers["valarray_after.h"] = "valarray";
96*404b540aSrobert headers["valarray_before.h"] = "valarray";
97*404b540aSrobert headers["valarray_array.h"] = "valarray";
98*404b540aSrobert headers["valarray_array.tcc"] = "valarray";
99*404b540aSrobert headers["valarray_meta.h"] = "valarray";
100*404b540aSrobert headers["bvector.h"] = "vector";
101*404b540aSrobert headers["vector.h"] = "vector";
102*404b540aSrobert headers["vector.tcc"] = "vector";
103*404b540aSrobert
104*404b540aSrobert //headers["concurrence.h"] who knows
105*404b540aSrobert //headers["atomicity.h"] who knows
106*404b540aSrobert
107*404b540aSrobert // C wrappers -- probably was an easier way to do these, but oh well
108*404b540aSrobert headers["cassert.h"] = "cassert";
109*404b540aSrobert headers["cctype.h"] = "cctype";
110*404b540aSrobert headers["cerrno.h"] = "cerrno";
111*404b540aSrobert headers["cfloat.h"] = "cfloat";
112*404b540aSrobert headers["climits.h"] = "climits";
113*404b540aSrobert headers["clocale.h"] = "clocale";
114*404b540aSrobert headers["cmath.h"] = "cmath";
115*404b540aSrobert headers["csetjmp.h"] = "csetjmp";
116*404b540aSrobert headers["csignal.h"] = "csignal";
117*404b540aSrobert headers["cstdarg.h"] = "cstdarg";
118*404b540aSrobert headers["cstddef.h"] = "cstddef";
119*404b540aSrobert headers["cstdio.h"] = "cstdio";
120*404b540aSrobert headers["cstdlib.h"] = "cstdlib";
121*404b540aSrobert headers["cstring.h"] = "cstring";
122*404b540aSrobert headers["ctime.h"] = "ctime";
123*404b540aSrobert headers["cwchar.h"] = "cwchar";
124*404b540aSrobert headers["cwctype.h"] = "cwctype";
125*404b540aSrobert }
126*404b540aSrobert
127*404b540aSrobert
do_word(std::string const & longheader)128*404b540aSrobert void do_word (std::string const& longheader)
129*404b540aSrobert {
130*404b540aSrobert std::string::size_type start = 0;
131*404b540aSrobert
132*404b540aSrobert // if it doesn't contain a "." then it's already a std header
133*404b540aSrobert if (longheader.find(".") == std::string::npos)
134*404b540aSrobert {
135*404b540aSrobert std::cout << longheader << '\n';
136*404b540aSrobert return;
137*404b540aSrobert }
138*404b540aSrobert
139*404b540aSrobert if (longheader.substr(start,5) == "bits/") start += 5;
140*404b540aSrobert if ((longheader.substr(start,4) == "stl_") ||
141*404b540aSrobert (longheader.substr(start,4) == "std_"))
142*404b540aSrobert {
143*404b540aSrobert start += 4;
144*404b540aSrobert }
145*404b540aSrobert
146*404b540aSrobert // come on, gdb, find `p' already...
147*404b540aSrobert const char* p = longheader.substr(start).c_str();
148*404b540aSrobert Map::iterator word = headers.find(p);
149*404b540aSrobert if (word != headers.end())
150*404b540aSrobert std::cout << word->second << '\n';
151*404b540aSrobert else std::cout << "MAYBE_AN_ERROR_MESSAGE_HERE\n";
152*404b540aSrobert }
153*404b540aSrobert
154*404b540aSrobert
main(int argc,char **)155*404b540aSrobert int main (int argc, char**)
156*404b540aSrobert {
157*404b540aSrobert if (argc > 1)
158*404b540aSrobert {
159*404b540aSrobert std::cerr << usage;
160*404b540aSrobert exit(0);
161*404b540aSrobert }
162*404b540aSrobert
163*404b540aSrobert init_map();
164*404b540aSrobert
165*404b540aSrobert std::string w;
166*404b540aSrobert while (std::cin >> w)
167*404b540aSrobert do_word (w);
168*404b540aSrobert }
169*404b540aSrobert
170*404b540aSrobert
171