26#include <com/sun/star/io/XSeekable.hpp>
35std::pair<sal_Int32, char const *> readInt32(
char const * begin,
char const * end) {
64 bool bSuccess =
false;
67 const char* pStartPtr =
pData + riPos;
68 auto [nKeyLen, pEndPtr] = readInt32(pStartPtr,
end);
69 if( pEndPtr == pStartPtr )
71 riPos += (pEndPtr - pStartPtr) + 1;
73 const char* pKeySrc =
pData + riPos;
84 if( bOptimizeForPerformance )
103 sal_Int32 nRead = xIn->readBytes(
aData, nSize );
105 const char*
pData =
reinterpret_cast<const char*
>(
aData.getConstArray());
108 while( iPos < nRead )
114 OString aOKeyStr = aDBKey.
getData();
117 const char* pStartPtr =
pData + iPos;
118 auto [nValLen, pEndPtr] = readInt32(pStartPtr,
end);
119 if( pEndPtr == pStartPtr )
122 iPos += (pEndPtr - pStartPtr) + 1;
124 if( bOptimizeForPerformance )
126 const char* pValSrc =
pData + iPos;
127 OString aValStr( pValSrc, nValLen );
128 (*m_pStringToDataMap)[aOKeyStr] = aValStr;
133 (*m_pStringToValPosMap)[aOKeyStr] = std::pair<int,int>( iPos, nValLen );
154 bool bSuccess =
false;
171 const std::pair<int,int>& rValPair = it->second;
172 int iValuePos = rValPair.first;
173 int nValueLen = rValPair.second;
179 if( xXSeekable.is() )
181 xXSeekable->seek( iValuePos );
184 sal_Int32 nRead = xIn->readBytes(
aData, nValueLen );
185 if( nRead == nValueLen )
187 const char*
pData =
reinterpret_cast<const char*
>(
aData.getConstArray());
202 const OString& rValueStr = it->second;
203 int nValueLen = rValueStr.getLength();
204 const char*
pData = rValueStr.getStr();
221 bool bSuccess =
false;
245 bool bSuccess =
false;
249 auto const p =
reinterpret_cast<const char*
>(
m_aItData.getConstArray());
static int getHexWeight(sal_uInt32 nChar)
const char * getData() const
void copyToBuffer(const char *pSrcData, int nSize)
std::unique_ptr< char[]> m_pBuffer
std::unique_ptr< StringToValPosMap > m_pStringToValPosMap
std::unique_ptr< StringToDataMap > m_pStringToDataMap
static bool implReadLenAndData(const char *pData, char const *end, int &riPos, HDFData &rValue)
bool getNextKeyAndValue(HDFData &rKey, HDFData &rValue)
bool getValueForKey(const OString &rKey, HDFData &rValue)
void createHashMap(bool bOptimizeForPerformance)
css::uno::Reference< css::ucb::XSimpleFileAccess3 > m_xSFA
css::uno::Sequence< sal_Int8 > m_aItData
std::unique_ptr< sal_Int32[]> pData
constexpr OUStringLiteral aData
std::unordered_map< OString, OString > StringToDataMap
std::unordered_map< OString, std::pair< int, int > > StringToValPosMap
enumrange< T >::Iterator begin(enumrange< T >)