#ifndef _CFCLASS_H
#define _CFCLASS_H
#include <CoreFoundation/CFRuntime.h>
namespace Security {
class Mutex;
class CFAllocator
{
public:
explicit CFAllocator(Mutex &lock);
CFAllocatorRef allocator;
private:
static void *allocate(CFIndex allocSize, CFOptionFlags hint, void *info) throw();
static void *reallocate(void *ptr, CFIndex newsize, CFOptionFlags hint, void *info) throw();
static void deallocate(void *ptr, void *info) throw();
static CFIndex preferredSize(CFIndex size, CFOptionFlags hint, void *info) throw();
CFAllocatorContext mContext;
Mutex &mLock;
};
class CFClass : protected CFRuntimeClass
{
friend class CFAllocator;
public:
explicit CFClass(const char *name, CFAllocator *allocator = NULL);
CFTypeID typeID;
CFAllocatorRef allocator;
private:
static void finalizeType(CFTypeRef cf) throw();
static Boolean equalType(CFTypeRef cf1, CFTypeRef cf2) throw();
static CFHashCode hashType(CFTypeRef cf) throw();
static CFStringRef copyFormattingDescType(CFTypeRef cf, CFDictionaryRef dict) throw();
static CFStringRef copyDebugDescType(CFTypeRef cf) throw();
};
}
#endif