1 // bindgen-flags: --rustified-enum ".*"
2 
3 template<typename T>
4 class nsTArray {
5     T* mBuff;
6 };
7 
8 template<typename T>
9 class nsStyleAutoArray
10 {
11 public:
12   // This constructor places a single element in mFirstElement.
13   enum WithSingleInitialElement { WITH_SINGLE_INITIAL_ELEMENT };
nsStyleAutoArray(WithSingleInitialElement)14   explicit nsStyleAutoArray(WithSingleInitialElement) {}
nsStyleAutoArray(const nsStyleAutoArray& aOther)15   nsStyleAutoArray(const nsStyleAutoArray& aOther) { *this = aOther; }
operator =(const nsStyleAutoArray& aOther)16   nsStyleAutoArray& operator=(const nsStyleAutoArray& aOther) {
17     mFirstElement = aOther.mFirstElement;
18     mOtherElements = aOther.mOtherElements;
19     return *this;
20   }
21 
operator ==(const nsStyleAutoArray& aOther) const22   bool operator==(const nsStyleAutoArray& aOther) const {
23     return Length() == aOther.Length() &&
24            mFirstElement == aOther.mFirstElement &&
25            mOtherElements == aOther.mOtherElements;
26   }
operator !=(const nsStyleAutoArray& aOther) const27   bool operator!=(const nsStyleAutoArray& aOther) const {
28     return !(*this == aOther);
29   }
30 
Length() const31   unsigned long Length() const {
32     return mOtherElements.Length() + 1;
33   }
operator [](unsigned long aIndex) const34   const T& operator[](unsigned long aIndex) const {
35     return aIndex == 0 ? mFirstElement : mOtherElements[aIndex - 1];
36   }
operator [](unsigned long aIndex)37   T& operator[](unsigned long aIndex) {
38     return aIndex == 0 ? mFirstElement : mOtherElements[aIndex - 1];
39   }
40 
EnsureLengthAtLeast(unsigned long aMinLen)41   void EnsureLengthAtLeast(unsigned long aMinLen) {
42     if (aMinLen > 0) {
43       mOtherElements.EnsureLengthAtLeast(aMinLen - 1);
44     }
45   }
46 
SetLengthNonZero(unsigned long aNewLen)47   void SetLengthNonZero(unsigned long aNewLen) {
48     mOtherElements.SetLength(aNewLen - 1);
49   }
50 
TruncateLengthNonZero(unsigned long aNewLen)51   void TruncateLengthNonZero(unsigned long aNewLen) {
52     mOtherElements.TruncateLength(aNewLen - 1);
53   }
54 
55 private:
56   T mFirstElement;
57   nsTArray<T> mOtherElements;
58 };
59