Skip to content

Commit

Permalink
Add forceBE option to endian_utils.H
Browse files Browse the repository at this point in the history
There are some helper function to force LE and I found a case
where I wanted to force BE so I added here also.

Change-Id: If5374c9a8ad12e391f78e3ea323776fdd8567b4f
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/69269
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: ANDRE A. MARIN <aamarin@us.ibm.com>
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/80972
Reviewed-by: RAJA DAS <rajadas2@in.ibm.com>
  • Loading branch information
crgeddes authored and RAJA DAS committed Jul 25, 2019
1 parent 518a1b2 commit 4da7077
Showing 1 changed file with 46 additions and 1 deletion.
47 changes: 46 additions & 1 deletion src/import/generic/memory/lib/utils/endian_utils.H
Expand Up @@ -58,7 +58,7 @@ void forceLE(const T& i_input, std::vector<uint8_t>& io_data)

for(size_t i = 0; i < sizeof(i_input); i++)
{
// Grab the lowe rorder byte and add it to the back of the vector
// Grab the lowest order byte and add it to the back of the vector
const uint8_t l_byte = l_temp & 0xFF;
io_data.push_back(l_byte);

Expand All @@ -83,6 +83,51 @@ inline void forceLEArray(const T* i_input, const uint64_t i_size, std::vector<ui
}
}

///
/// @brief Forces native data into BE order
/// @tparam T the data type to process
/// @param[in] i_input inputted data to process
/// @param[in,out] io_data vector to append data to
///
template < typename T >
void forceBE(const T& i_input, std::vector<uint8_t>& io_data)
{
// Temporary variable to process - we'll be doing bit shifts below
T l_temp = i_input;

std::vector<uint8_t> l_tempBuffer;

// This loop will put i_input into l_tempBuffer in BE order
for(size_t i = 0; i < sizeof(i_input); i++)
{
// Grab the lowest order byte and add it to the front of the vector
const uint8_t l_byte = l_temp & 0xFF;
l_tempBuffer.insert(l_tempBuffer.begin(), l_byte);

// Shift higher byte value into lowest no matter existing endianness
l_temp >>= BITS_PER_BYTE;
}

// Put the new BE formatted data at the end of the input buffer
io_data.insert(io_data.end(), l_tempBuffer.begin(), l_tempBuffer.end());
}

///
/// @brief Forces native data into BE order for an array
/// @tparam T the data type to process
/// @param[in] i_input inputted data to process
/// @param[in] i_size size of the array
/// @param[in,out] io_data vector to append data to
///
template < typename T >
inline void forceBEArray(const T* i_input, const uint64_t i_size, std::vector<uint8_t>& io_data)
{
for(size_t i = 0; i < i_size; i++)
{
forceBE(i_input[i], io_data);
}
}

///
/// @brief Converts LE data into native order
/// @tparam T the data type to output to
Expand Down

0 comments on commit 4da7077

Please sign in to comment.