Echo Writes Code

windows_memory.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "crucible/core/memory.hpp"

#include <Windows.h>

namespace crucible
{
  local_alloc_memory_guard::local_alloc_memory_guard(void *pointer) :
    my_pointer { pointer }
  {}

  local_alloc_memory_guard::local_alloc_memory_guard(local_alloc_memory_guard &&that) noexcept :
    my_pointer { that.my_pointer }
  {
    that.my_pointer = nullptr;
  }

  local_alloc_memory_guard::~local_alloc_memory_guard() noexcept
  {
    if (my_pointer) {
      ::LocalFree(my_pointer);
    }
  }

  auto local_alloc_memory_guard::operator=(local_alloc_memory_guard &&that) noexcept -> local_alloc_memory_guard &
  {
    if (my_pointer) {
      ::LocalFree(my_pointer);
    }

    my_pointer = that.my_pointer;
    that.my_pointer = nullptr;
  }

  auto local_alloc_memory_guard::pointer() const noexcept -> void *
  {
    return my_pointer;
  }
}