aboutsummaryrefslogtreecommitdiffstats
path: root/LibOVR/Src/Kernel/OVR_Allocator.h
diff options
context:
space:
mode:
Diffstat (limited to 'LibOVR/Src/Kernel/OVR_Allocator.h')
-rw-r--r--LibOVR/Src/Kernel/OVR_Allocator.h360
1 files changed, 0 insertions, 360 deletions
diff --git a/LibOVR/Src/Kernel/OVR_Allocator.h b/LibOVR/Src/Kernel/OVR_Allocator.h
deleted file mode 100644
index dcf097d..0000000
--- a/LibOVR/Src/Kernel/OVR_Allocator.h
+++ /dev/null
@@ -1,360 +0,0 @@
-/************************************************************************************
-
-PublicHeader: OVR_Kernel.h
-Filename : OVR_Allocator.h
-Content : Installable memory allocator
-Created : September 19, 2012
-Notes :
-
-Copyright : Copyright 2014 Oculus VR, LLC All Rights reserved.
-
-Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License");
-you may not use the Oculus VR Rift SDK except in compliance with the License,
-which is provided at the time of installation or download, or which
-otherwise accompanies this software in either electronic or hard copy form.
-
-You may obtain a copy of the License at
-
-http://www.oculusvr.com/licenses/LICENSE-3.2
-
-Unless required by applicable law or agreed to in writing, the Oculus VR SDK
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-************************************************************************************/
-
-#ifndef OVR_Allocator_h
-#define OVR_Allocator_h
-
-#include "OVR_Types.h"
-
-//-----------------------------------------------------------------------------------
-
-// ***** Disable template-unfriendly MS VC++ warnings
-#if defined(OVR_CC_MSVC)
-// Pragma to prevent long name warnings in in VC++
-#pragma warning(disable : 4503)
-#pragma warning(disable : 4786)
-// In MSVC 7.1, warning about placement new POD default initializer
-#pragma warning(disable : 4345)
-#endif
-
-// Un-define new so that placement constructors work
-#undef new
-
-
-//-----------------------------------------------------------------------------------
-// ***** Placement new overrides
-
-// Calls constructor on own memory created with "new(ptr) type"
-#ifndef __PLACEMENT_NEW_INLINE
-#define __PLACEMENT_NEW_INLINE
-
-# if defined(OVR_CC_MWERKS) || defined(OVR_CC_BORLAND) || defined(OVR_CC_GNU)
-# include <new>
-# else
- // Useful on MSVC
- OVR_FORCE_INLINE void* operator new (size_t n, void *ptr) { OVR_UNUSED(n); return ptr; }
- OVR_FORCE_INLINE void operator delete (void *, void *) { }
-# endif
-
-#endif // __PLACEMENT_NEW_INLINE
-
-
-
-//------------------------------------------------------------------------
-// ***** Macros to redefine class new/delete operators
-
-// Types specifically declared to allow disambiguation of address in
-// class member operator new.
-
-#define OVR_MEMORY_REDEFINE_NEW_IMPL(class_name, check_delete) \
- void* operator new(size_t sz) \
- { void *p = OVR_ALLOC_DEBUG(sz, __FILE__, __LINE__); return p; } \
- void* operator new(size_t sz, const char* file, int line) \
- { void* p = OVR_ALLOC_DEBUG(sz, file, line); OVR_UNUSED2(file, line); return p; } \
- void operator delete(void *p) \
- { check_delete(class_name, p); OVR_FREE(p); } \
- void operator delete(void *p, const char*, int) \
- { check_delete(class_name, p); OVR_FREE(p); }
-
-#define OVR_MEMORY_DEFINE_PLACEMENT_NEW \
- void* operator new (size_t n, void *ptr) { OVR_UNUSED(n); return ptr; } \
- void operator delete (void *ptr, void *ptr2) { OVR_UNUSED2(ptr,ptr2); }
-
-
-#define OVR_MEMORY_CHECK_DELETE_NONE(class_name, p)
-
-// Redefined all delete/new operators in a class without custom memory initialization
-#define OVR_MEMORY_REDEFINE_NEW(class_name) \
- OVR_MEMORY_REDEFINE_NEW_IMPL(class_name, OVR_MEMORY_CHECK_DELETE_NONE)
-
-
-namespace OVR {
-
-//-----------------------------------------------------------------------------------
-// ***** Construct / Destruct
-
-// Construct/Destruct functions are useful when new is redefined, as they can
-// be called instead of placement new constructors.
-
-
-template <class T>
-OVR_FORCE_INLINE T* Construct(void *p)
-{
- return ::new(p) T();
-}
-
-template <class T>
-OVR_FORCE_INLINE T* Construct(void *p, const T& source)
-{
- return ::new(p) T(source);
-}
-
-// Same as above, but allows for a different type of constructor.
-template <class T, class S>
-OVR_FORCE_INLINE T* ConstructAlt(void *p, const S& source)
-{
- return ::new(p) T(source);
-}
-
-template <class T, class S1, class S2>
-OVR_FORCE_INLINE T* ConstructAlt(void *p, const S1& src1, const S2& src2)
-{
- return ::new(p) T(src1, src2);
-}
-
-template <class T>
-OVR_FORCE_INLINE void ConstructArray(void *p, size_t count)
-{
- uint8_t *pdata = (uint8_t*)p;
- for (size_t i=0; i< count; ++i, pdata += sizeof(T))
- {
- Construct<T>(pdata);
- }
-}
-
-template <class T>
-OVR_FORCE_INLINE void ConstructArray(void *p, size_t count, const T& source)
-{
- uint8_t *pdata = (uint8_t*)p;
- for (size_t i=0; i< count; ++i, pdata += sizeof(T))
- {
- Construct<T>(pdata, source);
- }
-}
-
-template <class T>
-OVR_FORCE_INLINE void Destruct(T *pobj)
-{
- pobj->~T();
- OVR_UNUSED1(pobj); // Fix incorrect 'unused variable' MSVC warning.
-}
-
-template <class T>
-OVR_FORCE_INLINE void DestructArray(T *pobj, size_t count)
-{
- for (size_t i=0; i<count; ++i, ++pobj)
- pobj->~T();
-}
-
-
-//-----------------------------------------------------------------------------------
-// ***** Allocator
-
-// Allocator defines a memory allocation interface that developers can override
-// to to provide memory for OVR; an instance of this class is typically created on
-// application startup and passed into System or OVR::System constructor.
-//
-//
-// Users implementing this interface must provide three functions: Alloc, Free,
-// and Realloc. Implementations of these functions must honor the requested alignment.
-// Although arbitrary alignment requests are possible, requested alignment will
-// typically be small, such as 16 bytes or less.
-
-class Allocator
-{
- friend class System;
-public:
- virtual ~Allocator(){}
-
- // *** Standard Alignment Alloc/Free
-
- // Allocate memory of specified size with default alignment.
- // Alloc of size==0 will allocate a tiny block & return a valid pointer;
- // this makes it suitable for new operator.
- virtual void* Alloc(size_t size) = 0;
- // Same as Alloc, but provides an option of passing debug data.
- virtual void* AllocDebug(size_t size, const char* file, unsigned line)
- { OVR_UNUSED2(file, line); return Alloc(size); }
-
- // Reallocate memory block to a new size, copying data if necessary. Returns the pointer to
- // new memory block, which may be the same as original pointer. Will return 0 if reallocation
- // failed, in which case previous memory is still valid.
- // Realloc to decrease size will never fail.
- // Realloc of pointer == 0 is equivalent to Alloc
- // Realloc to size == 0, shrinks to the minimal size, pointer remains valid and requires Free().
- virtual void* Realloc(void* p, size_t newSize) = 0;
-
- // Frees memory allocated by Alloc/Realloc.
- // Free of null pointer is valid and will do nothing.
- virtual void Free(void *p) = 0;
-
-
- // *** Standard Alignment Alloc/Free
-
- // Allocate memory of specified alignment.
- // Memory allocated with AllocAligned MUST be freed with FreeAligned.
- // Default implementation will delegate to Alloc/Free after doing rounding.
- virtual void* AllocAligned(size_t size, size_t align);
- // Frees memory allocated with AllocAligned.
- virtual void FreeAligned(void* p);
-
- // Returns the pointer to the current globally installed Allocator instance.
- // This pointer is used for most of the memory allocations.
- static Allocator* GetInstance() { return pInstance; }
-
-
-protected:
- // onSystemShutdown is called on the allocator during System::Shutdown.
- // At this point, all allocations should've been freed.
- virtual void onSystemShutdown() { }
-
-public:
- static void setInstance(Allocator* palloc)
- {
- OVR_ASSERT((pInstance == 0) || (palloc == 0));
- pInstance = palloc;
- }
-
-private:
-
- static Allocator* pInstance;
-};
-
-
-
-//------------------------------------------------------------------------
-// ***** Allocator_SingletonSupport
-
-// Allocator_SingletonSupport is a Allocator wrapper class that implements
-// the InitSystemSingleton static function, used to create a global singleton
-// used for the OVR::System default argument initialization.
-//
-// End users implementing custom Allocator interface don't need to make use of this base
-// class; they can just create an instance of their own class on stack and pass it to System.
-
-template<class D>
-class Allocator_SingletonSupport : public Allocator
-{
- struct AllocContainer
- {
- size_t Data[(sizeof(D) + sizeof(size_t)-1) / sizeof(size_t)];
- bool Initialized;
- AllocContainer() : Initialized(0) { }
- };
-
- AllocContainer* pContainer;
-
-public:
- Allocator_SingletonSupport() : pContainer(0) { }
-
- // Creates a singleton instance of this Allocator class used
- // on OVR_DEFAULT_ALLOCATOR during System initialization.
- static D* InitSystemSingleton()
- {
- static AllocContainer Container;
- OVR_ASSERT(Container.Initialized == false);
-
- Allocator_SingletonSupport<D> *presult = Construct<D>((void*)Container.Data);
- presult->pContainer = &Container;
- Container.Initialized = true;
- return (D*)presult;
- }
-
-protected:
- virtual void onSystemShutdown()
- {
- Allocator::onSystemShutdown();
- if (pContainer)
- {
- pContainer->Initialized = false;
- Destruct((D*)this);
- pContainer = 0;
- }
- }
-};
-
-//------------------------------------------------------------------------
-// ***** Default Allocator
-
-// This allocator is created and used if no other allocator is installed.
-// Default allocator delegates to system malloc.
-
-class DefaultAllocator : public Allocator_SingletonSupport<DefaultAllocator>
-{
-public:
- virtual void* Alloc(size_t size);
- virtual void* AllocDebug(size_t size, const char* file, unsigned line);
- virtual void* Realloc(void* p, size_t newSize);
- virtual void Free(void *p);
-};
-
-
-//------------------------------------------------------------------------
-// ***** Memory Allocation Macros
-
-// These macros should be used for global allocation. In the future, these
-// macros will allows allocation to be extended with debug file/line information
-// if necessary.
-
-#define OVR_REALLOC(p,s) OVR::Allocator::GetInstance()->Realloc((p),(s))
-#define OVR_FREE(p) OVR::Allocator::GetInstance()->Free((p))
-#define OVR_ALLOC_ALIGNED(s,a) OVR::Allocator::GetInstance()->AllocAligned((s),(a))
-#define OVR_FREE_ALIGNED(p) OVR::Allocator::GetInstance()->FreeAligned((p))
-
-#ifdef OVR_BUILD_DEBUG
-#define OVR_ALLOC(s) OVR::Allocator::GetInstance()->AllocDebug((s), __FILE__, __LINE__)
-#define OVR_ALLOC_DEBUG(s,f,l) OVR::Allocator::GetInstance()->AllocDebug((s), f, l)
-#else
-#define OVR_ALLOC(s) OVR::Allocator::GetInstance()->Alloc((s))
-#define OVR_ALLOC_DEBUG(s,f,l) OVR::Allocator::GetInstance()->Alloc((s))
-#endif
-
-//------------------------------------------------------------------------
-
-// Base class that overrides the new and delete operators.
-// Deriving from this class, even as a multiple base, incurs no space overhead.
-class NewOverrideBase
-{
-public:
-
- // Redefine all new & delete operators.
- OVR_MEMORY_REDEFINE_NEW(NewOverrideBase)
-};
-
-
-//------------------------------------------------------------------------
-// ***** Mapped memory allocation
-//
-// Equates to VirtualAlloc/VirtualFree on Windows, mmap/munmap on Unix.
-// These are useful for when you need system-supplied memory pages.
-// These are also useful for when you need to allocate memory in a way
-// that doesn't affect the application heap.
-
-void* MMapAlloc(size_t size);
-void MMapFree(void* memory, size_t size);
-
-
-} // OVR
-
-
-// Redefine operator 'new' if necessary.
-#if defined(OVR_DEFINE_NEW)
-#define new OVR_DEFINE_NEW
-#endif
-
-
-#endif // OVR_Memory