Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: public/common/unicode/localpointer.h

Issue 18836004: Move ICU headers from public/{common,i18n} to source/{common,i18n} (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu46.git@master
Patch Set: same as ps #3. retry uploading Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « public/common/unicode/idna.h ('k') | public/common/unicode/locid.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: public/common/unicode/localpointer.h
diff --git a/public/common/unicode/localpointer.h b/public/common/unicode/localpointer.h
deleted file mode 100644
index b76a1f85629923bddb846e98a08483347ca4ee4a..0000000000000000000000000000000000000000
--- a/public/common/unicode/localpointer.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
-*******************************************************************************
-*
-* Copyright (C) 2009-2010, International Business Machines
-* Corporation and others. All Rights Reserved.
-*
-*******************************************************************************
-* file name: localpointer.h
-* encoding: US-ASCII
-* tab size: 8 (not used)
-* indentation:4
-*
-* created on: 2009nov13
-* created by: Markus W. Scherer
-*/
-
-#ifndef __LOCALPOINTER_H__
-#define __LOCALPOINTER_H__
-
-/**
- * \file
- * \brief C++ API: "Smart pointers" for use with and in ICU4C C++ code.
- *
- * These classes are inspired by
- * - std::auto_ptr
- * - boost::scoped_ptr & boost::scoped_array
- * - Taligent Safe Pointers (TOnlyPointerTo)
- *
- * but none of those provide for all of the goals for ICU smart pointers:
- * - Smart pointer owns the object and releases it when it goes out of scope.
- * - No transfer of ownership via copy/assignment to reduce misuse. Simpler & more robust.
- * - ICU-compatible: No exceptions.
- * - Need to be able to orphan/release the pointer and its ownership.
- * - Need variants for normal C++ object pointers, C++ arrays, and ICU C service objects.
- *
- * For details see http://site.icu-project.org/design/cpp/scoped_ptr
- */
-
-#include "unicode/utypes.h"
-
-#if U_SHOW_CPLUSPLUS_API
-
-U_NAMESPACE_BEGIN
-
-/**
- * "Smart pointer" base class; do not use directly: use LocalPointer etc.
- *
- * Base class for smart pointer classes that do not throw exceptions.
- *
- * Do not use this base class directly, since it does not delete its pointer.
- * A subclass must implement methods that delete the pointer:
- * Destructor and adoptInstead().
- *
- * There is no operator T *() provided because the programmer must decide
- * whether to use getAlias() (without transfer of ownership) or orpan()
- * (with transfer of ownership and NULLing of the pointer).
- *
- * @see LocalPointer
- * @see LocalArray
- * @see U_DEFINE_LOCAL_OPEN_POINTER
- * @stable ICU 4.4
- */
-template<typename T>
-class LocalPointerBase {
-public:
- /**
- * Constructor takes ownership.
- * @param p simple pointer to an object that is adopted
- * @stable ICU 4.4
- */
- explicit LocalPointerBase(T *p=NULL) : ptr(p) {}
- /**
- * Destructor deletes the object it owns.
- * Subclass must override: Base class does nothing.
- * @stable ICU 4.4
- */
- ~LocalPointerBase() { /* delete ptr; */ }
- /**
- * NULL check.
- * @return TRUE if ==NULL
- * @stable ICU 4.4
- */
- UBool isNull() const { return ptr==NULL; }
- /**
- * NULL check.
- * @return TRUE if !=NULL
- * @stable ICU 4.4
- */
- UBool isValid() const { return ptr!=NULL; }
- /**
- * Comparison with a simple pointer, so that existing code
- * with ==NULL need not be changed.
- * @param other simple pointer for comparison
- * @return true if this pointer value equals other
- * @stable ICU 4.4
- */
- bool operator==(const T *other) const { return ptr==other; }
- /**
- * Comparison with a simple pointer, so that existing code
- * with !=NULL need not be changed.
- * @param other simple pointer for comparison
- * @return true if this pointer value differs from other
- * @stable ICU 4.4
- */
- bool operator!=(const T *other) const { return ptr!=other; }
- /**
- * Access without ownership change.
- * @return the pointer value
- * @stable ICU 4.4
- */
- T *getAlias() const { return ptr; }
- /**
- * Access without ownership change.
- * @return the pointer value as a reference
- * @stable ICU 4.4
- */
- T &operator*() const { return *ptr; }
- /**
- * Access without ownership change.
- * @return the pointer value
- * @stable ICU 4.4
- */
- T *operator->() const { return ptr; }
- /**
- * Gives up ownership; the internal pointer becomes NULL.
- * @return the pointer value;
- * caller becomes responsible for deleting the object
- * @stable ICU 4.4
- */
- T *orphan() {
- T *p=ptr;
- ptr=NULL;
- return p;
- }
- /**
- * Deletes the object it owns,
- * and adopts (takes ownership of) the one passed in.
- * Subclass must override: Base class does not delete the object.
- * @param p simple pointer to an object that is adopted
- * @stable ICU 4.4
- */
- void adoptInstead(T *p) {
- // delete ptr;
- ptr=p;
- }
-protected:
- T *ptr;
-private:
- // No comparison operators with other LocalPointerBases.
- bool operator==(const LocalPointerBase &other);
- bool operator!=(const LocalPointerBase &other);
- // No ownership transfer: No copy constructor, no assignment operator.
- LocalPointerBase(const LocalPointerBase &other);
- void operator=(const LocalPointerBase &other);
- // No heap allocation. Use only on the stack.
- static void * U_EXPORT2 operator new(size_t size);
- static void * U_EXPORT2 operator new[](size_t size);
-#if U_HAVE_PLACEMENT_NEW
- static void * U_EXPORT2 operator new(size_t, void *ptr);
-#endif
-};
-
-/**
- * "Smart pointer" class, deletes objects via the standard C++ delete operator.
- * For most methods see the LocalPointerBase base class.
- *
- * Usage example:
- * \code
- * LocalPointer<UnicodeString> s(new UnicodeString((UChar32)0x50005));
- * int32_t length=s->length(); // 2
- * UChar lead=s->charAt(0); // 0xd900
- * if(some condition) { return; } // no need to explicitly delete the pointer
- * s.adoptInstead(new UnicodeString((UChar)0xfffc));
- * length=s->length(); // 1
- * // no need to explicitly delete the pointer
- * \endcode
- *
- * @see LocalPointerBase
- * @stable ICU 4.4
- */
-template<typename T>
-class LocalPointer : public LocalPointerBase<T> {
-public:
- /**
- * Constructor takes ownership.
- * @param p simple pointer to an object that is adopted
- * @stable ICU 4.4
- */
- explicit LocalPointer(T *p=NULL) : LocalPointerBase<T>(p) {}
- /**
- * Destructor deletes the object it owns.
- * @stable ICU 4.4
- */
- ~LocalPointer() {
- delete LocalPointerBase<T>::ptr;
- }
- /**
- * Deletes the object it owns,
- * and adopts (takes ownership of) the one passed in.
- * @param p simple pointer to an object that is adopted
- * @stable ICU 4.4
- */
- void adoptInstead(T *p) {
- delete LocalPointerBase<T>::ptr;
- LocalPointerBase<T>::ptr=p;
- }
-};
-
-/**
- * "Smart pointer" class, deletes objects via the C++ array delete[] operator.
- * For most methods see the LocalPointerBase base class.
- * Adds operator[] for array item access.
- *
- * Usage example:
- * \code
- * LocalArray<UnicodeString> a(new UnicodeString[2]);
- * a[0].append((UChar)0x61);
- * if(some condition) { return; } // no need to explicitly delete the array
- * a.adoptInstead(new UnicodeString[4]);
- * a[3].append((UChar)0x62).append((UChar)0x63).reverse();
- * // no need to explicitly delete the array
- * \endcode
- *
- * @see LocalPointerBase
- * @stable ICU 4.4
- */
-template<typename T>
-class LocalArray : public LocalPointerBase<T> {
-public:
- /**
- * Constructor takes ownership.
- * @param p simple pointer to an array of T objects that is adopted
- * @stable ICU 4.4
- */
- explicit LocalArray(T *p=NULL) : LocalPointerBase<T>(p) {}
- /**
- * Destructor deletes the array it owns.
- * @stable ICU 4.4
- */
- ~LocalArray() {
- delete[] LocalPointerBase<T>::ptr;
- }
- /**
- * Deletes the array it owns,
- * and adopts (takes ownership of) the one passed in.
- * @param p simple pointer to an array of T objects that is adopted
- * @stable ICU 4.4
- */
- void adoptInstead(T *p) {
- delete[] LocalPointerBase<T>::ptr;
- LocalPointerBase<T>::ptr=p;
- }
- /**
- * Array item access (writable).
- * No index bounds check.
- * @param i array index
- * @return reference to the array item
- * @stable ICU 4.4
- */
- T &operator[](ptrdiff_t i) const { return LocalPointerBase<T>::ptr[i]; }
-};
-
-/**
- * \def U_DEFINE_LOCAL_OPEN_POINTER
- * "Smart pointer" definition macro, deletes objects via the closeFunction.
- * Defines a subclass of LocalPointerBase which works just
- * like LocalPointer<Type> except that this subclass will use the closeFunction
- * rather than the C++ delete operator.
- *
- * Requirement: The closeFunction must tolerate a NULL pointer.
- * (We could add a NULL check here but it is normally redundant.)
- *
- * Usage example:
- * \code
- * LocalUCaseMapPointer csm(ucasemap_open(localeID, options, &errorCode));
- * utf8OutLength=ucasemap_utf8ToLower(csm.getAlias(),
- * utf8Out, (int32_t)sizeof(utf8Out),
- * utf8In, utf8InLength, &errorCode);
- * if(U_FAILURE(errorCode)) { return; } // no need to explicitly delete the UCaseMap
- * \endcode
- *
- * @see LocalPointerBase
- * @see LocalPointer
- * @stable ICU 4.4
- */
-#define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction) \
- class LocalPointerClassName : public LocalPointerBase<Type> { \
- public: \
- explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase<Type>(p) {} \
- ~LocalPointerClassName() { closeFunction(ptr); } \
- void adoptInstead(Type *p) { \
- closeFunction(ptr); \
- ptr=p; \
- } \
- }
-
-U_NAMESPACE_END
-
-#endif /* U_SHOW_CPLUSPLUS_API */
-#endif /* __LOCALPOINTER_H__ */
« no previous file with comments | « public/common/unicode/idna.h ('k') | public/common/unicode/locid.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698