diff options
Diffstat (limited to 'libstdc++-v3/doc/doxygen/stdheader.cc')
-rw-r--r-- | libstdc++-v3/doc/doxygen/stdheader.cc | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/libstdc++-v3/doc/doxygen/stdheader.cc b/libstdc++-v3/doc/doxygen/stdheader.cc new file mode 100644 index 000000000..8bcb1a059 --- /dev/null +++ b/libstdc++-v3/doc/doxygen/stdheader.cc @@ -0,0 +1,171 @@ +// This is a slow larval-stage kludge to help massage the generated man +// pages. It's used like this: +const char* const usage = +"\nTakes on stdin, whitespace-separated words of the form\n" +"\n" +" [bits/]stl_foo.h\n" +" [bits/]std_foo.h\n" +"\n" +"and writes on stdout the nearest matching standard header name.\n" +"\n" +"Takes no command-line arguments.\n" +"\n"; + +#include <cstdlib> +#include <string> +#include <map> +#include <iostream> + +typedef std::map<std::string, std::string> Map; + +Map headers; + +void init_map() +{ + // Enter the glamourous world of data entry!! Maintain these! + headers["algo.h"] = "algorithm"; + headers["algobase.h"] = "algorithm"; + headers["algorithm.h"] = "algorithm"; + headers["heap.h"] = "algorithm"; + headers["bitset.h"] = "bitset"; + headers["complex.h"] = "complex"; + //headers["construct.h"] stl_construct.h entirely internal + headers["deque.h"] = "deque"; + headers["deque.tcc"] = "deque"; + headers["fstream.h"] = "fstream"; + headers["fstream.tcc"] = "fstream"; + headers["function.h"] = "functional"; + headers["functional.h"] = "functional"; + headers["iomanip.h"] = "iomanip"; + headers["basic_ios.h"] = "ios"; + headers["basic_ios.tcc"] = "ios"; + headers["ios.h"] = "ios"; + headers["iosfwd.h"] = "iosfwd"; + headers["iostream.h"] = "iostream"; + headers["istream.h"] = "istream"; + headers["istream.tcc"] = "istream"; + headers["iterator.h"] = "iterator"; + headers["iterator_base_funcs.h"] = "iterator"; + headers["iterator_base_types.h"] = "iterator"; + headers["stream_iterator.h"] = "iterator"; + headers["streambuf_iterator.h"] = "iterator"; + headers["limits.h"] = "limits"; + headers["list.h"] = "list"; + headers["list.tcc"] = "list"; + headers["codecvt.h"] = "locale"; + headers["locale.h"] = "locale"; + headers["localefwd.h"] = "locale"; + headers["locale_classes.h"] = "locale"; + headers["locale_facets.h"] = "locale"; + headers["locale_facets.tcc"] = "locale"; + headers["map.h"] = "map"; + headers["multimap.h"] = "map"; + headers["memory.h"] = "memory"; + headers["allocator.h"] = "memory"; + headers["raw_storage_iter.h"] = "memory"; + headers["tempbuf.h"] = "memory"; + headers["uninitialized.h"] = "memory"; + headers["numeric.h"] = "numeric"; + headers["ostream.h"] = "ostream"; + headers["ostream.tcc"] = "ostream"; + headers["queue.h"] = "queue"; + headers["set.h"] = "set"; + headers["multiset.h"] = "set"; + headers["sstream.h"] = "sstream"; + headers["sstream.tcc"] = "sstream"; + headers["stack.h"] = "stack"; + headers["functexcept.h"] = "stdexcept"; + headers["stdexcept.h"] = "stdexcept"; + headers["streambuf.h"] = "streambuf"; + headers["streambuf.tcc"] = "streambuf"; + headers["string.h"] = "string"; + headers["char_traits.h"] = "string"; + headers["postypes.h"] = "string"; + headers["basic_string.h"] = "string"; + headers["basic_string.tcc"] = "string"; + headers["tree.h"] = "backward/tree.h"; + headers["pair.h"] = "utility"; + headers["utility.h"] = "utility"; + headers["relops.h"] = "utility"; + headers["gslice.h"] = "valarray"; + headers["gslice_array.h"] = "valarray"; + headers["indirect_array.h"] = "valarray"; + headers["mask_array.h"] = "valarray"; + headers["slice_array.h"] = "valarray"; + headers["valarray.h"] = "valarray"; + headers["valarray_after.h"] = "valarray"; + headers["valarray_before.h"] = "valarray"; + headers["valarray_array.h"] = "valarray"; + headers["valarray_array.tcc"] = "valarray"; + headers["valarray_meta.h"] = "valarray"; + headers["bvector.h"] = "vector"; + headers["vector.h"] = "vector"; + headers["vector.tcc"] = "vector"; + + //headers["concurrence.h"] who knows + //headers["atomicity.h"] who knows + + // C wrappers -- probably was an easier way to do these, but oh well + headers["cassert.h"] = "cassert"; + headers["cctype.h"] = "cctype"; + headers["cerrno.h"] = "cerrno"; + headers["cfloat.h"] = "cfloat"; + headers["climits.h"] = "climits"; + headers["clocale.h"] = "clocale"; + headers["cmath.h"] = "cmath"; + headers["csetjmp.h"] = "csetjmp"; + headers["csignal.h"] = "csignal"; + headers["cstdarg.h"] = "cstdarg"; + headers["cstddef.h"] = "cstddef"; + headers["cstdio.h"] = "cstdio"; + headers["cstdlib.h"] = "cstdlib"; + headers["cstring.h"] = "cstring"; + headers["ctime.h"] = "ctime"; + headers["cwchar.h"] = "cwchar"; + headers["cwctype.h"] = "cwctype"; +} + + +void do_word (std::string const& longheader) +{ + std::string::size_type start = 0; + + // if it doesn't contain a "." then it's already a std header + if (longheader.find(".") == std::string::npos) + { + std::cout << longheader << '\n'; + return; + } + + if (longheader.substr(start,5) == "bits/") start += 5; + if ((longheader.substr(start,4) == "stl_") || + (longheader.substr(start,4) == "std_")) + { + start += 4; + } + + // come on, gdb, find `p' already... + const char* p = longheader.substr(start).c_str(); + Map::iterator word = headers.find(p); + if (word != headers.end()) + std::cout << word->second << '\n'; + else std::cout << "MAYBE_AN_ERROR_MESSAGE_HERE\n"; +} + + +int main (int argc, char**) +{ + if (argc > 1) + { + std::cerr << usage; + std::exit(0); + } + + init_map(); + + std::string w; + while (std::cin >> w) + do_word (w); +} + + |