112a9d9c8Sopenharmony_ci// bindgen-flags: --rustified-enum ".*" 212a9d9c8Sopenharmony_ci 312a9d9c8Sopenharmony_citemplate<typename T> 412a9d9c8Sopenharmony_ciclass nsTArray { 512a9d9c8Sopenharmony_ci T* mBuff; 612a9d9c8Sopenharmony_ci}; 712a9d9c8Sopenharmony_ci 812a9d9c8Sopenharmony_citemplate<typename T> 912a9d9c8Sopenharmony_ciclass nsStyleAutoArray 1012a9d9c8Sopenharmony_ci{ 1112a9d9c8Sopenharmony_cipublic: 1212a9d9c8Sopenharmony_ci // This constructor places a single element in mFirstElement. 1312a9d9c8Sopenharmony_ci enum WithSingleInitialElement { WITH_SINGLE_INITIAL_ELEMENT }; 1412a9d9c8Sopenharmony_ci explicit nsStyleAutoArray(WithSingleInitialElement) {} 1512a9d9c8Sopenharmony_ci nsStyleAutoArray(const nsStyleAutoArray& aOther) { *this = aOther; } 1612a9d9c8Sopenharmony_ci nsStyleAutoArray& operator=(const nsStyleAutoArray& aOther) { 1712a9d9c8Sopenharmony_ci mFirstElement = aOther.mFirstElement; 1812a9d9c8Sopenharmony_ci mOtherElements = aOther.mOtherElements; 1912a9d9c8Sopenharmony_ci return *this; 2012a9d9c8Sopenharmony_ci } 2112a9d9c8Sopenharmony_ci 2212a9d9c8Sopenharmony_ci bool operator==(const nsStyleAutoArray& aOther) const { 2312a9d9c8Sopenharmony_ci return Length() == aOther.Length() && 2412a9d9c8Sopenharmony_ci mFirstElement == aOther.mFirstElement && 2512a9d9c8Sopenharmony_ci mOtherElements == aOther.mOtherElements; 2612a9d9c8Sopenharmony_ci } 2712a9d9c8Sopenharmony_ci bool operator!=(const nsStyleAutoArray& aOther) const { 2812a9d9c8Sopenharmony_ci return !(*this == aOther); 2912a9d9c8Sopenharmony_ci } 3012a9d9c8Sopenharmony_ci 3112a9d9c8Sopenharmony_ci unsigned long Length() const { 3212a9d9c8Sopenharmony_ci return mOtherElements.Length() + 1; 3312a9d9c8Sopenharmony_ci } 3412a9d9c8Sopenharmony_ci const T& operator[](unsigned long aIndex) const { 3512a9d9c8Sopenharmony_ci return aIndex == 0 ? mFirstElement : mOtherElements[aIndex - 1]; 3612a9d9c8Sopenharmony_ci } 3712a9d9c8Sopenharmony_ci T& operator[](unsigned long aIndex) { 3812a9d9c8Sopenharmony_ci return aIndex == 0 ? mFirstElement : mOtherElements[aIndex - 1]; 3912a9d9c8Sopenharmony_ci } 4012a9d9c8Sopenharmony_ci 4112a9d9c8Sopenharmony_ci void EnsureLengthAtLeast(unsigned long aMinLen) { 4212a9d9c8Sopenharmony_ci if (aMinLen > 0) { 4312a9d9c8Sopenharmony_ci mOtherElements.EnsureLengthAtLeast(aMinLen - 1); 4412a9d9c8Sopenharmony_ci } 4512a9d9c8Sopenharmony_ci } 4612a9d9c8Sopenharmony_ci 4712a9d9c8Sopenharmony_ci void SetLengthNonZero(unsigned long aNewLen) { 4812a9d9c8Sopenharmony_ci mOtherElements.SetLength(aNewLen - 1); 4912a9d9c8Sopenharmony_ci } 5012a9d9c8Sopenharmony_ci 5112a9d9c8Sopenharmony_ci void TruncateLengthNonZero(unsigned long aNewLen) { 5212a9d9c8Sopenharmony_ci mOtherElements.TruncateLength(aNewLen - 1); 5312a9d9c8Sopenharmony_ci } 5412a9d9c8Sopenharmony_ci 5512a9d9c8Sopenharmony_ciprivate: 5612a9d9c8Sopenharmony_ci T mFirstElement; 5712a9d9c8Sopenharmony_ci nsTArray<T> mOtherElements; 5812a9d9c8Sopenharmony_ci}; 59