xref: /netbsd-src/external/bsd/elftosb/dist/common/Value.cpp (revision 993229b6fea628ff8b1fa09146c80b0cfb2768eb)
1*993229b6Sjkunz /*
2*993229b6Sjkunz  * File:	Value.cpp
3*993229b6Sjkunz  *
4*993229b6Sjkunz  * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
5*993229b6Sjkunz  * See included license file for license details.
6*993229b6Sjkunz  */
7*993229b6Sjkunz 
8*993229b6Sjkunz #include "Value.h"
9*993229b6Sjkunz 
10*993229b6Sjkunz using namespace elftosb;
11*993229b6Sjkunz 
12*993229b6Sjkunz //! Returns a varying size depending on the word size attribute.
13*993229b6Sjkunz //!
getSize() const14*993229b6Sjkunz size_t SizedIntegerValue::getSize() const
15*993229b6Sjkunz {
16*993229b6Sjkunz 	switch (m_size)
17*993229b6Sjkunz 	{
18*993229b6Sjkunz 		case kWordSize:
19*993229b6Sjkunz 			return sizeof(uint32_t);
20*993229b6Sjkunz 		case kHalfWordSize:
21*993229b6Sjkunz 			return sizeof(uint16_t);
22*993229b6Sjkunz 		case kByteSize:
23*993229b6Sjkunz 			return sizeof(uint8_t);
24*993229b6Sjkunz 	}
25*993229b6Sjkunz 	return kWordSize;
26*993229b6Sjkunz }
27*993229b6Sjkunz 
28*993229b6Sjkunz //! The resulting mask can be used to truncate the integer value to be
29*993229b6Sjkunz //! certain it doesn't extend beyond the associated word size.
getWordSizeMask() const30*993229b6Sjkunz uint32_t SizedIntegerValue::getWordSizeMask() const
31*993229b6Sjkunz {
32*993229b6Sjkunz 	switch (m_size)
33*993229b6Sjkunz 	{
34*993229b6Sjkunz 		case kWordSize:
35*993229b6Sjkunz 			return 0xffffffff;
36*993229b6Sjkunz 		case kHalfWordSize:
37*993229b6Sjkunz 			return 0x0000ffff;
38*993229b6Sjkunz 		case kByteSize:
39*993229b6Sjkunz 			return 0x000000ff;
40*993229b6Sjkunz 	}
41*993229b6Sjkunz 	return 0;
42*993229b6Sjkunz }
43*993229b6Sjkunz 
44