w_input.cpp

00001 /*<std-header orig-src='shore'>
00002 
00003  $Id: w_input.cpp,v 1.16 2011/09/08 18:10:55 nhall Exp $
00004 
00005 SHORE -- Scalable Heterogeneous Object REpository
00006 
00007 Copyright (c) 1994-99 Computer Sciences Department, University of
00008                       Wisconsin -- Madison
00009 All Rights Reserved.
00010 
00011 Permission to use, copy, modify and distribute this software and its
00012 documentation is hereby granted, provided that both the copyright
00013 notice and this permission notice appear in all copies of the
00014 software, derivative works or modified versions, and any portions
00015 thereof, and that both notices appear in supporting documentation.
00016 
00017 THE AUTHORS AND THE COMPUTER SCIENCES DEPARTMENT OF THE UNIVERSITY
00018 OF WISCONSIN - MADISON ALLOW FREE USE OF THIS SOFTWARE IN ITS
00019 "AS IS" CONDITION, AND THEY DISCLAIM ANY LIABILITY OF ANY KIND
00020 FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
00021 
00022 This software was developed with support by the Advanced Research
00023 Project Agency, ARPA order number 018 (formerly 8230), monitored by
00024 the U.S. Army Research Laboratory under contract DAAB07-91-C-Q518.
00025 Further funding for this work was provided by DARPA through
00026 Rome Research Laboratory Contract No. F30602-97-2-0247.
00027 
00028 */
00029 
00030 #include "w_defines.h"
00031 
00032 /*  -- do not edit anything above this line --   </std-header>*/
00033 
00034 #include <w_base.h>
00035 #include <cctype>
00036 #include <iostream>
00037 
00038 /**\cond skip */
00039 enum states {   start, sgned, leadz,  
00040         new_hex, new_oct, new_dec,
00041         is_hex, is_oct, is_dec, 
00042         end, error, no_hex, no_state };
00043 
00044     // NB: these first 16 MUST have the values given
00045 enum charclass { zero=0, one=1, two=2, three=3, four=4, 
00046         five=5, six=6, seven=7, eight=8, 
00047         nine=9, ten=10, eleven=11,
00048         twelve=12, thirteen=13, fourteen=14, fifteen=15,
00049         exx, JJJJ, eofile, white, sign, no_charclass
00050         };
00051 
00052 static int equiv[127] = {
00053     /* 10 per line */
00054     /* 0 */
00055     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ,     JJJJ, JJJJ, JJJJ, JJJJ, white, 
00056     /* 10 */
00057     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ,     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ, 
00058     /* 20 */
00059     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ,     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ, 
00060     /* 30 */
00061     JJJJ, JJJJ, white, JJJJ, JJJJ,    JJJJ, JJJJ, JJJJ, JJJJ, JJJJ, 
00062     /* 40 */
00063     JJJJ, JJJJ, JJJJ, sign, JJJJ,     sign, JJJJ, JJJJ, zero, one, 
00064     /* 50 */
00065     two , three, four, five, six,     seven, eight, nine, JJJJ, JJJJ,
00066     /* 60 */
00067     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ,     ten, eleven, twelve, thirteen, fourteen, 
00068     /* 70 */
00069     fifteen, JJJJ, JJJJ, JJJJ, JJJJ,  JJJJ, JJJJ, JJJJ, JJJJ, JJJJ, 
00070     /* 80 */
00071     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ,     JJJJ, JJJJ, JJJJ, exx, JJJJ, 
00072     /* 90 */
00073     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ,     JJJJ, JJJJ, ten, eleven, twelve, 
00074     /* 100 */
00075     thirteen, fourteen, fifteen, JJJJ, JJJJ,   JJJJ, JJJJ, JJJJ, JJJJ, JJJJ, 
00076     /* 110 */
00077     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ,     JJJJ, JJJJ, JJJJ, JJJJ, JJJJ, 
00078     /* 120 */
00079     exx, JJJJ, JJJJ, JJJJ, JJJJ,      JJJJ, JJJJ
00080 };
00081 
00082 typedef enum states XTABLE[no_charclass][no_state];
00083 static enum states table_unknown[no_charclass][no_state] =
00084 {
00085     /*  start, sgned,  leadz,  new_hex,new_oct,new_dec,is_hex, is_oct, is_dec, end */
00086 /* zero */
00087     {  leadz, leadz,   leadz,  is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error },
00088 /* c1_7 */
00089     {  new_dec,new_dec,new_oct,is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error},
00090     {  new_dec,new_dec,new_oct,is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error},
00091     {  new_dec,new_dec,new_oct,is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error},
00092     {  new_dec,new_dec,new_oct,is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error},
00093     {  new_dec,new_dec,new_oct,is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error},
00094     {  new_dec,new_dec,new_oct,is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error},
00095     {  new_dec,new_dec,new_oct,is_hex, is_oct, is_dec, is_hex, is_oct, is_dec, error},
00096 /* c8_9 */
00097     {  new_dec,new_dec,new_dec,is_hex, end,    is_dec, is_hex, is_oct, is_dec,error },
00098     {  new_dec,new_dec,new_dec,is_hex, end,    is_dec, is_hex, is_oct, is_dec,error },
00099 /* ca-f */
00100     {  error,error,new_hex,is_hex, end,    end,    is_hex, end,    end,   error },
00101     {  error,error,new_hex,is_hex, end,    end,    is_hex, end,    end,   error },
00102     {  error,error,new_hex,is_hex, end,    end,    is_hex, end,    end,   error },
00103     {  error,error,new_hex,is_hex, end,    end,    is_hex, end,    end,   error },
00104     {  error,error,new_hex,is_hex, end,    end,    is_hex, end,    end,   error },
00105     {  error,error,new_hex,is_hex, end,    end,    is_hex, end,    end,   error },
00106 /* exx */
00107     {  error,  error,  new_hex,end,    end,    end,    end,    end,    end,   error },
00108 /* JJJJ */
00109     {  error,  error,  end,    no_hex, end,    end,    end,    end,    end,   error },
00110 /* EOF, eofile */
00111     {  error,  error,  end,    no_hex, end,    end,    end,    end,    end,   error },
00112 /* white */
00113     {  start,  error,  end,    end,    end,    end,    end,    end,    end,   error },
00114 /* sign */
00115     {  sgned,  error,  end,    no_hex, end,    end,    end,    end,    end,   error }, 
00116 };
00117 
00118 static enum states table_base16[no_charclass][no_state] =
00119 {
00120     /*  start, sgned,  leadz, new_hex,new_oct,new_dec,is_hex, is_oct, is_dec, end */
00121 /* zero */
00122     {  leadz, leadz,   leadz,  is_hex, error, error, is_hex, error, error, error },
00123 /* c1_7 */
00124     {  is_hex,is_hex, is_hex, is_hex, error, error, is_hex, error, error,  error },
00125     {  is_hex,is_hex, is_hex, is_hex, error, error, is_hex, error, error,  error },
00126     {  is_hex,is_hex, is_hex, is_hex, error, error, is_hex, error, error,  error },
00127     {  is_hex,is_hex, is_hex, is_hex, error, error, is_hex, error, error,  error },
00128     {  is_hex,is_hex, is_hex, is_hex, error, error, is_hex, error, error,  error },
00129     {  is_hex,is_hex, is_hex, is_hex, error, error, is_hex, error, error,  error },
00130     {  is_hex,is_hex, is_hex, is_hex, error, error, is_hex, error, error,  error },
00131 /* c8_9 */
00132     {  is_hex, is_hex, is_hex, is_hex, error,error, is_hex, error, error,  error },
00133     {  is_hex, is_hex, is_hex, is_hex, error,error, is_hex, error, error,  error },
00134 /* ca-f */
00135     {  is_hex, is_hex, is_hex, is_hex, error,error, is_hex, error, error, error },
00136     {  is_hex, is_hex, is_hex, is_hex, error,error, is_hex, error, error, error },
00137     {  is_hex, is_hex, is_hex, is_hex, error,error, is_hex, error, error, error },
00138     {  is_hex, is_hex, is_hex, is_hex, error,error, is_hex, error, error, error },
00139     {  is_hex,    is_hex, is_hex, is_hex, error,error,is_hex, error, error, error },
00140     {  is_hex,    is_hex, is_hex, is_hex, error,error,is_hex, error, error, error },
00141 /* exx */
00142     {  error,  error, new_hex, end,    error,error,  end,   error, error, error },
00143 /* JJJJ */
00144     {  error,  error,  end,    no_hex, error,error,  end,   error, error, error }, 
00145 /* EOF, eofile */
00146     {  error,  error,  end,    no_hex, error,error,  end,   error, error, error }, 
00147 /* white */
00148     {  start,  error,  end,    no_hex, error,error,  end,   error, error, error }, 
00149 /* sign */
00150     {  sgned,  error,  end,    no_hex, error,error,  end,   error, error, error }, 
00151 };
00152 
00153 static enum states table_base8[no_charclass][no_state] =
00154 {
00155     /* start, sgned,  leadz,  new_hex, new_oct,new_dec, is_hex, is_oct,is_dec, end */
00156 /* zero */
00157     {  leadz, leadz,  leadz,  error, error, error, error, is_oct, error, error },
00158 /* c1_7 */
00159     {  is_oct,is_oct, is_oct, error, error, error, error, is_oct, error,error },
00160     {  is_oct,is_oct, is_oct, error, error, error, error, is_oct, error,error },
00161     {  is_oct,is_oct, is_oct, error, error, error, error, is_oct, error,error },
00162     {  is_oct,is_oct, is_oct, error, error, error, error, is_oct, error,error },
00163     {  is_oct,is_oct, is_oct, error, error, error, error, is_oct, error,error },
00164     {  is_oct,is_oct, is_oct, error, error, error, error, is_oct, error,error },
00165     {  is_oct,is_oct, is_oct, error, error, error, error, is_oct, error,error },
00166 /* c8_9 */
00167     {  end,   error,  end,    error, error, error, error, end,   error,    error },
00168     {  end,   error,  end,    error, error, error, error, end,   error,    error },
00169 /* ca-f */
00170     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00171     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00172     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00173     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00174     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00175     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00176 /* exx */
00177     {  error, error,  new_hex,end,   error,error,  end,   error, error, error },
00178 /* JJJJ */
00179     {  error, error, end,     error, error,error,  error, end,      error, error }, 
00180 /* EOF, eofile */
00181     {  error, error, end,     error, error,error,  error, end,      error, error }, 
00182 /* white */
00183     {  start, error, end,     error, error,error,  error, end,      error, error }, 
00184 /* sign */
00185     {  sgned, error, end,     error, error,error,  error, end,      error, error }, 
00186 };
00187 
00188 static enum states table_base10[no_charclass][no_state] =
00189 {
00190     /* start, sgned,  leadz,  new_hex,
00191                      new_oct,new_dec,
00192                           is_hex, is_oct,is_dec, end */
00193 /* zero */
00194     {  leadz, leadz,  leadz,  error, error, error, error, is_oct, is_dec, error },
00195 /* c1_7 */
00196     {  is_dec,is_dec, is_dec, error, error, error, error, error, is_dec,error },
00197     {  is_dec,is_dec, is_dec, error, error, error, error, error, is_dec,error },
00198     {  is_dec,is_dec, is_dec, error, error, error, error, error, is_dec,error },
00199     {  is_dec,is_dec, is_dec, error, error, error, error, error, is_dec,error },
00200     {  is_dec,is_dec, is_dec, error, error, error, error, error, is_dec,error },
00201     {  is_dec,is_dec, is_dec, error, error, error, error, error, is_dec,error },
00202     {  is_dec,is_dec, is_dec, error, error, error, error, error, is_dec,error },
00203 /* c8_9 */
00204     {  is_dec,is_dec, end,    error, error, error, error, end,   is_dec,error },
00205     {  is_dec,is_dec, end,    error, error, error, error, end,   is_dec,error },
00206 /* ca-f */
00207     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00208     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00209     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00210     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00211     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00212     {  end,   error,  end,    error, error,error,  error, end,   error, error },
00213 /* exx */
00214     {  error, error, new_hex, end,   error,error,  end,   error, error, error },
00215 /* JJJJ */
00216     {  error, error, end,     error, error,error,  error, error, end,   error }, 
00217 /* EOF, eofile */
00218     {  error, error, end,     error, error,error,  error, error, end,   error }, 
00219 /* white */
00220     {  start, error, end,     error, error,error,  error, error, end,   error }, 
00221 /* sign */
00222     {  sgned, error, end,     error, error,error,  error, error, end,   error }, 
00223 };
00224 
00225 
00226 /* Seek breaks on non-seekable streams, but putback will always?
00227    work.  However NT will actually try to putback characters into
00228    a read-only string, which can cause problems. */
00229 #ifdef __GNUG__
00230 #define    IOS_BACK(stream,ch)    (void) stream.unget()
00231 #else
00232 #define    IOS_BACK(stream,ch)    (void) stream.seekg(-1, ios::cur)
00233 #endif
00234 
00235 #if defined( __GNUG__) 
00236 #define    IOS_FAIL(stream)    stream.setstate(ios::failbit)
00237 #else
00238 #define    IOS_FAIL(stream)    stream.setstate(ios_base::failbit)
00239 #endif
00240 
00241 /* XXX shouldn't replicate this from somewhere else */
00242 typedef ios::fmtflags  ios_fmtflags;
00243 
00244 /*
00245  *  expect string [+-][0[x]][0-9a-fA-F]+
00246  */
00247 #    define LONGLONGCONSTANT(i) i##LL
00248 #    define ULONGLONGCONSTANT(i) i##ULL
00249 
00250 /* These are masks */
00251 
00252 w_base_t::uint8_t    thresh_hex_unsigned =  
00253     ULONGLONGCONSTANT(0xf000000000000000);
00254 w_base_t::uint8_t    thresh_hex_signed =  
00255      LONGLONGCONSTANT(0xf800000000000000);
00256 w_base_t::uint8_t    thresh_dec_unsigned =  
00257     ULONGLONGCONSTANT(1844674407370955161) ;
00258 w_base_t::uint8_t    thresh_dec_signed =  
00259      LONGLONGCONSTANT(922337203685477580);
00260 w_base_t::uint8_t    thresh2_dec_unsigned =  
00261     ULONGLONGCONSTANT(18446744073709551610) ;
00262 w_base_t::uint8_t    thresh2_dec_signed =  
00263      LONGLONGCONSTANT(9223372036854775800);
00264 w_base_t::uint8_t    thresh_oct_unsigned =  
00265     ULONGLONGCONSTANT(0xe000000000000000);
00266 w_base_t::uint8_t    thresh_oct_signed =  
00267      LONGLONGCONSTANT(0xf000000000000000);
00268 
00269 /*
00270  * This is *way* slower than strtoull and strtoll, as it is written.
00271  */
00272 
00273 istream &
00274 w_base_t::_scan_uint8(
00275     istream& i, 
00276     w_base_t::uint8_t &u8, 
00277     bool chew_white, // true if coming from istream operator
00278     bool is_signed, // if true, we have to return an error for overflow
00279     bool&    range_err // set to true if range error occurred  
00280 ) 
00281 {
00282     w_base_t::uint8_t    thresh=0, 
00283     thresh2=0 /* thresh2, thresh3, thresh4 for decimal only */, 
00284         thresh3=0, thresh4=0;
00285     w_base_t::uint8_t     value = 0;
00286 
00287     bool     negate = false;
00288     int        e=0;
00289     int        base=0;
00290     bool     skip_white = true;
00291     states     s = start;
00292     streampos   tell_start = i.tellg();
00293     int        chewamt = chew_white? 1 : 0; 
00294     XTABLE     *table=0;
00295 
00296     range_err = false;
00297     {
00298     // Get the base from the stream
00299     ios_fmtflags old = i.flags();
00300     skip_white = ((old & ios::skipws) != 0);
00301     switch(old & ios::basefield) {
00302         case int(0):
00303         base = 0;
00304         table = &table_unknown;
00305         break;
00306 
00307         case ios::hex:
00308         base = 4; // shift by this
00309         table = &table_base16;
00310         thresh = is_signed?  thresh_hex_signed : thresh_hex_unsigned;
00311         break;
00312 
00313         case ios::oct:
00314         base = 3; // shift by this
00315         table = &table_base8;
00316         thresh = is_signed?  thresh_oct_signed : thresh_oct_unsigned;
00317         break;
00318 
00319         case ios::dec:
00320         base = 10; // multiply by this
00321         table = &table_base10;
00322         thresh = is_signed?  thresh_dec_signed : thresh_dec_unsigned;
00323         thresh2 = is_signed?  thresh2_dec_signed : thresh2_dec_unsigned;
00324         thresh3 = is_signed?  (negate? 8: 7) : 5;
00325         thresh4 = is_signed? thresh_hex_signed : thresh_hex_unsigned;
00326         break;
00327         default:
00328         W_FATAL(fcINTERNAL);
00329         break;
00330     }
00331     }
00332 
00333     int ich;
00334     char ch;
00335     while (s < end) {
00336     ch = 0;
00337     // if (i) {
00338         ich = i.get();
00339         if (ich != EOF) {
00340            ch = char(ich);
00341            /* By using isspace() we get locale-dependent behavior */
00342            if(isspace(ch)) {
00343            e = white;
00344            } else {
00345            e = equiv[unsigned(ch)];
00346         }
00347         }
00348         else
00349            e = eofile;
00350     // } else {
00351         // e = eofile;
00352     // }
00353 
00354     /* transition table */
00355     s = (*table)[e][s];
00356 
00357     switch(s) {
00358         case start:
00359         /* Have seen leading white space */
00360         if(!skip_white) {
00361             s = end;
00362         }
00363         tell_start += chewamt; 
00364         break;
00365 
00366         case sgned:
00367         if(ch == '-') {
00368             negate = true;
00369             if(thresh3!=0) thresh3 = is_signed?  (negate? 8: 7) : 5;
00370         }
00371         break;
00372 
00373         case leadz:
00374         /* Have seen 1 or more leading zeroes 
00375          * if base is 0 (unstated), 0 or 0x will
00376          * determine the base.
00377          */
00378         break;
00379 
00380         case new_hex:
00381         /* State means we've seen [0][a-f] or 0[xX] */
00382         if(base && (base != 4)) {
00383             /* consider this the end of the string */
00384             IOS_BACK(i, ch);
00385             s = end;
00386             break;
00387         }
00388         w_assert9(base == 0 || base == 4);
00389         if((base == 0) && (e != exx)) {
00390             /* consider this the end of the string */
00391             IOS_BACK(i, ch);
00392             s = end;
00393             break;
00394         }
00395             /* at this point, in the 0[xX] case, 
00396          * we WILL make a conversion,
00397          * if nothing else, it will be to 0. In event
00398          * of error (the char after the [Xx] is not
00399          * a legit hex digit) we have to be able to 
00400          * seek back to where the [Xx] was, rather than
00401          * leave the endptr at the offending digit.
00402          */
00403         base = 4; // 2 ** base, i.e., shift amt
00404         if(e != exx) {
00405            IOS_BACK(i, ch);
00406         } else {
00407             /* XXX used to be tellg()-1, but no streampos
00408                arith allowed that way. */
00409             tell_start = i.tellg();
00410             tell_start -= 1;    // for possible error-handling
00411         }
00412         thresh = is_signed?  thresh_hex_signed : thresh_hex_unsigned;
00413         break;
00414 
00415         case new_oct:
00416         /* State means we've seen 0 followed by [1-7] */
00417         if(base==0 || base == 3) {
00418             /* treat as oct # */
00419             base = 3; // shift amt
00420             thresh = is_signed?  thresh_oct_signed : thresh_oct_unsigned;
00421         } else if(base == 10) {
00422             s = new_dec;
00423             thresh = is_signed? thresh_dec_signed : thresh_dec_unsigned;
00424             thresh2= is_signed?thresh2_dec_signed : thresh2_dec_unsigned;
00425             thresh3 = is_signed?  (negate? 8: 7) : 5;
00426             thresh4 = is_signed? thresh_hex_signed : thresh_hex_unsigned;
00427         } else {
00428             w_assert9(base == 4);
00429             s = new_hex;
00430             thresh = is_signed?  thresh_hex_signed : thresh_hex_unsigned;
00431         }
00432         IOS_BACK(i, ch);
00433         break;
00434 
00435         case new_dec:
00436         /* State means we've seen [1-9] in start/sgned state 
00437         *  or 0 followed by [8-9]
00438         */
00439         if(e == eight || e == nine) {
00440             if(base && base != 10) {
00441             /* consider this the end of the string */
00442             IOS_BACK(i, ch);
00443             s = end;
00444             break;
00445             }
00446         }
00447         if(base==0 || base == 10) {
00448             /* treat as dec # */
00449             base = 10; // multiply amt
00450             thresh = is_signed?  thresh_dec_signed : thresh_dec_unsigned;
00451             thresh2= is_signed?thresh2_dec_signed : thresh2_dec_unsigned;
00452             thresh3 = is_signed?  (negate? 8: 7) : 5;
00453             thresh4 = is_signed? thresh_hex_signed : thresh_hex_unsigned;
00454         } else if(base == 3) {
00455             s = new_oct;
00456             thresh = is_signed?  thresh_oct_signed : thresh_oct_unsigned;
00457         } else {
00458             w_assert9(base == 4);
00459             thresh = is_signed?  thresh_hex_signed : thresh_hex_unsigned;
00460             s = new_hex;
00461         }
00462         IOS_BACK(i, ch);
00463         break;
00464 
00465         case is_hex:
00466         w_assert9(base == 4);
00467         /* drop down */
00468 
00469         case is_oct:
00470         if(value & thresh) {
00471            range_err = true;
00472            // keep parsing
00473            // s = end;
00474            break;
00475         }
00476         /* shift */
00477         value <<= base;
00478         value += int(e);
00479         break;
00480 
00481         case is_dec:
00482         w_assert9(base == 10);
00483         if(value & thresh4) {
00484             if(value > thresh2) {
00485                /* will overflow on multiply */
00486                range_err = true;
00487                // keep parsing
00488                // s = end;
00489                break;
00490             } 
00491             value *= base;
00492             if((value - thresh2) + unsigned(e) > thresh3) {
00493             /* overflow adding in e */
00494                range_err = true;
00495                // keep parsing
00496                // s = end;
00497                break;
00498             }
00499         } else {
00500             /* multiply */
00501             value *= base;
00502         }
00503         value += unsigned(e);
00504         break;
00505 
00506         case error:
00507         IOS_FAIL(i);
00508         i.seekg(tell_start);
00509         s = end;
00510         break;
00511 
00512         case no_hex:
00513         i.seekg(tell_start);
00514         s = end;
00515         break;
00516 
00517         case end:
00518             IOS_BACK(i, ch);
00519         break;
00520 
00521         case no_state:
00522         W_FATAL(fcINTERNAL);
00523         break;
00524     }
00525     }
00526     if(range_err) {
00527        // don't seek to start
00528         u8 = negate ? 
00529        ( is_signed? w_base_t::int8_min : w_base_t::uint8_max) :
00530        ( is_signed? w_base_t::int8_max : w_base_t::uint8_max);
00531        IOS_FAIL(i);
00532     } else { 
00533     u8 = negate ?  (0 - value) : value;
00534     }
00535 
00536     return i;
00537 }
00538 
00539 /**\endcond skip */

Generated on Mon Jan 2 15:13:57 2012 for Shore Storage Manager by  doxygen 1.4.7