OSDN Git Service

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