KUDr@3900: /* $Id$ */ KUDr@3900: KUDr@3900: struct CFsaItem KUDr@3900: { KUDr@3900: int i; KUDr@3900: KUDr@3900: FORCEINLINE static int& NumInstances() { static int num_instances = 0; return num_instances; }; KUDr@3900: KUDr@3900: FORCEINLINE CFsaItem(int i = 0) KUDr@3900: { KUDr@3900: this->i = i; KUDr@3900: NumInstances()++; KUDr@3900: DBG("(*)"); KUDr@3900: } KUDr@3900: KUDr@3900: FORCEINLINE CFsaItem(const CFsaItem& src) KUDr@3900: { KUDr@3900: this->i = src.i; KUDr@3900: NumInstances()++; KUDr@3900: DBG("(c)"); KUDr@3900: } KUDr@3900: KUDr@3900: FORCEINLINE ~CFsaItem() KUDr@3900: { KUDr@3900: NumInstances()--; KUDr@3900: DBG("(-)"); KUDr@3900: } KUDr@3900: }; KUDr@3900: KUDr@3900: typedef CFixedSizeArrayT CSubArray; KUDr@3900: typedef CFixedSizeArrayT CSuperArray; KUDr@3900: KUDr@3900: static int TestFixedSizeArray(bool silent) KUDr@3900: { KUDr@3900: int res = 0; KUDr@3900: { KUDr@3900: CSuperArray a; KUDr@3900: KUDr@3900: CHECK_INT(0, a.IsFull(), false); KUDr@3900: CHECK_INT(1, a.IsEmpty(), true); KUDr@3900: KUDr@3900: CSubArray& b1 = a.Add(); KUDr@3900: b1.Add().i = 1; KUDr@3900: new(&b1.AddNC())CFsaItem(2); KUDr@3900: KUDr@3900: CSubArray& b2 = a.Add(); KUDr@3900: new(&b2.AddNC())CFsaItem(3); KUDr@3900: b2.Add().i = 4; KUDr@3900: KUDr@3900: CSubArray& b3 = a.AddNC(); KUDr@3900: new(&b3)CSubArray(b1); KUDr@3900: KUDr@3900: CSubArray& b4 = a.AddNC(); KUDr@3900: new(&b4)CSubArray(b2); KUDr@3900: KUDr@3900: CHECK_INT(2, a[0][0].i, 1); KUDr@3900: CHECK_INT(3, b1[1].i, 2); KUDr@3900: CHECK_INT(4, b1.Size(), 2); KUDr@3900: CHECK_INT(5, a[3][0].i, 3); KUDr@3900: CHECK_INT(6, a[3][1].i, 4); KUDr@3900: CHECK_INT(7, CFsaItem::NumInstances(), 4); KUDr@3900: CHECK_INT(8, a.IsFull(), true); KUDr@3900: CHECK_INT(9, a.IsEmpty(), false); KUDr@3900: CHECK_INT(10, a[3].IsFull(), false); KUDr@3900: CHECK_INT(11, a[3].IsEmpty(), false); KUDr@3900: } KUDr@3900: CHECK_INT(12, CFsaItem::NumInstances(), 0); KUDr@3900: KUDr@3900: return res; KUDr@3900: } KUDr@3900: KUDr@3900: typedef CArrayT CArray; KUDr@3900: KUDr@3900: static int TestArray(bool silent) KUDr@3900: { KUDr@3900: int res = 0; KUDr@3900: { KUDr@3900: CArray a; KUDr@3900: KUDr@3900: CHECK_INT(0, a.IsFull(), false); KUDr@3900: CHECK_INT(1, a.IsEmpty(), true); KUDr@3900: KUDr@3900: CHECK_INT(2, a.Size(), 0); KUDr@3900: KUDr@3900: a.Add().i = 1; KUDr@3900: CHECK_INT(3, a.Size(), 1); KUDr@3900: KUDr@3900: new(&a.AddNC())CFsaItem(2); KUDr@3900: CHECK_INT(4, a.Size(), 2); KUDr@3900: KUDr@3900: CHECK_INT(5, a.IsFull(), false); KUDr@3900: CHECK_INT(6, a.IsEmpty(), false); KUDr@3900: KUDr@3900: a.Add().i = 3; KUDr@3900: CHECK_INT(7, a.Size(), 3); KUDr@3900: KUDr@3900: new(&a.AddNC())CFsaItem(4); KUDr@3900: CHECK_INT(8, a.Size(), 4); KUDr@3900: KUDr@3900: CHECK_INT(9, a[0].i, 1); KUDr@3900: CHECK_INT(10, a[1].i, 2); KUDr@3900: CHECK_INT(11, a[2].i, 3); KUDr@3900: CHECK_INT(12, a[3].i, 4); KUDr@3900: KUDr@3900: CHECK_INT(13, a.IsFull(), true); KUDr@3900: CHECK_INT(14, a.IsEmpty(), false); KUDr@3900: KUDr@3900: CHECK_INT(15, CFsaItem::NumInstances(), 4); KUDr@3900: } KUDr@3900: CHECK_INT(16, CFsaItem::NumInstances(), 0); KUDr@3900: KUDr@3900: return res; KUDr@3900: }