PerfCache Wiki
A high-performance C++ cache library implementing O(1) LRU and LFU.
Status: Alpha
Brought to you by:
ghofford
InsertCallerBuffer() copies cbData bytes from the buffer pointed to by pbData into a cache entry within the cache. The cache does not allocate new memory for the data - it uses the buffer that the caller has allocated.
int InsertCallerBuffer (const QBYTE *szKey,
const QBYTE *pbData,
const size_t cbData,
const unsigned int numSecondsTTL);
int InsertCallerBuffer (const QWORD *wszKey,
const QBYTE *pbData,
const size_t cbData,
const unsigned int numSecondsTTL);
1) szKey or wszKey: the key
2) pbData: a pointer to a buffer of bytes that will be inserted into the cache. This
buffer will have been allocated by the caller; the cache will free the memory pointed
to by the buffer pointer.
3) cbData: a count of bytes of the data. This value does not necessarily need to include
space for a trailing NULL. Exactly cbData bytes of the buffer pointed to by pbData
will be stored in the cache.
4) numSecondsTTL: number of seconds for the "time-to-live" value.
E_KEY_INVALIDKEYTYPE
E_INVALID_KEYVALUE
E_CACHE_DUPLICATE_KEY_FOUND_ENTRY_NOT_REPLACED
E_SUCCESS
InsertCallerBuffer() is similar to the Insert() method. It differs as follows: InsertCallerBuffer() uses the caller-allocated buffer pointed to by pbData. The caller allocates a buffer of data, and passes a pointer in pbData. The cache will free the memory pointed to by pbData, during one of the following:
1) another Insert operation with duplicate key (where allowed), or Replace operation
2) a cache-directed replacement, during which a cache entry eviction takes place
3) during cleanup of the cache
// the caller buffer:
QBYTE *pbBuffer = (QBYTE *) malloc (26 + 1);
strcpy ((char *) pbBuffer, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
int iResult = pCache->InsertCallerBuffer ((const QBYTE *) "Alphabet", // key
pbBuffer,
strlen ((char *) pbBuffer) + 1, // cbData
300); // TTL
if (iResult != E_SUCCESS)
{
// error handling here
}