blob: 3af9a1d8e874ba6f922ee6b09569bdcd8fd87e97 [file] [log] [blame]
David Wagnerb76c9d62014-02-05 18:30:24 +01001/*
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.
Patrick Benavoli68a91282011-08-31 11:23:23 +020029 */
30#include "ParameterBlackboard.h"
31#include <string.h>
32#include <assert.h>
33
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020034CParameterBlackboard::CParameterBlackboard() : _pucData(NULL), _uiSize(0)
Patrick Benavoli68a91282011-08-31 11:23:23 +020035{
36}
37
38CParameterBlackboard::~CParameterBlackboard()
39{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020040 delete [] _pucData;
Patrick Benavoli68a91282011-08-31 11:23:23 +020041}
42
43// Size
44void CParameterBlackboard::setSize(uint32_t uiSize)
45{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020046 if (_pucData) {
Patrick Benavoli68a91282011-08-31 11:23:23 +020047
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020048 delete [] _pucData;
Patrick Benavoli68a91282011-08-31 11:23:23 +020049 }
50
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020051 _pucData = new uint8_t[uiSize];
Patrick Benavoli68a91282011-08-31 11:23:23 +020052
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020053 memset(_pucData, 0, uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +020054
55 _uiSize = uiSize;
56}
57
58uint32_t CParameterBlackboard::getSize() const
59{
60 return _uiSize;
61}
62
63// Single parameter access
Patrick Benavoli1352ae52011-10-21 16:48:04 +020064void CParameterBlackboard::writeInteger(const void* pvSrcData, uint32_t uiSize, uint32_t uiOffset, bool bBigEndian)
Patrick Benavoli68a91282011-08-31 11:23:23 +020065{
66 assert(uiSize + uiOffset <= _uiSize);
67
68 if (!bBigEndian) {
69
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020070 memcpy(_pucData + uiOffset, pvSrcData, uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +020071 } else {
72
73 uint32_t uiIndex;
74 const uint8_t* puiSrcData = (const uint8_t*)pvSrcData;
75
76 for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
77
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020078 _pucData[uiIndex + uiOffset] = puiSrcData[uiSize - uiIndex - 1];
Patrick Benavoli68a91282011-08-31 11:23:23 +020079 }
80 }
81}
82
Patrick Benavoli1352ae52011-10-21 16:48:04 +020083void CParameterBlackboard::readInteger(void* pvDstData, uint32_t uiSize, uint32_t uiOffset, bool bBigEndian) const
Patrick Benavoli68a91282011-08-31 11:23:23 +020084{
85 assert(uiSize + uiOffset <= _uiSize);
86
87 if (!bBigEndian) {
88
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020089 memcpy(pvDstData, _pucData + uiOffset, uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +020090 } else {
91
92 uint32_t uiIndex;
93 uint8_t* puiDstData = (uint8_t*)pvDstData;
94
95 for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
96
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020097 puiDstData[uiSize - uiIndex - 1] = _pucData[uiIndex + uiOffset];
Patrick Benavoli68a91282011-08-31 11:23:23 +020098 }
99 }
100}
101
Patrick Benavoli1352ae52011-10-21 16:48:04 +0200102void CParameterBlackboard::writeString(const char* pcSrcData, uint32_t uiOffset)
103{
104 strcpy((char*)_pucData + uiOffset, pcSrcData);
105}
106
107void CParameterBlackboard::readString(char* pcDstData, uint32_t uiOffset) const
108{
109 strcpy(pcDstData, (const char*)_pucData + uiOffset);
110}
111
Patrick Benavoli68a91282011-08-31 11:23:23 +0200112// Access from/to subsystems
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200113uint8_t* CParameterBlackboard::getLocation(uint32_t uiOffset)
Patrick Benavoli68a91282011-08-31 11:23:23 +0200114{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200115 return _pucData + uiOffset;
Patrick Benavoli68a91282011-08-31 11:23:23 +0200116}
117
118// Configuration handling
119void CParameterBlackboard::restoreFrom(const CParameterBlackboard* pFromBlackboard, uint32_t uiOffset)
120{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200121 memcpy(_pucData + uiOffset, pFromBlackboard->_pucData, pFromBlackboard->_uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200122}
123
124void CParameterBlackboard::saveTo(CParameterBlackboard* pToBlackboard, uint32_t uiOffset) const
125{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200126 memcpy(pToBlackboard->_pucData, _pucData + uiOffset, pToBlackboard->_uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200127}
128
129// Serialization
130void CParameterBlackboard::serialize(CBinaryStream& binaryStream)
131{
132 if (binaryStream.isOut()) {
133
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200134 binaryStream.write(_pucData, _uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200135 } else {
136
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200137 binaryStream.read(_pucData, _uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200138 }
139}