You are currently viewing a snapshot of www.mozilla.org taken on April 21, 2008. Most of this content is highly out of date (some pages haven't been updated since the project began in 1998) and exists for historical purposes only. If there are any pages on this archive site that you think should be added back to www.mozilla.org, please file a bug.



Main Page   Compound List   File List   Compound Members  

tmVector.h

00001 /* ***** BEGIN LICENSE BLOCK *****
00002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00003  *
00004  * The contents of this file are subject to the Mozilla Public License Version
00005  * 1.1 (the "License"); you may not use this file except in compliance with
00006  * the License. You may obtain a copy of the License at
00007  * http://www.mozilla.org/MPL/
00008  *
00009  * Software distributed under the License is distributed on an "AS IS" basis,
00010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00011  * for the specific language governing rights and limitations under the
00012  * License.
00013  *
00014  * The Original Code is Mozilla Transaction Manager.
00015  *
00016  * The Initial Developer of the Original Code is
00017  * Netscape Communications Corp.
00018  * Portions created by the Initial Developer are Copyright (C) 2003
00019  * the Initial Developer. All Rights Reserved.
00020  *
00021  * Contributor(s):
00022  *   John Gaunt <jgaunt@netscape.com>
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 #ifndef _tmVector_H_
00039 #define _tmVector_H_
00040 
00041 #include "tmUtils.h"
00042 
00057 class tmVector
00058 {
00059 public:
00060 
00062   // Constructor(s) & Destructor
00063 
00069   tmVector() : mIterator(0), mIndex(0), mNext(0) , mSize(0), mCapacity(10),
00070                mGrowthIncrement(3) {;}
00071 
00075   virtual ~tmVector();
00076 
00078   // Public Member Functions
00079 
00086   nsresult Init();
00087 
00088   // mutators
00089 
00099   nsresult Add(void *aElement);
00100 
00108   nsresult Remove(void *aElement);
00109 
00117   nsresult RemoveAt(PRUint32 aIndex);
00118 
00123   void Clear();
00124 
00125   // accessors
00126 
00132   void* ElementAt(PRUint32 aIndex);
00133 
00140   void* FirstElement();
00141 
00146   void* LastElement();
00147 
00148   // utility
00149 
00153   PRUint32 Size() { return mSize; }
00154 
00159   PRUint32 Capacity() { return mCapacity; }
00160 
00167   PRBool Contains(void *aElement);   // is the element in the collection
00168 
00169   // iteration
00170 
00196   void Iterate();
00197 
00204   void* Next();
00205 
00210   PRUint32 GetIterator() { return mLastIterator; }
00211 
00212 protected:
00213 
00215   nsresult Grow();     // increase the mCapacity by mGrowth - reallocs
00217   nsresult Shrink();   // decrease the mCapacity by mGrowth - dumb, reallocs
00218 
00220   // Protected Member Variables
00221 
00222   // utility variables
00223   PRUint32 mIterator;         // next element Next() will return (0 based)
00224   PRUint32 mLastIterator;     // last element returned by Next() (0 based)
00225   PRUint32 mIndex;            // generic reuseable index
00226 
00227   // bookkeeping variables
00228   PRUint32 mNext;             // next element insertion slot (0 based)
00229   PRUint32 mSize;             // how many elements in the Vector (1 based)
00230   PRUint32 mCapacity;         // current capacity of the Vector (1 based)
00231   PRUint32 mGrowthIncrement;  // how many slots to grow/shrink the array by
00232 
00233   // the actual array of objects being stored
00234   void **mElements;
00235 
00236 private:
00237 
00238 };
00239 
00240 #endif

Generated on Mon Feb 24 10:22:50 2003 for transaction manager by doxygen1.3-rc3