| OLD | NEW |
| 1 /* | 1 /* |
| 2 ****************************************************************************** | 2 ****************************************************************************** |
| 3 * | 3 * |
| 4 * Copyright (C) 1997-2015, International Business Machines | 4 * Copyright (C) 1997-2015, International Business Machines |
| 5 * Corporation and others. All Rights Reserved. | 5 * Corporation and others. All Rights Reserved. |
| 6 * | 6 * |
| 7 ****************************************************************************** | 7 ****************************************************************************** |
| 8 * | 8 * |
| 9 * File CMEMORY.H | 9 * File CMEMORY.H |
| 10 * | 10 * |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 * @see LocalPointerBase | 151 * @see LocalPointerBase |
| 152 */ | 152 */ |
| 153 template<typename T> | 153 template<typename T> |
| 154 class LocalMemory : public LocalPointerBase<T> { | 154 class LocalMemory : public LocalPointerBase<T> { |
| 155 public: | 155 public: |
| 156 /** | 156 /** |
| 157 * Constructor takes ownership. | 157 * Constructor takes ownership. |
| 158 * @param p simple pointer to an array of T items that is adopted | 158 * @param p simple pointer to an array of T items that is adopted |
| 159 */ | 159 */ |
| 160 explicit LocalMemory(T *p=NULL) : LocalPointerBase<T>(p) {} | 160 explicit LocalMemory(T *p=NULL) : LocalPointerBase<T>(p) {} |
| 161 #if U_HAVE_RVALUE_REFERENCES |
| 162 /** |
| 163 * Move constructor, leaves src with isNull(). |
| 164 * @param src source smart pointer |
| 165 */ |
| 166 LocalMemory(LocalMemory<T> &&src) U_NOEXCEPT : LocalPointerBase<T>(src.ptr)
{ |
| 167 src.ptr=NULL; |
| 168 } |
| 169 #endif |
| 161 /** | 170 /** |
| 162 * Destructor deletes the memory it owns. | 171 * Destructor deletes the memory it owns. |
| 163 */ | 172 */ |
| 164 ~LocalMemory() { | 173 ~LocalMemory() { |
| 165 uprv_free(LocalPointerBase<T>::ptr); | 174 uprv_free(LocalPointerBase<T>::ptr); |
| 166 } | 175 } |
| 176 #if U_HAVE_RVALUE_REFERENCES |
| 177 /** |
| 178 * Move assignment operator, leaves src with isNull(). |
| 179 * The behavior is undefined if *this and src are the same object. |
| 180 * @param src source smart pointer |
| 181 * @return *this |
| 182 */ |
| 183 LocalMemory<T> &operator=(LocalMemory<T> &&src) U_NOEXCEPT { |
| 184 return moveFrom(src); |
| 185 } |
| 186 #endif |
| 187 /** |
| 188 * Move assignment, leaves src with isNull(). |
| 189 * The behavior is undefined if *this and src are the same object. |
| 190 * |
| 191 * Can be called explicitly, does not need C++11 support. |
| 192 * @param src source smart pointer |
| 193 * @return *this |
| 194 */ |
| 195 LocalMemory<T> &moveFrom(LocalMemory<T> &src) U_NOEXCEPT { |
| 196 delete[] LocalPointerBase<T>::ptr; |
| 197 LocalPointerBase<T>::ptr=src.ptr; |
| 198 src.ptr=NULL; |
| 199 return *this; |
| 200 } |
| 201 /** |
| 202 * Swap pointers. |
| 203 * @param other other smart pointer |
| 204 */ |
| 205 void swap(LocalMemory<T> &other) U_NOEXCEPT { |
| 206 T *temp=LocalPointerBase<T>::ptr; |
| 207 LocalPointerBase<T>::ptr=other.ptr; |
| 208 other.ptr=temp; |
| 209 } |
| 210 /** |
| 211 * Non-member LocalMemory swap function. |
| 212 * @param p1 will get p2's pointer |
| 213 * @param p2 will get p1's pointer |
| 214 */ |
| 215 friend inline void swap(LocalMemory<T> &p1, LocalMemory<T> &p2) U_NOEXCEPT { |
| 216 p1.swap(p2); |
| 217 } |
| 167 /** | 218 /** |
| 168 * Deletes the array it owns, | 219 * Deletes the array it owns, |
| 169 * and adopts (takes ownership of) the one passed in. | 220 * and adopts (takes ownership of) the one passed in. |
| 170 * @param p simple pointer to an array of T items that is adopted | 221 * @param p simple pointer to an array of T items that is adopted |
| 171 */ | 222 */ |
| 172 void adoptInstead(T *p) { | 223 void adoptInstead(T *p) { |
| 173 uprv_free(LocalPointerBase<T>::ptr); | 224 uprv_free(LocalPointerBase<T>::ptr); |
| 174 LocalPointerBase<T>::ptr=p; | 225 LocalPointerBase<T>::ptr=p; |
| 175 } | 226 } |
| 176 /** | 227 /** |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 ptr=&stackHeader; | 642 ptr=&stackHeader; |
| 592 capacity=stackCapacity; | 643 capacity=stackCapacity; |
| 593 needToRelease=FALSE; | 644 needToRelease=FALSE; |
| 594 return p; | 645 return p; |
| 595 } | 646 } |
| 596 | 647 |
| 597 U_NAMESPACE_END | 648 U_NAMESPACE_END |
| 598 | 649 |
| 599 #endif /* __cplusplus */ | 650 #endif /* __cplusplus */ |
| 600 #endif /* CMEMORY_H */ | 651 #endif /* CMEMORY_H */ |
| OLD | NEW |