Grok  9.7.5
GrkObjectWrapper.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "grok.h"
4 #include <atomic>
5 
6 namespace grk
7 {
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 
21 template<typename T>
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:
40  T* wrappee;
41 };
42 
43 } // namespace grk
Definition: GrkObjectWrapper.h:9
virtual void release(void)=0
GrkObjectWrapper(void)
Definition: GrkObjectWrapper.cpp:5
int32_t unref(void)
Definition: GrkObjectWrapper.cpp:12
virtual ~GrkObjectWrapper(void)
Definition: GrkObjectWrapper.cpp:7
std::atomic< int32_t > ref_count
Definition: GrkObjectWrapper.h:18
int32_t ref(void)
Definition: GrkObjectWrapper.cpp:8
Definition: GrkObjectWrapper.h:23
GrkObjectWrapperImpl(T *wrap)
Definition: GrkObjectWrapper.h:25
virtual void release(void)
Definition: GrkObjectWrapper.h:27
T * wrappee
Definition: GrkObjectWrapper.h:40
virtual ~GrkObjectWrapperImpl(void)=default
T * getWrappee(void)
Definition: GrkObjectWrapper.h:33
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20