/*
 * Initialization for cache use
 */
static void initializeCache(RsslBool cacheOption)
{
	RsslRet ret;

	if (cacheOption)
	{
		if ((ret = rsslPayloadCacheInitialize()) != RSSL_RET_SUCCESS)
		{
			printf("rsslPayloadCacheInitialize() failed: %d (%s). Cache will be disabled.", ret, rsslRetCodeToString(ret));
			cacheInfo.useCache = RSSL_FALSE;
			return;
		}

		cacheInfo.useCache = RSSL_TRUE;
		cacheInfo.cacheOptions.maxItems = 1000;
		rsslCacheErrorClear(&cacheInfo.cacheErrorInfo);
		snprintf(cacheInfo.cacheDictionaryKey, sizeof(cacheInfo.cacheDictionaryKey), "cacheDictionary%d", 1);

		cacheInfo.cacheHandle = rsslPayloadCacheCreate(&cacheInfo.cacheOptions,
				&cacheInfo.cacheErrorInfo);
		if (cacheInfo.cacheHandle == 0)
		{
			printf("Error: Failed to create cache.\n\tError (%d): %s\n",
					cacheInfo.cacheErrorInfo.rsslErrorId, cacheInfo.cacheErrorInfo.text);
			cacheInfo.useCache = RSSL_FALSE;
		}
	}
	else
	{
		cacheInfo.useCache = RSSL_FALSE;
		cacheInfo.cacheHandle = 0;
	}
}
/*
 * Retrieval from cache
 */
RsslRet retrieveFromCache(RsslEncodeIterator *eIter, RsslPayloadEntryHandle cacheEntryHandle, RsslVACacheInfo *pCacheInfo)
{
    RsslRet ret;

    if (cacheEntryHandle)
    {
        // retrieve payload from cache
        rsslCacheErrorClear(&pCacheInfo->cacheErrorInfo);

        ret = rsslPayloadEntryRetrieve(cacheEntryHandle,
                                       eIter,
                                       pCacheInfo->cursorHandle,
                                       &pCacheInfo->cacheErrorInfo);

        return ret;
    }
    else
    {
        printf("Error: no cache entry handle\n");
        return RSSL_RET_FAILURE;
    }

}