aboutsummaryrefslogtreecommitdiff
path: root/include/EASTL/scoped_array.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/EASTL/scoped_array.h')
-rw-r--r--include/EASTL/scoped_array.h237
1 files changed, 0 insertions, 237 deletions
diff --git a/include/EASTL/scoped_array.h b/include/EASTL/scoped_array.h
deleted file mode 100644
index c955dba..0000000
--- a/include/EASTL/scoped_array.h
+++ /dev/null
@@ -1,237 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// Copyright (c) Electronic Arts Inc. All rights reserved.
-///////////////////////////////////////////////////////////////////////////////
-
-
-///////////////////////////////////////////////////////////////////////////////
-// *** Note ***
-// *** This code is deprecated in favor of the C++11-conforming ***
-// *** eastl::unique_ptr template class found in <EASTL/unique_ptr.h> ***
-///////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef EASTL_SCOPED_ARRAY_H
-#define EASTL_SCOPED_ARRAY_H
-
-
-#include <EASTL/internal/config.h>
-#include <EASTL/internal/smart_ptr.h> // Defines smart_array_deleter
-#include <stddef.h> // Definition of ptrdiff_t
-
-#if defined(EA_PRAGMA_ONCE_SUPPORTED)
- #pragma once // Some compilers (e.g. VC++) benefit significantly from using this. We've measured 3-4% build speed improvements in apps as a result.
-#endif
-
-
-
-namespace eastl
-{
-
- /// class scoped_array
- ///
- /// A scoped_array is the same as scoped_ptr but for arrays.
- ///
- template <typename T, typename Deleter = smart_array_deleter<T> >
- class scoped_array
- {
- protected:
- /// this_type
- /// This is an alias for scoped_array<T>, this class.
- typedef scoped_array<T> this_type;
-
- /// deleter_type
- typedef Deleter deleter_type;
-
- /// mpArray
- /// The owned pointer. Points to an array of T.
- T* mpArray;
-
- /// scoped_array
- /// This function is private in order to prevent copying, for safety.
- scoped_array(const scoped_array&);
-
- /// scoped_array
- /// This function is private in order to prevent copying, for safety.
- scoped_array& operator=(const scoped_array&);
-
- /// scoped_ptr
- /// This function is private in order to prevent copying, for safety.
- scoped_array& operator=(T* pValue);
-
- public:
- typedef T element_type;
-
- /// scoped_ptr
- /// Construct a scoped_ptr from a pointer allocated via new.
- /// Example usage:
- /// scoped_array<int> ptr(new int[6]);
- explicit scoped_array(T* pArray = NULL)
- : mpArray(pArray) {}
-
- /// ~scoped_array
- /// Destroys the owned pointer. The destructors for each of the objects
- /// in the owned array will be called.
- ~scoped_array()
- {
- Deleter del;
- del(mpArray);
- }
-
- /// reset
- /// Deletes the owned pointer and takes ownership of the
- /// passed in pointer. If the passed in pointer is the same
- /// as the owned pointer, nothing is done.
- /// Example usage:
- /// scoped_array<int> ptr(new int[6]);
- /// ptr.reset(new int[7]); // deletes int[6]
- /// ptr.reset(NULL); // deletes int[7]
- void reset(T* pArray = NULL)
- {
- if(pArray != mpArray)
- {
- Deleter del;
- del(mpArray);
- mpArray = pArray;
- }
- }
-
- /// detach
- /// This simply forgets the owned pointer. It doesn't
- /// free it but rather assumes that the user does.
- /// Example usage:
- /// scoped_array<int> ptr(new int[6]);
- /// int* pIntArray = ptr.get();
- /// ptr.detach();
- /// delete[] pIntArray;
- T* detach()
- {
- T* const pTemp = mpArray;
- mpArray = NULL;
- return pTemp;
- }
-
- /// swap
- /// Exchanges the owned pointer beween two scoped_array objects.
- void swap(this_type& scopedArray)
- {
- // std::swap(mpArray, scopedArray.mpArray); // Not used so that we can reduce a dependency.
- T* const pArray = scopedArray.mpArray;
- scopedArray.mpArray = mpArray;
- mpArray = pArray;
- }
-
- /// operator[]
- /// Returns a reference to the specified item in the owned pointer
- /// array.
- /// Example usage:
- /// scoped_array<int> ptr(new int[6]);
- /// int x = ptr[2];
- typename add_lvalue_reference<T>::type operator[](ptrdiff_t i) const
- {
- // assert(mpArray && (i >= 0));
- return mpArray[i];
- }
-
- /// get
- /// Returns the owned array pointer.
- /// Example usage:
- /// struct X{ void DoSomething(); };
- /// scoped_array<int> ptr(new X[8]);
- /// X** ppX = ptr.get();
- /// ppX[2]->DoSomething();
- T* get() const
- {
- return mpArray;
- }
-
- /// Implicit operator bool
- /// Allows for using a scoped_ptr as a boolean.
- /// Example usage:
- /// scoped_array<int> ptr(new int[8]);
- /// if(ptr)
- /// ++ptr[2];
- ///
- /// Note that below we do not use operator bool(). The reason for this
- /// is that booleans automatically convert up to short, int, float, etc.
- /// The result is that this: if(scopedArray == 1) would yield true (bad).
- typedef T* (this_type::*bool_)() const;
- operator bool_() const
- {
- if(mpArray)
- return &this_type::get;
- return NULL;
- }
-
- /// operator!
- /// This returns the opposite of operator bool; it returns true if
- /// the owned pointer is null. Some compilers require this and some don't.
- /// scoped_array<int> ptr(new int(3));
- /// if(!ptr)
- /// assert(false);
- bool operator!() const
- {
- return (mpArray == NULL);
- }
-
- }; // class scoped_array
-
-
- /// unique_array
- ///
- /// Example usage:
- /// unique_array<int> uniqueIntArray;
- /// Example usage:
- /// UNIQUE_ARRAY_T(int, eastl::smart_ptr_deleter<int>) uniqueIntArray;
- ///
- #if defined(EA_COMPILER_NO_TEMPLATE_ALIASES)
- #define UNIQUE_ARRAY_T(T, Deleter) scoped_array<T, Deleter>
- #else
- template <typename T, typename Deleter = smart_ptr_deleter<T> >
- using unique_array = scoped_array<T, Deleter>;
- #define UNIQUE_ARRAY_T(T, Deleter) unique_array<T, Deleter>
- #endif
-
-
-
- /// scoped_array
- /// returns scoped_array::get() via the input scoped_array.
- template <typename T, typename D>
- inline T* get_pointer(const scoped_array<T, D>& scopedArray)
- {
- return scopedArray.get();
- }
-
-
- /// swap
- /// Exchanges the owned pointer beween two scoped_array objects.
- /// This non-member version is useful for compatibility of scoped_array
- /// objects with the C++ Standard Library and other libraries.
- template <typename T, typename D>
- inline void swap(scoped_array<T, D>& scopedArray1, scoped_array<T, D>& scopedArray2)
- {
- scopedArray1.swap(scopedArray2);
- }
-
-
- /// operator<
- /// Returns which scoped_array is 'less' than the other. Useful when storing
- /// sorted containers of scoped_array objects.
- template <typename T, typename D>
- inline bool operator<(const scoped_array<T, D>& scopedArray1, const scoped_array<T, D>& scopedArray2)
- {
- return (scopedArray1.get() < scopedArray2.get()); // Alternatively use: std::less<T*>(scopedArray1.get(), scopedArray2.get());
- }
-
-
-} // namespace eastl
-
-
-#endif // Header include guard
-
-
-
-
-
-
-
-