root/src/add-ons/kernel/file_systems/packagefs/util/ClassCache.h
/*
 * Copyright 2019, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef CLASSCACHE_H
#define CLASSCACHE_H


#include <slab/Slab.h>


#define CLASS_CACHE(CLASS) \
        static object_cache* s##CLASS##Cache = NULL; \
        \
        void* \
        CLASS::operator new(size_t size) \
        { \
                if (size != sizeof(CLASS)) \
                        panic("unexpected size passed to operator new!"); \
                if (s##CLASS##Cache == NULL) { \
                        s##CLASS##Cache = create_object_cache("pkgfs " #CLASS "s", \
                                sizeof(CLASS), CACHE_NO_DEPOT); \
                } \
        \
                return object_cache_alloc(s##CLASS##Cache, 0); \
        } \
        \
        void \
        CLASS::operator delete(void* block) \
        { \
                object_cache_free(s##CLASS##Cache, block, 0); \
        }


#endif  // CLASSCACHE_H