xref: /openbsd-src/gnu/gcc/libstdc++-v3/docs/doxygen/stdheader.cc (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
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