1 /*
2 * Copyright (c) 2011-2014, Intel Corporation
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this
9 * list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation and/or
13 * other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors
16 * may be used to endorse or promote products derived from this software without
17 * specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 #include "ParameterBlackboard.h"
31 #include <string.h>
32 #include <assert.h>
33
CParameterBlackboard()34 CParameterBlackboard::CParameterBlackboard() : _pucData(NULL), _uiSize(0)
35 {
36 }
37
~CParameterBlackboard()38 CParameterBlackboard::~CParameterBlackboard()
39 {
40 delete [] _pucData;
41 }
42
43 // Size
setSize(uint32_t uiSize)44 void CParameterBlackboard::setSize(uint32_t uiSize)
45 {
46 if (_pucData) {
47
48 delete [] _pucData;
49 }
50
51 _pucData = new uint8_t[uiSize];
52
53 memset(_pucData, 0, uiSize);
54
55 _uiSize = uiSize;
56 }
57
getSize() const58 uint32_t CParameterBlackboard::getSize() const
59 {
60 return _uiSize;
61 }
62
63 // Single parameter access
writeInteger(const void * pvSrcData,uint32_t uiSize,uint32_t uiOffset,bool bBigEndian)64 void CParameterBlackboard::writeInteger(const void* pvSrcData, uint32_t uiSize, uint32_t uiOffset, bool bBigEndian)
65 {
66 assert(uiSize + uiOffset <= _uiSize);
67
68 if (!bBigEndian) {
69
70 memcpy(_pucData + uiOffset, pvSrcData, uiSize);
71 } else {
72
73 uint32_t uiIndex;
74 const uint8_t* puiSrcData = (const uint8_t*)pvSrcData;
75
76 for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
77
78 _pucData[uiIndex + uiOffset] = puiSrcData[uiSize - uiIndex - 1];
79 }
80 }
81 }
82
readInteger(void * pvDstData,uint32_t uiSize,uint32_t uiOffset,bool bBigEndian) const83 void CParameterBlackboard::readInteger(void* pvDstData, uint32_t uiSize, uint32_t uiOffset, bool bBigEndian) const
84 {
85 assert(uiSize + uiOffset <= _uiSize);
86
87 if (!bBigEndian) {
88
89 memcpy(pvDstData, _pucData + uiOffset, uiSize);
90 } else {
91
92 uint32_t uiIndex;
93 uint8_t* puiDstData = (uint8_t*)pvDstData;
94
95 for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
96
97 puiDstData[uiSize - uiIndex - 1] = _pucData[uiIndex + uiOffset];
98 }
99 }
100 }
101
writeString(const std::string & input,uint32_t uiOffset)102 void CParameterBlackboard::writeString(const std::string &input, uint32_t uiOffset)
103 {
104 strcpy((char*)_pucData + uiOffset, input.c_str());
105 }
106
readString(std::string & output,uint32_t uiOffset) const107 void CParameterBlackboard::readString(std::string &output, uint32_t uiOffset) const
108 {
109 output = std::string((const char*)_pucData + uiOffset);
110 }
111
112 // Access from/to subsystems
getLocation(uint32_t uiOffset)113 uint8_t* CParameterBlackboard::getLocation(uint32_t uiOffset)
114 {
115 return _pucData + uiOffset;
116 }
117
118 // Configuration handling
restoreFrom(const CParameterBlackboard * pFromBlackboard,uint32_t uiOffset)119 void CParameterBlackboard::restoreFrom(const CParameterBlackboard* pFromBlackboard, uint32_t uiOffset)
120 {
121 memcpy(_pucData + uiOffset, pFromBlackboard->_pucData, pFromBlackboard->_uiSize);
122 }
123
saveTo(CParameterBlackboard * pToBlackboard,uint32_t uiOffset) const124 void CParameterBlackboard::saveTo(CParameterBlackboard* pToBlackboard, uint32_t uiOffset) const
125 {
126 memcpy(pToBlackboard->_pucData, _pucData + uiOffset, pToBlackboard->_uiSize);
127 }
128
129 // Serialization
serialize(CBinaryStream & binaryStream)130 void CParameterBlackboard::serialize(CBinaryStream& binaryStream)
131 {
132 if (binaryStream.isOut()) {
133
134 binaryStream.write(_pucData, _uiSize);
135 } else {
136
137 binaryStream.read(_pucData, _uiSize);
138 }
139 }
140