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