<< cd->mask_size << " bytes");
}
-CacheDigest *
-cacheDigestCreate(int capacity, int bpe)
+CacheDigest::CacheDigest(int capacity, int bpe) :
+ mask(nullptr),
+ mask_size(0),
+ capacity(0),
+ bits_per_entry(0),
+ count(0),
+ del_count(0)
{
- CacheDigest *cd = (CacheDigest *)memAllocate(MEM_CACHE_DIGEST);
assert(SQUID_MD5_DIGEST_LENGTH == 16); /* our hash functions rely on 16 byte keys */
- cacheDigestInit(cd, capacity, bpe);
- return cd;
+ cacheDigestInit(this, capacity, bpe);
}
static void
{
assert(cd);
cacheDigestClean(cd);
- memFree(cd, MEM_CACHE_DIGEST);
+ delete cd;
}
CacheDigest *
{
CacheDigest *clone;
assert(cd);
- clone = cacheDigestCreate(cd->capacity, cd->bits_per_entry);
+ clone = new CacheDigest(cd->capacity, cd->bits_per_entry);
clone->count = cd->count;
clone->del_count = cd->del_count;
assert(cd->mask_size == clone->mask_size);
#ifndef SQUID_CACHEDIGEST_H_
#define SQUID_CACHEDIGEST_H_
+#include "mem/forward.h"
#include "store_key_md5.h"
class CacheDigestGuessStats;
class StoreEntry;
-// currently a POD
class CacheDigest
{
+ MEMPROXY_CLASS(CacheDigest);
+public:
+ CacheDigest(int capacity, int bpe);
+
public:
/* public, read-only */
char *mask; /* bit mask */
int del_count; /* number of deletions performed so far */
};
-CacheDigest *cacheDigestCreate(int capacity, int bpe);
void cacheDigestDestroy(CacheDigest * cd);
CacheDigest *cacheDigestClone(const CacheDigest * cd);
void cacheDigestClear(CacheDigest * cd);
MEM_64K_BUF,
MEM_ACL_DENY_INFO_LIST,
MEM_ACL_NAME_LIST,
-#if USE_CACHE_DIGESTS
- MEM_CACHE_DIGEST,
-#endif
MEM_CLIENT_INFO,
MEM_LINK_LIST,
MEM_DLINK_NODE,
memDataInit(MEM_ACL_DENY_INFO_LIST, "AclDenyInfoList",
sizeof(AclDenyInfoList), 0);
memDataInit(MEM_ACL_NAME_LIST, "acl_name_list", sizeof(AclNameList), 0);
-#if USE_CACHE_DIGESTS
-
- memDataInit(MEM_CACHE_DIGEST, "CacheDigest", sizeof(CacheDigest), 0);
-#endif
-
memDataInit(MEM_LINK_LIST, "link_list", sizeof(link_list), 10);
memDataInit(MEM_DLINK_NODE, "dlink_node", sizeof(dlink_node), 10);
memDataInit(MEM_DREAD_CTRL, "dread_ctrl", sizeof(dread_ctrl), 0);
if (!pd->cd) {
debugs(72, 2, "creating " << host << " digest; size: " << cblock.mask_size << " (" <<
std::showpos << (int) (cblock.mask_size - freed_size) << ") bytes");
- pd->cd = cacheDigestCreate(cblock.capacity, cblock.bits_per_entry);
+ pd->cd = new CacheDigest(cblock.capacity, cblock.bits_per_entry);
if (cblock.mask_size >= freed_size)
statCounter.cd.memory += (cblock.mask_size - freed_size);
return;
}
- store_digest = cacheDigestCreate(cap, Config.digest.bits_per_entry);
+ store_digest = new CacheDigest(cap, Config.digest.bits_per_entry);
debugs(71, DBG_IMPORTANT, "Local cache digest enabled; rebuild/rewrite every " <<
(int) Config.digest.rebuild_period << "/" <<
(int) Config.digest.rewrite_period << " sec");
hash = cache->hash;
- cache->digest = cacheDigestCreate(cache->count + 1, 6);
+ cache->digest = new CacheDigest(cache->count + 1, 6);
if (!cache->count)
return;
class CacheDigestGuessStats;
class StoreEntry;
-CacheDigest * cacheDigestCreate(int, int) STUB_RETVAL(NULL)
+#include "CacheDigest.h"
+CacheDigest::CacheDigest(int, int) {STUB}
void cacheDigestDestroy(CacheDigest *) STUB
CacheDigest * cacheDigestClone(const CacheDigest *) STUB_RETVAL(NULL)
void cacheDigestClear(CacheDigest * ) STUB