standard_types.cc
Go to the documentation of this file.
00001 #include "standard_types.hh"
00002 #include "containers.hh"
00003 #include <boost/lexical_cast.hpp>
00004 #include "typelib/typename.hh"
00005 
00006 using namespace Typelib;
00007 
00008 static void addStandardTypes(Typelib::Registry& r)
00009 {
00010     BOOST_STATIC_ASSERT((Typelib::NamespaceMark == '/'));
00011 
00012     r.add(new NullType("/nil"));
00013     r.alias("/nil", "/void");
00014     
00015     // Add standard sized integers
00016     static const int sizes[] = { 1, 2, 4, 8 };
00017     for (int i = 0; i < 4; ++i)
00018     {
00019         std::string suffix = "int" + boost::lexical_cast<std::string>(sizes[i] * 8) + "_t";
00020         r.add(new Numeric("/"  + suffix, sizes[i], Numeric::SInt));
00021         r.add(new Numeric("/u" + suffix, sizes[i], Numeric::UInt));
00022     }
00023 
00024     std::string normalized_type_name = "/int" + boost::lexical_cast<std::string>(std::numeric_limits<signed char>::digits + 1) + "_t";
00025     r.alias(normalized_type_name, "/signed char");
00026     if (std::numeric_limits<char>::is_signed)
00027         r.alias(normalized_type_name, "/char");
00028     normalized_type_name = "/uint" + boost::lexical_cast<std::string>(std::numeric_limits<signed char>::digits + 1) + "_t";
00029     if (!std::numeric_limits<char>::is_signed)
00030         r.alias(normalized_type_name, "/char");
00031     r.alias(normalized_type_name, "/unsigned char");
00032 
00033 
00034     normalized_type_name = "/int" + boost::lexical_cast<std::string>(std::numeric_limits<short int>::digits + 1) + "_t";
00035     r.alias(normalized_type_name, "/signed short int");
00036     r.alias(normalized_type_name, "/signed int short");
00037     r.alias(normalized_type_name, "/int signed short");
00038     r.alias(normalized_type_name, "/short signed int");
00039     r.alias(normalized_type_name, "/signed short int");
00040     r.alias(normalized_type_name, "/signed short");
00041     r.alias(normalized_type_name, "/short signed");
00042     r.alias(normalized_type_name, "/short");
00043     r.alias(normalized_type_name, "/short int");
00044     normalized_type_name = "/uint" + boost::lexical_cast<std::string>(std::numeric_limits<short int>::digits + 1) + "_t";
00045     r.alias(normalized_type_name, "/short unsigned int");
00046     r.alias(normalized_type_name, "/short int unsigned");
00047     r.alias(normalized_type_name, "/int short unsigned");
00048     r.alias(normalized_type_name, "/unsigned short int");
00049     r.alias(normalized_type_name, "/short unsigned");
00050     r.alias(normalized_type_name, "/unsigned short");
00051 
00052     normalized_type_name = "/int" + boost::lexical_cast<std::string>(std::numeric_limits<int>::digits + 1) + "_t";
00053     r.alias(normalized_type_name, "/signed int");
00054     r.alias(normalized_type_name, "/signed");
00055     r.alias(normalized_type_name, "/int signed");
00056     r.alias(normalized_type_name, "/int");
00057     normalized_type_name = "/uint" + boost::lexical_cast<std::string>(std::numeric_limits<int>::digits + 1) + "_t";
00058     r.alias(normalized_type_name, "/unsigned int");
00059     r.alias(normalized_type_name, "/unsigned");
00060     r.alias(normalized_type_name, "/int unsigned");
00061 
00062     normalized_type_name = "/int" + boost::lexical_cast<std::string>(std::numeric_limits<long>::digits + 1) + "_t";
00063     r.alias(normalized_type_name, "/signed long int");
00064     r.alias(normalized_type_name, "/signed int long");
00065     r.alias(normalized_type_name, "/int signed long");
00066     r.alias(normalized_type_name, "/long signed int");
00067     r.alias(normalized_type_name, "/signed long int");
00068     r.alias(normalized_type_name, "/signed long");
00069     r.alias(normalized_type_name, "/long signed");
00070     r.alias(normalized_type_name, "/long");
00071     r.alias(normalized_type_name, "/long int");
00072     normalized_type_name = "/uint" + boost::lexical_cast<std::string>(std::numeric_limits<long>::digits + 1) + "_t";
00073     r.alias(normalized_type_name, "/long unsigned int");
00074     r.alias(normalized_type_name, "/long int unsigned");
00075     r.alias(normalized_type_name, "/int long unsigned");
00076     r.alias(normalized_type_name, "/unsigned long int");
00077     r.alias(normalized_type_name, "/long unsigned");
00078     r.alias(normalized_type_name, "/unsigned long");
00079 
00080     normalized_type_name = "/int" + boost::lexical_cast<std::string>(std::numeric_limits<long long>::digits + 1) + "_t";
00081     r.alias(normalized_type_name, "/signed long long int");
00082     r.alias(normalized_type_name, "/signed long int long");
00083     r.alias(normalized_type_name, "/signed int long long");
00084     r.alias(normalized_type_name, "/int signed long long");
00085     r.alias(normalized_type_name, "/long signed long int");
00086     r.alias(normalized_type_name, "/long long signed int");
00087     r.alias(normalized_type_name, "/long long int signed");
00088     r.alias(normalized_type_name, "/signed long long");
00089     r.alias(normalized_type_name, "/long long signed");
00090     r.alias(normalized_type_name, "/long signed long");
00091     r.alias(normalized_type_name, "/long long int");
00092     r.alias(normalized_type_name, "/long int long");
00093     r.alias(normalized_type_name, "/int long long");
00094     r.alias(normalized_type_name, "/long long");
00095     normalized_type_name = "/uint" + boost::lexical_cast<std::string>(std::numeric_limits<long long>::digits + 1) + "_t";
00096     r.alias(normalized_type_name, "/unsigned long long int");
00097     r.alias(normalized_type_name, "/unsigned long int long");
00098     r.alias(normalized_type_name, "/unsigned int long long");
00099     r.alias(normalized_type_name, "/int unsigned long long");
00100     r.alias(normalized_type_name, "/long unsigned long int");
00101     r.alias(normalized_type_name, "/long long unsigned int");
00102     r.alias(normalized_type_name, "/long long int unsigned");
00103     r.alias(normalized_type_name, "/unsigned long long");
00104     r.alias(normalized_type_name, "/long long unsigned");
00105     r.alias(normalized_type_name, "/long unsigned long");
00106 
00107     BOOST_STATIC_ASSERT(( sizeof(float) == sizeof(int32_t) ));
00108     BOOST_STATIC_ASSERT(( sizeof(double) == sizeof(int64_t) ));
00109     r.add(new Numeric("/float",  4, Numeric::Float));
00110     r.add(new Numeric("/double", 8, Numeric::Float));
00111 
00112     // Finally, add definition for boolean types
00113     r.add(new Numeric("/bool", sizeof(bool), Numeric::UInt));
00114 }
00115 
00116 
00117 void Typelib::CXX::addStandardTypes(Typelib::Registry& registry)
00118 {
00119     if (!registry.has("/bool"))
00120         ::addStandardTypes(registry);
00121     if (!registry.has("/std/string"))
00122         registry.add(new String(registry));
00123 }
00124 


typelib
Author(s): Sylvain Joyeux/sylvain.joyeux@m4x.org
autogenerated on Sat Jun 8 2019 18:49:22