CARMA C++
ShortStringifier.h
1 #ifndef CARMA_UTIL_SHORT_STRINGIFIER_H
2 #define CARMA_UTIL_SHORT_STRINGIFIER_H
3 
5 
6 
7 namespace carma {
8 namespace util {
9 
10 
11 class ShortStringifier {
12  public:
13 
14  enum {
15  MAX_CHARS_PER_VALUE = 6
16  };
17 
18  explicit ShortStringifier( );
19 
20  virtual ~ShortStringifier( );
21 
22  ::size_t stringifyShort( short v,
23  char * buffer,
24  ::size_t bufferMaxCount ) const;
25 
26  private:
27  // no copying
28  ShortStringifier( const ShortStringifier & rhs );
29  ShortStringifier & operator=( const ShortStringifier & rhs );
30 
31  static const char * makeTable( );
32 
33  enum {
34  BIAS = 32768
35  };
36 
37  const char * const table_;
38 };
39 
40 
41 } // namespace carma::util
42 } // namespace carma
43 
44 
45 inline ::size_t
46 carma::util::ShortStringifier::stringifyShort(
47  const short v,
48  char * const buffer,
49  const ::size_t bufferMaxCount ) const
50 {
51  if ( (bufferMaxCount < MAX_CHARS_PER_VALUE) || (MAX_CHARS_PER_VALUE < 6) )
52  throw CARMA_ERROR( "Buffer too small" );
53 
54  const unsigned int i =
55  static_cast< unsigned int >( static_cast< int >( v ) + BIAS ) * 8U;
56 
57  buffer[ 0 ] = table_[ i + 0 ];
58  buffer[ 1 ] = table_[ i + 1 ];
59  buffer[ 2 ] = table_[ i + 2 ];
60  buffer[ 3 ] = table_[ i + 3 ];
61  buffer[ 4 ] = table_[ i + 4 ];
62  buffer[ 5 ] = table_[ i + 5 ];
63 
64  return 6;
65 }
66 
67 
68 #endif
Exception class for errors.
#define CARMA_ERROR(y)
Trick to get the file name and line number passed to the exception handler.