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