gecko-dev/lib/mailto/ptrarray.h
akkana%netscape.com 1a97e11ffd Mailto landing.
The mailto library is the mail compose code ripped out of the old
Messenger libmsg library, then cleaned up somewhat
(it could still use more cleaning).
This library should only be built ifdef MOZ_MAIL_COMPOSE.
1998-09-04 19:04:30 +00:00

161 lines
5.5 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
// ptrarray.h
#ifndef PTR_ARRAY_H_
#define PTR_ARRAY_H_
#ifdef XP_UNIX
#define __cdecl
#endif
typedef int XPCompareFunc(const void *, const void *);
#ifdef DEBUG
// These are here to stop people calling
#define VIRTUAL virtual
#else
#define VIRTUAL
#endif // DEBUG
//*****************************************************************************
class XPPtrArray
{
public:
// Construction/destruction
XPPtrArray();
virtual ~XPPtrArray();
// State/attribute member functions
int GetSize() const;
XP_Bool IsValidIndex(int32 nIndex);
VIRTUAL XP_Bool SetSize(int nNewSize);
// Accessor member functions
void *&ElementAt(int nIndex);
virtual int FindIndex (int nStartIndex, void *pToFind) const;
virtual int FindIndexUsing(int nStartIndex, void *pToFind, XPCompareFunc* compare) const;
void *GetAt(int nIndex) const;
VIRTUAL void SetAt(int nIndex, void *newElement);
// Insertion/deletion member functions
virtual int Add(void *newElement);
VIRTUAL void InsertAt(int nIndex, void *newElement, int nCount = 1);
VIRTUAL void InsertAt(int nStartIndex, const XPPtrArray *pNewArray);
XP_Bool Remove(void *pToRemove);
virtual void RemoveAll();
void RemoveAt(int nIndex, int nCount = 1);
void RemoveAt(int nStartIndex, const XPPtrArray *pNewArray);
VIRTUAL void SetAtGrow(int nIndex, void *newElement);
// Sorting member functions
int InsertBinary(void *newElement, XPCompareFunc *compare);
void QuickSort(XPCompareFunc *compare);
// Overloaded operators
void *operator[](int nIndex) const;
void *&operator[](int nIndex);
#ifdef DEBUG
virtual XP_Bool VerifySort() const;
#endif
protected:
// Member Variables
int m_nSize;
int m_nMaxSize;
void **m_pData;
};
//*****************************************************************************
class XPSortedPtrArray : public XPPtrArray
{
public:
XPSortedPtrArray(XPCompareFunc *compare);
virtual int Add(void *newElement);
// PROMISE: this class will always call the compare-func with pToFind as the
// second parameter.
virtual int FindIndex(int nStartIndex, void *pToFind) const;
// These functions can only be used on non-sorted PtrArray objects (i.e. compareFunc is NULL)
virtual void SetAt(int nIndex, void* newElement);
virtual void InsertAt(int nIndex, void* newElement, int nCount = 1);
virtual void InsertAt(int nStartIndex, const XPPtrArray* pNewArray);
#ifdef DEBUG
virtual XP_Bool VerifySort() const;
#endif
protected:
// Allows search to use a different compare func from the sort. This is used
// by MSG_FolderCache, to find the cache element corresponding to a folder.
// The corresponding element and folder have identical relative paths, and the
// relative path is used by both compare funcs, which is why it works.
// to the found element
int FindIndexUsing(int nStartIndex, void *pToFind,
XPCompareFunc *compare) const;
// Member Variables
XPCompareFunc* m_CompareFunc; // NULL to simulate unsorted base-class.
};
//*****************************************************************************
// msg_StringArray is a subclass of the generic pointer array class
// which is intended for string operations.
// - It can "own" the strings, or not.
// - It can be sorted, if you provide a CompareFunc, or not, if you don't
class msg_StringArray : public XPSortedPtrArray
{
public:
// Overrides from base class
msg_StringArray (XP_Bool ownsMemory, XPCompareFunc *compare = NULL);
virtual ~msg_StringArray ();
const char *GetAt (int i) const { return (const char*) XPPtrArray::GetAt(i); }
virtual int Add (void *string);
virtual void RemoveAll ();
XP_Bool ImportTokenList (const char *list, const char *tokenSeps = ", ");
char *ExportTokenList (const char *tokenSep = ", ");
protected:
XP_Bool m_ownsMemory;
};
//*****************************************************************************
class MSG_FolderInfo;
class MSG_FolderArray : public XPSortedPtrArray
{
public:
// Override constructor to allow folderArrays to be sorted
MSG_FolderArray (XPCompareFunc *compare = NULL) : XPSortedPtrArray (compare) {}
// Encapsulate this typecast, so we don't have to do it all over the place.
MSG_FolderInfo *GetAt(int i) const { return (MSG_FolderInfo*) XPPtrArray::GetAt(i); }
};
#endif