123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #ifndef BASE_MAC_SCOPED_MACH_VM_H_
- #define BASE_MAC_SCOPED_MACH_VM_H_
- #include <mach/mach.h>
- #include <stddef.h>
- #include <algorithm>
- #include "base/base_export.h"
- #include "base/check_op.h"
- #include "base/macros.h"
- namespace base {
- namespace mac {
- class BASE_EXPORT ScopedMachVM {
- public:
- explicit ScopedMachVM(vm_address_t address = 0, vm_size_t size = 0)
- : address_(address), size_(size) {
- DCHECK_EQ(address % PAGE_SIZE, 0u);
- DCHECK_EQ(size % PAGE_SIZE, 0u);
- }
- ~ScopedMachVM() {
- if (size_) {
- vm_deallocate(mach_task_self(), address_, size_);
- }
- }
-
-
-
-
- void reset(vm_address_t address = 0, vm_size_t size = 0);
-
-
- void reset_unaligned(vm_address_t address, vm_size_t size);
- vm_address_t address() const {
- return address_;
- }
- vm_size_t size() const {
- return size_;
- }
- void swap(ScopedMachVM& that) {
- std::swap(address_, that.address_);
- std::swap(size_, that.size_);
- }
- void release() {
- address_ = 0;
- size_ = 0;
- }
- private:
- vm_address_t address_;
- vm_size_t size_;
- DISALLOW_COPY_AND_ASSIGN(ScopedMachVM);
- };
- }
- }
- #endif
|