summaryrefslogtreecommitdiffstats
path: root/mailnews/addrbook/src/nsAbUtils.h
diff options
context:
space:
mode:
Diffstat (limited to 'mailnews/addrbook/src/nsAbUtils.h')
-rw-r--r--mailnews/addrbook/src/nsAbUtils.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/mailnews/addrbook/src/nsAbUtils.h b/mailnews/addrbook/src/nsAbUtils.h
new file mode 100644
index 000000000..d6b8915e0
--- /dev/null
+++ b/mailnews/addrbook/src/nsAbUtils.h
@@ -0,0 +1,140 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsAbUtils_h__
+#define nsAbUtils_h__
+
+#include "nsMemory.h"
+
+/*
+ * Wrapper class to automatically free an array of
+ * char* when class goes out of scope
+ */
+class CharPtrArrayGuard
+{
+public:
+ CharPtrArrayGuard (bool freeElements = true) :
+ mFreeElements (freeElements),
+ mArray (0),
+ mSize (0)
+ {
+ }
+
+ ~CharPtrArrayGuard ()
+ {
+ Free ();
+ }
+
+ char* operator[](int i)
+ {
+ return mArray[i];
+ }
+
+ uint32_t* GetSizeAddr(void)
+ {
+ return &mSize;
+ }
+
+ uint32_t GetSize(void)
+ {
+ return mSize;
+ }
+
+ char*** GetArrayAddr(void)
+ {
+ return &mArray;
+ }
+
+ const char** GetArray(void)
+ {
+ return (const char** ) mArray;
+ }
+
+public:
+
+private:
+ bool mFreeElements;
+ char **mArray;
+ uint32_t mSize;
+
+ void Free ()
+ {
+ if (!mArray)
+ return;
+
+ if (mFreeElements)
+ NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(mSize, mArray);
+ else
+ {
+ free(mArray);
+ }
+ }
+};
+
+/*
+ * Wrapper class to automatically free an array of
+ * char16_t* when class goes out of scope
+ */
+class PRUnicharPtrArrayGuard
+{
+public:
+ PRUnicharPtrArrayGuard (bool freeElements = true) :
+ mFreeElements (freeElements),
+ mArray (0),
+ mSize (0)
+ {
+ }
+
+ ~PRUnicharPtrArrayGuard ()
+ {
+ Free ();
+ }
+
+ char16_t* operator[](int i)
+ {
+ return mArray[i];
+ }
+
+ uint32_t* GetSizeAddr(void)
+ {
+ return &mSize;
+ }
+
+ uint32_t GetSize(void)
+ {
+ return mSize;
+ }
+
+ char16_t*** GetArrayAddr(void)
+ {
+ return &mArray;
+ }
+
+ const char16_t** GetArray(void)
+ {
+ return (const char16_t** ) mArray;
+ }
+
+public:
+
+private:
+ bool mFreeElements;
+ char16_t **mArray;
+ uint32_t mSize;
+ void Free ()
+ {
+ if (!mArray)
+ return;
+
+ if (mFreeElements)
+ NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(mSize, mArray);
+ else
+ {
+ free(mArray);
+ }
+ }
+};
+
+#endif /* nsAbUtils_h__ */