| // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | #ifndef RUNTIME_VM_COMPILER_FFI_UNIT_TEST_CUSTOM_ZONE_H_ | 
 | #define RUNTIME_VM_COMPILER_FFI_UNIT_TEST_CUSTOM_ZONE_H_ | 
 |  | 
 | #include <vector> | 
 |  | 
 | // We use a custom zone here which doesn't depend on VM internals (e.g. handles, | 
 | // thread, ...) | 
 | #if defined(RUNTIME_VM_ZONE_H_) | 
 | #error "We want our own zone implementation" | 
 | #endif | 
 | #define RUNTIME_VM_ZONE_H_ | 
 |  | 
 | namespace dart { | 
 |  | 
 | class Zone { | 
 |  public: | 
 |   Zone() {} | 
 |   ~Zone(); | 
 |  | 
 |   template <class ElementType> | 
 |   inline ElementType* Alloc(intptr_t length) { | 
 |     return static_cast<ElementType*>(AllocUnsafe(sizeof(ElementType) * length)); | 
 |   } | 
 |  | 
 |   template <class ElementType> | 
 |   inline ElementType* Realloc(ElementType* old_array, | 
 |                               intptr_t old_length, | 
 |                               intptr_t new_length) { | 
 |     void* memory = AllocUnsafe(sizeof(ElementType) * new_length); | 
 |     memmove(memory, old_array, sizeof(ElementType) * old_length); | 
 |     return static_cast<ElementType*>(memory); | 
 |   } | 
 |  | 
 |   template <class ElementType> | 
 |   void Free(ElementType* old_array, intptr_t len) {} | 
 |  | 
 |   void* AllocUnsafe(intptr_t size); | 
 |  | 
 |  private: | 
 |   Zone(const Zone&) = delete; | 
 |   void operator=(const Zone&) = delete; | 
 |   std::vector<void*> buffers_; | 
 | }; | 
 |  | 
 | }  // namespace dart | 
 |  | 
 | #endif  // RUNTIME_VM_COMPILER_FFI_UNIT_TEST_CUSTOM_ZONE_H_ |