コード例 #1
0
void DataDictionaryImpl::encodeEnumTypeDictionary(Series& series, UInt32 verbosity)
{
	if (!_loadedEnumTypeDef)
	{
		throwIueException("The enumerated types dictionary was not loaded");
	}

	SeriesEncoder& seriesEncoder = static_cast<SeriesEncoder&>(const_cast<Encoder&>(series.getEncoder()));

	UInt32 enumTypeDictionarySize = _pRsslDataDictionary->enumTableCount > 0 ? (_pRsslDataDictionary->enumTableCount * DEFAULT_ENUM_TABLE_ENTRY_SIZE ) 
		: DEFAULT_ENCODE_ITERATOR_BUFFER_SIZE;

	EncodeIterator* pEncodeIterator;

	if (!seriesEncoder.hasEncIterator())
	{
		seriesEncoder.acquireEncIterator(enumTypeDictionarySize);
		pEncodeIterator = seriesEncoder._pEncodeIter;
	}
	else
	{
		pEncodeIterator = seriesEncoder._pEncodeIter;
		pEncodeIterator->clear(enumTypeDictionarySize);
	}

	RsslRet ret;

	while ((ret = rsslEncodeEnumTypeDictionary(&pEncodeIterator->_rsslEncIter, _pRsslDataDictionary,
		(RDMDictionaryVerbosityValues)verbosity, &_errorText)) == RSSL_RET_DICT_PART_ENCODED)
	{
		pEncodeIterator->reallocate(pEncodeIterator->_allocatedSize * 2);
	}

	if (ret != RSSL_RET_SUCCESS)
	{
		thomsonreuters::ema::access::EmaString errorText("Failed to encode the enumerated type definition");
		errorText.append(CR).append("Reason='").append(_errorText.data).append("'");

		throwIueException(errorText);
	}

	pEncodeIterator->setEncodedLength(rsslGetEncodedBufferLength(&(pEncodeIterator->_rsslEncIter)));

	seriesEncoder._containerComplete = true;
}
コード例 #2
0
bool DataDictionaryImpl::encodeFieldDictionary(Series& series, Int32& currentFid, UInt32 verbosity, UInt32 fragmentationSize)
{
	if (!_loadedFieldDictionary)
	{
		throwIueException("The field dictionary information was not loaded");
	}

	SeriesEncoder& seriesEncoder = static_cast<SeriesEncoder&>(const_cast<Encoder&>(series.getEncoder()));

	UInt32 fieldDictionarySize = fragmentationSize != 0 ? fragmentationSize : DEFAULT_FRAGMENTATION_SIZE;

	EncodeIterator* pEncodeIterator;

	if (!seriesEncoder.hasEncIterator())
	{
		seriesEncoder.acquireEncIterator(fieldDictionarySize);
		pEncodeIterator = seriesEncoder._pEncodeIter;
	}
	else
	{
		pEncodeIterator = seriesEncoder._pEncodeIter;
		pEncodeIterator->clear();
		pEncodeIterator->reallocate(fieldDictionarySize);
	}

	RsslRet ret;

	if (pEncodeIterator->_allocatedSize != fieldDictionarySize)
	{
		RsslBuffer* rsslBuffer = pEncodeIterator->_rsslEncBuffer1.data ? &pEncodeIterator->_rsslEncBuffer1 : &pEncodeIterator->_rsslEncBuffer2;

		rsslBuffer->length = fieldDictionarySize;

		RsslRet ret = rsslSetEncodeIteratorBuffer(&pEncodeIterator->_rsslEncIter, rsslBuffer);
		if (ret != RSSL_RET_SUCCESS)
		{
			throwIueException("Failed to set RsslEncodeIterator buffer in DataDictionaryImpl::encodeFieldDictionary(fragmentationSize).");
		}
	}

	ret = rsslEncodeFieldDictionary(&pEncodeIterator->_rsslEncIter, _pRsslDataDictionary, &currentFid, 
		(RDMDictionaryVerbosityValues)verbosity, &_errorText);

	if (ret == RSSL_RET_SUCCESS)
	{
		pEncodeIterator->setEncodedLength(rsslGetEncodedBufferLength(&(pEncodeIterator->_rsslEncIter)));
		seriesEncoder._containerComplete = true;

		return true;
	}
	else if ( ret == RSSL_RET_DICT_PART_ENCODED )
	{
		pEncodeIterator->setEncodedLength(rsslGetEncodedBufferLength(&(pEncodeIterator->_rsslEncIter)));
		seriesEncoder._containerComplete = true;

		return false;
	}

	thomsonreuters::ema::access::EmaString errorText("Failed to encode the field dictionary information with fragementation size ");
	errorText.append(fieldDictionarySize).append(CR).append("Reason='").append(_errorText.data).append("'");

	throwIueException(errorText);

	return false;
}