BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
ComPackSignedExpFloat.cxx
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2// File and Version Information:
3// $Id: ComPackSignedExpFloat.cxx,v 1.2 2009/12/23 02:59:56 zhangy Exp $
4//
5// Description:
6// class ComPackExpFloat
7//
8// Environment:
9// Software developed for the BaBar Detector at the SLAC B-Factory.
10//
11// Author List:
12// Dave Brown 10/12/00
13//
14// Copyright Information:
15// Copyright (C) 2000 LBNL
16//
17// History:
18// Migration for BESIII MDC
19//
20//
21//--------------------------------------------------------------------------
22
23// #include "BaBar/BaBar.hh"
24#include "MdcRecoUtil/ComPackSignedExpFloat.h"
25#include <assert.h>
26#include <math.h>
27using std::endl;
28using std::ostream;
29
30ComPackSignedExpFloat::ComPackSignedExpFloat( unsigned nbits, unsigned maxexponent,
31 double maxval, bool invert, bool center )
32 : ComPackBase<double>( -maxval, maxval, nbits )
33 , _packer( nbits - 1, maxexponent, invert ? maxval : 0.0, invert ? 0.0 : maxval, center )
34 , _signbit( 1 << nbits - 1 )
35 , _signmask( ~( 1 << nbits - 1 ) ) {
36 assert( maxval > 0.0 );
37}
38
40
42 d_ULong& packdata ) const {
43 // first, pack the absolute value
44 ComPackBase<double>::StatusCode retval = _packer.pack( fabs( value ), packdata );
45 if ( retval != TAG_BAD )
46 {
47 if ( value > 0 ) packdata &= _signmask;
48 else packdata |= _signbit;
49 }
50 return retval;
51}
52
54 double& value ) const {
55 ComPackBase<double>::StatusCode retval = _packer.unpack( packdata, value );
56 if ( value < 0 ) value = 0;
57 else if ( packdata & _signbit ) value *= -1.0;
58 return retval;
59}
60
61void ComPackSignedExpFloat::print( ostream& os ) const {
62 os << "Signed exponential packer using exponential packer as follows:" << endl;
63 _packer.print( os );
64}
void print(std::ostream &os) const
virtual StatusCode unpack(const d_ULong, double &) const
ComPackSignedExpFloat(unsigned nbits, unsigned maxexponent, double maxval, bool invert=false, bool center=false)
void print(std::ostream &s=std::cout) const
virtual StatusCode pack(const double, d_ULong &) const