Grok 10.0.5
GrkObjectWrapper.h
Go to the documentation of this file.
1#pragma once
2
3#include "grok.h"
4#include <atomic>
5
6namespace grk
7{
8class GrkObjectWrapper
9{
10 public:
11 explicit GrkObjectWrapper(void);
12 virtual ~GrkObjectWrapper(void);
13 int32_t ref(void);
14 int32_t unref(void);
15 virtual void release(void) = 0;
16
17 private:
18 std::atomic<int32_t> ref_count;
19};
20
21template<typename T>
22class GrkObjectWrapperImpl : public GrkObjectWrapper
23{
24 public:
25 explicit GrkObjectWrapperImpl(T* wrap) : wrappee(wrap) {}
26 virtual ~GrkObjectWrapperImpl(void) = default;
27 virtual void release(void)
28 {
29 assert(wrappee);
30 delete wrappee;
31 wrappee = nullptr;
32 }
33 T* getWrappee(void)
34 {
35 assert(wrappee);
36 return wrappee;
37 }
38
39 private:
41};
42
43} // namespace grk
std::atomic< int32_t > ref_count
Definition GrkObjectWrapper.h:18
T * wrappee
Definition GrkObjectWrapper.h:40
Copyright (C) 2016-2023 Grok Image Compression Inc.
Definition ICacheable.h:20