num_range_getter.cc

Go to the documentation of this file.
00001 /*!
00002         \file
00003         \brief Ranges of numeric types.
00004         \author jaz
00005 */
00006 
00007 #include <lestes/md/types/tm_data_type.g.hh>
00008 #include <lestes/md/types/num_range.g.hh>
00009 #include <lestes/md/types/num_range_getter.g.hh>
00010 
00011 package(lestes);
00012 package(md);
00013 package(types);
00014 
00015 using namespace ::lestes::md::types;
00016 
00017 ptr<num_range_getter> num_range_getter::instance() {
00018         if ( !singleton_instance_get() ) {
00019                 singleton_instance_set(num_range_getter::create());
00020         }
00021         return singleton_instance_get();
00022 }
00023 
00024 
00025 /*!
00026         \brief Returns range for given type.
00027         
00028         \param type The type.
00029         \return Range of the type.
00030 */
00031 ptr<num_range> num_range_getter::get_range(ptr<tm_data_type_base> type) {
00032         ptr<num_range> range;
00033         
00034         switch ( type->id_get() ) {
00035                 case DT_INT_8P :
00036                         range = num_range::create("255", false, 3, type->bitwidth_get(), NULL, NULL);
00037                 break;
00038                 
00039                 case DT_INT_8U :
00040                         range = num_range::create("255", false, 3, type->bitwidth_get(), NULL, NULL);
00041                 break;
00042                 
00043                 case DT_INT_8S :
00044                         range = num_range::create("127", true, 3, type->bitwidth_get(), NULL, NULL);
00045                 break;
00046                 
00047                 case DT_INT_16U :
00048                         range = num_range::create("65535", false, 5, type->bitwidth_get(), NULL, NULL);
00049                 break;
00050                 
00051                 case DT_INT_16S :
00052                         range = num_range::create("32767", true, 5, type->bitwidth_get(), NULL, NULL);
00053                 break;
00054                 
00055                 case DT_INT_32U :
00056                         range = num_range::create("4294967295", false, 10, type->bitwidth_get(), NULL, NULL);
00057                 break;
00058                 
00059                 case DT_INT_32S :
00060                         range = num_range::create("2147483647", true, 10, type->bitwidth_get(), NULL, NULL);
00061                 break;
00062                 
00063                 default:
00064                         lassert(false);
00065                 break;
00066         }
00067         
00068         return range;
00069 }
00070 
00071 end_package(types);
00072 end_package(md);
00073 end_package(lestes);
00074 

Generated on Mon Feb 12 18:22:42 2007 for lestes by doxygen 1.5.1-20070107