17 #ifndef __LOCALPOINTER_H__
18 #define __LOCALPOINTER_H__
41 #if U_SHOW_CPLUSPLUS_API
64 class LocalPointerBase {
71 explicit LocalPointerBase(T *p=
NULL) : ptr(p) {}
77 ~LocalPointerBase() { }
83 UBool isNull()
const {
return ptr==
NULL; }
89 UBool isValid()
const {
return ptr!=
NULL; }
97 bool operator==(
const T *other)
const {
return ptr==other; }
105 bool operator!=(
const T *other)
const {
return ptr!=other; }
111 T *getAlias()
const {
return ptr; }
117 T &operator*()
const {
return *ptr; }
123 T *operator->()
const {
return ptr; }
142 void adoptInstead(T *p) {
150 bool operator==(
const LocalPointerBase &other);
151 bool operator!=(
const LocalPointerBase &other);
153 LocalPointerBase(
const LocalPointerBase &other);
154 void operator=(
const LocalPointerBase &other);
156 static void *
U_EXPORT2 operator new(
size_t size);
157 static void *
U_EXPORT2 operator new[](
size_t size);
158 #if U_HAVE_PLACEMENT_NEW
159 static void *
U_EXPORT2 operator new(size_t,
void *ptr);
182 class LocalPointer :
public LocalPointerBase<T> {
189 explicit LocalPointer(T *p=
NULL) : LocalPointerBase<T>(p) {}
195 delete LocalPointerBase<T>::ptr;
203 void adoptInstead(T *p) {
204 delete LocalPointerBase<T>::ptr;
205 LocalPointerBase<T>::ptr=p;
228 class LocalArray :
public LocalPointerBase<T> {
235 explicit LocalArray(T *p=
NULL) : LocalPointerBase<T>(p) {}
241 delete[] LocalPointerBase<T>::ptr;
249 void adoptInstead(T *p) {
250 delete[] LocalPointerBase<T>::ptr;
251 LocalPointerBase<T>::ptr=p;
260 T &operator[](ptrdiff_t i)
const {
return LocalPointerBase<T>::ptr[i]; }
286 #define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction) \
287 class LocalPointerClassName : public LocalPointerBase<Type> { \
289 explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase<Type>(p) {} \
290 ~LocalPointerClassName() { closeFunction(ptr); } \
291 void adoptInstead(Type *p) { \
292 closeFunction(ptr); \
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
#define NULL
Define NULL if necessary, to 0 for C++ and to ((void *)0) for C.
UBool operator!=(const StringPiece &x, const StringPiece &y)
Global operator != for StringPiece.
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Basic definitions for ICU, for both C and C++ APIs.
int8_t UBool
The ICU boolean type.