Artifact 4098f71530c2f376583452af54eb750546fe67a3:
0000: 23 69 66 6e 64 65 66 20 5f 4b 49 4c 49 42 5f 4b #ifndef _KILIB_K
0010: 54 4c 5f 41 52 52 41 59 5f 48 5f 0d 0a 23 64 65 TL_ARRAY_H_..#de
0020: 66 69 6e 65 20 5f 4b 49 4c 49 42 5f 4b 54 4c 5f fine _KILIB_KTL_
0030: 41 52 52 41 59 5f 48 5f 0d 0a 23 69 6e 63 6c 75 ARRAY_H_..#inclu
0040: 64 65 20 22 74 79 70 65 73 2e 68 22 0d 0a 23 69 de "types.h"..#i
0050: 6e 63 6c 75 64 65 20 22 6d 65 6d 6f 72 79 2e 68 nclude "memory.h
0060: 22 0d 0a 23 69 66 6e 64 65 66 20 5f 5f 63 63 64 "..#ifndef __ccd
0070: 6f 63 5f 5f 0d 0a 6e 61 6d 65 73 70 61 63 65 20 oc__..namespace
0080: 6b 69 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a ki {..#endif....
0090: 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ....//==========
00a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d ===============.
00e0: 0a 2f 2f 40 7b 20 40 70 6b 67 20 6b 69 2e 4b 54 .//@{ @pkg ki.KT
00f0: 4c 20 2f 2f 40 7d 0d 0a 2f 2f 40 7b 0d 0a 2f 2f L //@}..//@{..//
0100: 09 8a ee 96 7b 8c 5e 90 ea 97 70 82 cc 89 c2 95 ....{.^...p.....
0110: cf 92 b7 94 7a 97 f1 0d 0a 2f 2f 0d 0a 2f 2f 09 ....z....//..//.
0120: 94 f1 8f ed 82 c9 8a c8 91 66 82 c8 8d ec 82 e8 .........f......
0130: 82 c5 82 b7 81 42 83 41 83 4e 83 5a 83 58 82 cd .....B.A.N.Z.X..
0140: 8d 44 82 ab 82 c8 82 c6 82 b1 82 eb 82 d6 8e a9 .D..............
0150: 97 52 82 c9 89 c2 94 5c 82 c5 82 b7 82 aa 81 41 .R.....\.......A
0160: 0d 0a 2f 2f 09 97 76 91 66 82 cc 92 c7 89 c1 81 ..//..v.f.......
0170: 45 8d ed 8f 9c 82 cd 96 96 94 f6 82 c9 91 ce 82 E...............
0180: b5 82 c4 82 cc 82 dd 81 42 83 72 83 62 83 67 96 ........B.r.b.g.
0190: 88 82 cc 83 52 83 73 81 5b 82 be 82 c6 82 a9 81 ....R.s.[.......
01a0: 41 0d 0a 2f 2f 09 90 46 81 58 83 47 83 4c 83 5a A..//..F.X.G.L.Z
01b0: 83 93 83 67 83 8a 83 62 83 4e 82 c8 8d ec 8b c6 ...g...b.N......
01c0: 82 f0 82 b5 82 c4 82 dc 82 b7 82 cc 82 c5 81 41 ...............A
01d0: 82 bb 82 a4 82 a2 82 a4 82 b1 82 c6 82 f0 82 b5 ................
01e0: 82 c4 97 c7 82 a2 0d 0a 2f 2f 09 8c 5e 88 c8 8a ........//..^...
01f0: 4f 82 c9 82 cd 8e 67 82 ed 82 c8 82 a2 82 c5 82 O.....g.........
0200: ad 82 be 82 b3 82 a2 81 42 0d 0a 2f 2f 40 7d 0d ........B..//@}.
0210: 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .//=============
0220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a ============....
0260: 74 65 6d 70 6c 61 74 65 20 3c 74 79 70 65 6e 61 template <typena
0270: 6d 65 20 54 3e 0d 0a 63 6c 61 73 73 20 73 74 6f me T>..class sto
0280: 72 61 67 65 20 3a 20 70 75 62 6c 69 63 20 4f 62 rage : public Ob
0290: 6a 65 63 74 0d 0a 7b 0d 0a 70 75 62 6c 69 63 3a ject..{..public:
02a0: 0d 0a 0d 0a 09 2f 2f 40 7b 0d 0a 09 2f 2f 09 83 .....//@{...//..
02b0: 52 83 93 83 58 83 67 83 89 83 4e 83 5e 0d 0a 09 R...X.g...N.^...
02c0: 2f 2f 0d 0a 09 2f 2f 09 40 70 61 72 61 6d 20 61 //...//.@param a
02d0: 6c 6c 6f 63 5f 73 69 7a 65 0d 0a 09 2f 2f 09 09 lloc_size...//..
02e0: 8d c5 8f 89 82 c9 8a 6d 95 db 82 b7 82 e9 22 83 .......m......".
02f0: 81 83 82 83 8a 82 cc 22 83 54 83 43 83 59 81 42 .......".T.C.Y.B
0300: 0d 0a 09 2f 2f 09 09 22 94 7a 97 f1 82 cc 22 83 ...//..".z....".
0310: 54 83 43 83 59 82 c5 82 cd 82 c8 82 a2 82 b1 82 T.C.Y...........
0320: c6 82 c9 92 8d 88 d3 81 42 0d 0a 09 2f 2f 40 7d ........B...//@}
0330: 0d 0a 09 65 78 70 6c 69 63 69 74 20 73 74 6f 72 ...explicit stor
0340: 61 67 65 28 20 75 6c 6f 6e 67 20 61 6c 6c 6f 63 age( ulong alloc
0350: 53 69 7a 65 3d 32 30 20 29 0d 0a 09 09 3a 20 61 Size=20 )....: a
0360: 6c 65 6e 5f 28 20 4d 61 78 28 20 61 6c 6c 6f 63 len_( Max( alloc
0370: 53 69 7a 65 2c 20 31 55 4c 20 29 20 29 0d 0a 09 Size, 1UL ) )...
0380: 09 2c 20 6c 65 6e 5f 20 28 20 30 20 29 0d 0a 09 ., len_ ( 0 )...
0390: 09 2c 20 62 75 66 5f 20 28 20 73 74 61 74 69 63 ., buf_ ( static
03a0: 5f 63 61 73 74 3c 54 2a 3e 28 6d 65 6d 28 29 2e _cast<T*>(mem().
03b0: 41 6c 6c 6f 63 28 61 6c 65 6e 5f 2a 73 69 7a 65 Alloc(alen_*size
03c0: 6f 66 28 54 29 29 29 20 29 0d 0a 09 09 7b 7d 0d of(T))) )....{}.
03d0: 0a 0d 0a 09 7e 73 74 6f 72 61 67 65 28 29 0d 0a ....~storage()..
03e0: 09 09 7b 20 6d 65 6d 28 29 2e 44 65 41 6c 6c 6f ..{ mem().DeAllo
03f0: 63 28 20 62 75 66 5f 2c 20 61 6c 65 6e 5f 2a 73 c( buf_, alen_*s
0400: 69 7a 65 6f 66 28 54 29 20 29 3b 20 7d 0d 0a 0d izeof(T) ); }...
0410: 0a 09 2f 2f 40 7b 20 96 96 94 f6 82 c9 97 76 91 ..//@{ .......v.
0420: 66 82 f0 92 c7 89 c1 20 2f 2f 40 7d 0d 0a 09 76 f...... //@}...v
0430: 6f 69 64 20 41 64 64 28 20 63 6f 6e 73 74 20 54 oid Add( const T
0440: 26 20 6f 62 6a 20 29 0d 0a 09 09 7b 0d 0a 09 09 & obj )....{....
0450: 09 69 66 28 20 6c 65 6e 5f 20 3e 3d 20 61 6c 65 .if( len_ >= ale
0460: 6e 5f 20 29 0d 0a 09 09 09 09 52 65 41 6c 6c 6f n_ )......ReAllo
0470: 63 61 74 65 28 20 61 6c 65 6e 5f 3c 3c 32 20 29 cate( alen_<<2 )
0480: 3b 0d 0a 09 09 09 62 75 66 5f 5b 20 6c 65 6e 5f ;.....buf_[ len_
0490: 2b 2b 20 5d 20 3d 20 6f 62 6a 3b 0d 0a 09 09 7d ++ ] = obj;....}
04a0: 0d 0a 0d 0a 09 2f 2f 40 7b 0d 0a 09 2f 2f 09 94 .....//@{...//..
04b0: 7a 97 f1 83 54 83 43 83 59 82 f0 8b ad 90 a7 95 z...T.C.Y.......
04c0: cf 8d 58 0d 0a 09 2f 2f 0d 0a 09 2f 2f 09 8f 6b ..X...//...//..k
04d0: 8f ac 2f 8a 67 91 e5 82 cc 82 c7 82 bf 82 e7 82 ../.g...........
04e0: e0 89 c2 94 5c 81 42 83 52 83 93 83 58 83 67 83 ....\.B.R...X.g.
04f0: 89 83 4e 83 5e 82 c6 88 e1 82 a2 81 41 0d 0a 09 ..N.^.......A...
0500: 2f 2f 09 8e 77 92 e8 82 b5 82 bd 92 6c 82 c9 8a //..w.......l...
0510: ee 82 c3 82 ab 8d c5 91 e5 69 6e 64 65 78 82 aa .........index..
0520: 95 cf 89 bb 82 b5 82 dc 82 b7 81 42 0d 0a 09 2f ...........B.../
0530: 2f 09 40 70 61 72 61 6d 20 6e 65 77 5f 73 69 7a /.@param new_siz
0540: 65 20 90 56 82 b5 82 a2 83 54 83 43 83 59 81 42 e .V.....T.C.Y.B
0550: 0d 0a 09 2f 2f 40 7d 0d 0a 09 76 6f 69 64 20 46 ...//@}...void F
0560: 6f 72 63 65 53 69 7a 65 28 20 75 6c 6f 6e 67 20 orceSize( ulong
0570: 6e 65 77 53 69 7a 65 20 29 0d 0a 09 09 7b 0d 0a newSize )....{..
0580: 09 09 09 69 66 28 20 6e 65 77 53 69 7a 65 20 3e ...if( newSize >
0590: 20 61 6c 65 6e 5f 20 29 0d 0a 09 09 09 09 52 65 alen_ )......Re
05a0: 41 6c 6c 6f 63 61 74 65 28 20 6e 65 77 53 69 7a Allocate( newSiz
05b0: 65 20 29 3b 0d 0a 09 09 09 6c 65 6e 5f 20 3d 20 e );.....len_ =
05c0: 6e 65 77 53 69 7a 65 3b 0d 0a 09 09 7d 0d 0a 0d newSize;....}...
05d0: 0a 70 75 62 6c 69 63 3a 0d 0a 0d 0a 09 2f 2f 40 .public:.....//@
05e0: 7b 20 97 76 91 66 90 94 09 2f 2f 40 7d 0d 0a 09 { .v.f...//@}...
05f0: 75 6c 6f 6e 67 20 73 69 7a 65 28 29 20 63 6f 6e ulong size() con
0600: 73 74 0d 0a 09 09 7b 20 72 65 74 75 72 6e 20 6c st....{ return l
0610: 65 6e 5f 3b 20 7d 0d 0a 0d 0a 09 2f 2f 40 7b 20 en_; }.....//@{
0620: 97 76 91 66 8e e6 93 be 20 2f 2f 40 7d 0d 0a 09 .v.f.... //@}...
0630: 54 26 20 6f 70 65 72 61 74 6f 72 5b 5d 28 20 73 T& operator[]( s
0640: 69 7a 65 5f 74 20 69 20 29 0d 0a 09 09 7b 20 72 ize_t i )....{ r
0650: 65 74 75 72 6e 20 62 75 66 5f 5b 69 5d 3b 20 7d eturn buf_[i]; }
0660: 0d 0a 0d 0a 09 2f 2f 40 7b 20 97 76 91 66 8e e6 .....//@{ .v.f..
0670: 93 be 28 63 6f 6e 73 74 29 20 2f 2f 40 7d 0d 0a ..(const) //@}..
0680: 09 63 6f 6e 73 74 20 54 26 20 6f 70 65 72 61 74 .const T& operat
0690: 6f 72 5b 5d 28 20 73 69 7a 65 5f 74 20 69 20 29 or[]( size_t i )
06a0: 20 63 6f 6e 73 74 0d 0a 09 09 7b 20 72 65 74 75 const....{ retu
06b0: 72 6e 20 62 75 66 5f 5b 69 5d 3b 20 7d 0d 0a 0d rn buf_[i]; }...
06c0: 0a 09 2f 2f 40 7b 20 94 7a 97 f1 90 e6 93 aa 82 ..//@{ .z.......
06d0: cc 83 7c 83 43 83 93 83 5e 82 f0 95 d4 82 b7 20 ..|.C...^......
06e0: 2f 2f 40 7d 0d 0a 09 63 6f 6e 73 74 20 54 2a 20 //@}...const T*
06f0: 68 65 61 64 28 29 20 63 6f 6e 73 74 0d 0a 09 09 head() const....
0700: 7b 20 72 65 74 75 72 6e 20 62 75 66 5f 3b 20 7d { return buf_; }
0710: 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 0d 0a ....private:....
0720: 09 76 6f 69 64 20 52 65 41 6c 6c 6f 63 61 74 65 .void ReAllocate
0730: 28 20 75 6c 6f 6e 67 20 73 69 7a 20 29 0d 0a 09 ( ulong siz )...
0740: 09 7b 0d 0a 09 09 09 75 6c 6f 6e 67 20 70 20 3d .{.....ulong p =
0750: 20 61 6c 65 6e 5f 2a 73 69 7a 65 6f 66 28 54 29 alen_*sizeof(T)
0760: 3b 0d 0a 09 09 09 54 2a 20 6e 65 77 62 75 66 20 ;.....T* newbuf
0770: 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c 54 2a = static_cast<T*
0780: 3e 0d 0a 09 09 09 09 28 6d 65 6d 28 29 2e 41 6c >......(mem().Al
0790: 6c 6f 63 28 20 28 61 6c 65 6e 5f 3d 73 69 7a 29 loc( (alen_=siz)
07a0: 2a 73 69 7a 65 6f 66 28 54 29 20 29 29 3b 0d 0a *sizeof(T) ));..
07b0: 09 09 09 6d 65 6d 6d 6f 76 65 28 20 6e 65 77 62 ...memmove( newb
07c0: 75 66 2c 20 62 75 66 5f 2c 20 6c 65 6e 5f 2a 73 uf, buf_, len_*s
07d0: 69 7a 65 6f 66 28 54 29 20 29 3b 0d 0a 09 09 09 izeof(T) );.....
07e0: 6d 65 6d 28 29 2e 44 65 41 6c 6c 6f 63 28 20 62 mem().DeAlloc( b
07f0: 75 66 5f 2c 20 70 20 29 3b 0d 0a 09 09 09 62 75 uf_, p );.....bu
0800: 66 5f 20 3d 20 6e 65 77 62 75 66 3b 0d 0a 09 09 f_ = newbuf;....
0810: 7d 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 0d }....private:...
0820: 0a 09 75 6c 6f 6e 67 20 61 6c 65 6e 5f 3b 0d 0a ..ulong alen_;..
0830: 09 75 6c 6f 6e 67 20 6c 65 6e 5f 3b 0d 0a 09 54 .ulong len_;...T
0840: 2a 20 20 20 20 62 75 66 5f 3b 0d 0a 0d 0a 70 72 * buf_;....pr
0850: 69 76 61 74 65 3a 0d 0a 0d 0a 09 4e 4f 43 4f 50 ivate:.....NOCOP
0860: 59 28 73 74 6f 72 61 67 65 3c 54 3e 29 3b 0d 0a Y(storage<T>);..
0870: 7d 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d };........//====
0880: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0890: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08c0: 3d 3d 3d 3d 3d 0d 0a 2f 2f 40 7b 0d 0a 2f 2f 09 =====..//@{..//.
08d0: 83 49 83 75 83 57 83 46 83 4e 83 67 8c 5e 82 c9 .I.u.W.F.N.g.^..
08e0: 82 e0 8e 67 82 a6 82 e9 92 50 95 fb 8c fc 83 8a ...g.....P......
08f0: 83 58 83 67 0d 0a 2f 2f 0d 0a 2f 2f 09 82 d9 82 .X.g..//..//....
0900: c6 82 f1 82 c7 89 bd 82 e0 8f 6f 97 88 82 dc 82 ..........o.....
0910: b9 82 f1 81 42 8f 6f 97 88 82 e9 82 cc 82 cd 96 ....B.o.........
0920: 96 94 f6 82 d6 82 cc 92 c7 89 c1 82 c6 81 41 93 ..............A.
0930: c6 8e a9 82 cc 0d 0a 2f 2f 09 69 74 65 72 61 74 .......//.iterat
0940: 6f 72 82 c9 82 e6 82 e9 83 56 81 5b 83 50 83 93 or.......V.[.P..
0950: 83 56 83 83 83 8b 82 c8 83 41 83 4e 83 5a 83 58 .V.......A.N.Z.X
0960: 82 cc 82 dd 81 42 0d 0a 2f 2f 40 7d 0d 0a 2f 2f .....B..//@}..//
0970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0990: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
09a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
09b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 74 65 6d =========....tem
09c0: 70 6c 61 74 65 20 3c 63 6c 61 73 73 20 54 3e 0d plate <class T>.
09d0: 0a 63 6c 61 73 73 20 6f 6c 69 73 74 20 3a 20 70 .class olist : p
09e0: 75 62 6c 69 63 20 4f 62 6a 65 63 74 0d 0a 7b 0d ublic Object..{.
09f0: 0a 70 72 69 76 61 74 65 3a 0d 0a 0d 0a 09 73 74 .private:.....st
0a00: 72 75 63 74 20 4e 6f 64 65 20 7b 0d 0a 09 09 4e ruct Node {....N
0a10: 6f 64 65 28 20 63 6f 6e 73 74 20 54 26 20 6f 62 ode( const T& ob
0a20: 6a 20 29 0d 0a 09 09 09 3a 20 6f 62 6a 5f 20 28 j ).....: obj_ (
0a30: 20 6f 62 6a 20 29 2c 20 6e 65 78 74 5f 28 20 4e obj ), next_( N
0a40: 55 4c 4c 20 29 20 7b 7d 0d 0a 09 09 7e 4e 6f 64 ULL ) {}....~Nod
0a50: 65 28 29 0d 0a 09 09 09 7b 20 64 65 6c 65 74 65 e().....{ delete
0a60: 20 6e 65 78 74 5f 3b 20 7d 0d 0a 09 09 4e 6f 64 next_; }....Nod
0a70: 65 2a 20 41 64 64 28 20 4e 6f 64 65 2a 20 70 4e e* Add( Node* pN
0a80: 20 29 0d 0a 09 09 09 7b 20 72 65 74 75 72 6e 20 ).....{ return
0a90: 6e 65 78 74 5f 3d 3d 4e 55 4c 4c 20 3f 20 6e 65 next_==NULL ? ne
0aa0: 78 74 5f 3d 70 4e 20 3a 20 6e 65 78 74 5f 2d 3e xt_=pN : next_->
0ab0: 41 64 64 28 70 4e 29 3b 20 7d 0d 0a 09 09 54 20 Add(pN); }....T
0ac0: 20 20 20 20 6f 62 6a 5f 3b 0d 0a 09 09 4e 6f 64 obj_;....Nod
0ad0: 65 2a 20 6e 65 78 74 5f 3b 0d 0a 09 7d 3b 0d 0a e* next_;...};..
0ae0: 0d 0a 70 75 62 6c 69 63 3a 0d 0a 0d 0a 09 73 74 ..public:.....st
0af0: 72 75 63 74 20 69 74 65 72 61 74 6f 72 20 7b 0d ruct iterator {.
0b00: 0a 09 09 69 74 65 72 61 74 6f 72 28 20 4e 6f 64 ...iterator( Nod
0b10: 65 2a 20 70 3d 4e 55 4c 4c 20 29 20 3a 20 70 74 e* p=NULL ) : pt
0b20: 72 5f 28 70 29 20 20 20 7b 7d 0d 0a 09 09 54 26 r_(p) {}....T&
0b30: 20 6f 70 65 72 61 74 6f 72 2a 28 29 20 20 20 20 operator*()
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b50: 20 20 20 7b 20 72 65 74 75 72 6e 20 70 74 72 5f { return ptr_
0b60: 2d 3e 6f 62 6a 5f 3b 20 7d 0d 0a 09 09 54 2a 20 ->obj_; }....T*
0b70: 6f 70 65 72 61 74 6f 72 2d 3e 28 29 20 63 6f 6e operator->() con
0b80: 73 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 st
0b90: 20 20 7b 20 72 65 74 75 72 6e 20 26 70 74 72 5f { return &ptr_
0ba0: 2d 3e 6f 62 6a 5f 3b 20 7d 0d 0a 09 09 62 6f 6f ->obj_; }....boo
0bb0: 6c 20 6f 70 65 72 61 74 6f 72 3d 3d 28 20 63 6f l operator==( co
0bc0: 6e 73 74 20 69 74 65 72 61 74 6f 72 26 20 69 20 nst iterator& i
0bd0: 29 20 7b 20 72 65 74 75 72 6e 20 69 2e 70 74 72 ) { return i.ptr
0be0: 5f 3d 3d 70 74 72 5f 3b 20 7d 0d 0a 09 09 62 6f _==ptr_; }....bo
0bf0: 6f 6c 20 6f 70 65 72 61 74 6f 72 21 3d 28 20 63 ol operator!=( c
0c00: 6f 6e 73 74 20 69 74 65 72 61 74 6f 72 26 20 69 onst iterator& i
0c10: 20 29 20 7b 20 72 65 74 75 72 6e 20 69 2e 70 74 ) { return i.pt
0c20: 72 5f 21 3d 70 74 72 5f 3b 20 7d 0d 0a 09 09 69 r_!=ptr_; }....i
0c30: 74 65 72 61 74 6f 72 26 20 6f 70 65 72 61 74 6f terator& operato
0c40: 72 2b 2b 28 29 20 20 20 20 7b 20 70 74 72 5f 3d r++() { ptr_=
0c50: 70 74 72 5f 2d 3e 6e 65 78 74 5f 3b 20 72 65 74 ptr_->next_; ret
0c60: 75 72 6e 20 2a 74 68 69 73 3b 20 7d 0d 0a 09 70 urn *this; }...p
0c70: 72 69 76 61 74 65 3a 0d 0a 09 09 4e 6f 64 65 2a rivate:....Node*
0c80: 20 70 74 72 5f 3b 0d 0a 09 7d 3b 0d 0a 0d 0a 70 ptr_;...};....p
0c90: 75 62 6c 69 63 3a 0d 0a 0d 0a 09 2f 2f 40 7b 20 ublic:.....//@{
0ca0: 83 52 83 93 83 58 83 67 83 89 83 4e 83 5e 20 2f .R...X.g...N.^ /
0cb0: 2f 40 7d 0d 0a 09 6f 6c 69 73 74 28 29 0d 0a 09 /@}...olist()...
0cc0: 09 3a 20 74 6f 70 5f 28 20 4e 55 4c 4c 20 29 20 .: top_( NULL )
0cd0: 7b 7d 0d 0a 0d 0a 09 2f 2f 40 7b 20 83 66 83 58 {}.....//@{ .f.X
0ce0: 83 67 83 89 83 4e 83 5e 20 2f 2f 40 7d 0d 0a 09 .g...N.^ //@}...
0cf0: 7e 6f 6c 69 73 74 28 29 0d 0a 09 09 7b 20 65 6d ~olist()....{ em
0d00: 70 74 79 28 29 3b 20 7d 0d 0a 0d 0a 09 2f 2f 40 pty(); }.....//@
0d10: 7b 20 8b f3 82 c9 82 b7 82 e9 20 2f 2f 40 7d 0d { ........ //@}.
0d20: 0a 09 76 6f 69 64 20 65 6d 70 74 79 28 29 0d 0a ..void empty()..
0d30: 09 09 7b 20 64 65 6c 65 74 65 20 74 6f 70 5f 3b ..{ delete top_;
0d40: 20 74 6f 70 5f 20 3d 20 4e 55 4c 4c 3b 20 7d 0d top_ = NULL; }.
0d50: 0a 0d 0a 09 2f 2f 40 7b 20 90 e6 93 aa 20 2f 2f ....//@{ .... //
0d60: 40 7d 0d 0a 09 69 74 65 72 61 74 6f 72 20 62 65 @}...iterator be
0d70: 67 69 6e 28 29 0d 0a 09 09 7b 20 72 65 74 75 72 gin()....{ retur
0d80: 6e 20 69 74 65 72 61 74 6f 72 28 74 6f 70 5f 29 n iterator(top_)
0d90: 3b 20 7d 0d 0a 0d 0a 09 2f 2f 40 7b 20 96 96 94 ; }.....//@{ ...
0da0: f6 20 2f 2f 40 7d 0d 0a 09 69 74 65 72 61 74 6f . //@}...iterato
0db0: 72 20 65 6e 64 28 29 0d 0a 09 09 7b 20 72 65 74 r end()....{ ret
0dc0: 75 72 6e 20 69 74 65 72 61 74 6f 72 28 29 3b 20 urn iterator();
0dd0: 7d 0d 0a 0d 0a 09 2f 2f 40 7b 20 96 96 94 f6 82 }.....//@{ .....
0de0: c9 97 76 91 66 82 f0 92 c7 89 c1 20 2f 2f 40 7d ..v.f...... //@}
0df0: 0d 0a 09 76 6f 69 64 20 41 64 64 28 20 63 6f 6e ...void Add( con
0e00: 73 74 20 54 26 20 6f 62 6a 20 29 0d 0a 09 09 7b st T& obj )....{
0e10: 0d 0a 09 09 09 4e 6f 64 65 2a 20 70 4e 20 3d 20 .....Node* pN =
0e20: 6e 65 77 20 4e 6f 64 65 28 20 6f 62 6a 20 29 3b new Node( obj );
0e30: 0d 0a 09 09 09 28 74 6f 70 5f 20 3d 3d 20 4e 55 .....(top_ == NU
0e40: 4c 4c 29 20 3f 20 74 6f 70 5f 3d 70 4e 20 3a 20 LL) ? top_=pN :
0e50: 74 6f 70 5f 2d 3e 41 64 64 28 20 70 4e 20 29 3b top_->Add( pN );
0e60: 0d 0a 09 09 7d 0d 0a 0d 0a 09 2f 2f 40 7b 20 8e ....}.....//@{ .
0e70: 77 92 e8 97 76 91 66 82 f0 8d ed 8f 9c 20 2f 2f w...v.f...... //
0e80: 40 7d 0d 0a 09 76 6f 69 64 20 44 65 6c 28 20 69 @}...void Del( i
0e90: 74 65 72 61 74 6f 72 20 64 20 29 0d 0a 09 09 7b terator d )....{
0ea0: 0d 0a 09 09 09 69 66 28 20 64 20 21 3d 20 65 6e .....if( d != en
0eb0: 64 28 29 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 d() ).....{.....
0ec0: 09 4e 6f 64 65 20 2a 70 3d 74 6f 70 5f 2c 20 2a .Node *p=top_, *
0ed0: 71 3d 4e 55 4c 4c 3b 0d 0a 09 09 09 09 66 6f 72 q=NULL;......for
0ee0: 28 20 3b 20 70 21 3d 4e 55 4c 4c 3b 20 71 3d 70 ( ; p!=NULL; q=p
0ef0: 2c 70 3d 70 2d 3e 6e 65 78 74 5f 20 29 0d 0a 09 ,p=p->next_ )...
0f00: 09 09 09 09 69 66 28 20 26 70 2d 3e 6f 62 6a 5f ....if( &p->obj_
0f10: 20 3d 3d 20 26 2a 64 20 29 0d 0a 09 09 09 09 09 == &*d ).......
0f20: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 69 66 28 .break;......if(
0f30: 20 71 20 21 3d 20 4e 55 4c 4c 20 29 0d 0a 09 09 q != NULL )....
0f40: 09 09 09 71 2d 3e 6e 65 78 74 5f 20 3d 20 70 2d ...q->next_ = p-
0f50: 3e 6e 65 78 74 5f 3b 0d 0a 09 09 09 09 65 6c 73 >next_;......els
0f60: 65 0d 0a 09 09 09 09 09 74 6f 70 5f 20 3d 20 70 e.......top_ = p
0f70: 2d 3e 6e 65 78 74 5f 3b 0d 0a 09 09 09 09 70 2d ->next_;......p-
0f80: 3e 6e 65 78 74 5f 20 3d 20 4e 55 4c 4c 3b 0d 0a >next_ = NULL;..
0f90: 09 09 09 09 64 65 6c 65 74 65 20 70 3b 0d 0a 09 ....delete p;...
0fa0: 09 09 7d 0d 0a 09 09 7d 0d 0a 0d 0a 09 2f 2f 40 ..}....}.....//@
0fb0: 7b 20 8e 77 92 e8 97 76 91 66 88 c8 8d 7e 91 53 { .w...v.f...~.S
0fc0: 82 c4 82 f0 8d ed 8f 9c 20 2f 2f 40 7d 0d 0a 09 ........ //@}...
0fd0: 76 6f 69 64 20 44 65 6c 41 66 74 65 72 28 20 69 void DelAfter( i
0fe0: 74 65 72 61 74 6f 72 20 64 20 29 0d 0a 09 09 7b terator d )....{
0ff0: 0d 0a 09 09 09 69 66 28 20 64 20 21 3d 20 65 6e .....if( d != en
1000: 64 28 29 20 29 0d 0a 09 09 09 09 69 66 28 20 64 d() )......if( d
1010: 20 3d 3d 20 62 65 67 69 6e 28 29 20 29 0d 0a 09 == begin() )...
1020: 09 09 09 7b 0d 0a 09 09 09 09 09 65 6d 70 74 79 ...{.......empty
1030: 28 29 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 ();......}......
1040: 65 6c 73 65 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 else......{.....
1050: 09 09 4e 6f 64 65 20 2a 70 3d 74 6f 70 5f 2c 20 ..Node *p=top_,
1060: 2a 71 3d 4e 55 4c 4c 3b 0d 0a 09 09 09 09 09 66 *q=NULL;.......f
1070: 6f 72 28 20 3b 20 70 21 3d 4e 55 4c 4c 3b 20 71 or( ; p!=NULL; q
1080: 3d 70 2c 70 3d 70 2d 3e 6e 65 78 74 5f 20 29 0d =p,p=p->next_ ).
1090: 0a 09 09 09 09 09 09 69 66 28 20 26 70 2d 3e 6f .......if( &p->o
10a0: 62 6a 5f 20 3d 3d 20 26 2a 64 20 29 0d 0a 09 09 bj_ == &*d )....
10b0: 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 .....break;.....
10c0: 09 09 64 65 6c 65 74 65 20 70 3b 0d 0a 09 09 09 ..delete p;.....
10d0: 09 09 71 2d 3e 6e 65 78 74 5f 20 3d 20 4e 55 4c ..q->next_ = NUL
10e0: 4c 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 7d 0d 0a L;......}....}..
10f0: 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 0d 0a 09 4e ..private:.....N
1100: 6f 64 65 2a 20 74 6f 70 5f 3b 0d 0a 09 4e 4f 43 ode* top_;...NOC
1110: 4f 50 59 28 6f 6c 69 73 74 3c 54 3e 29 3b 0d 0a OPY(olist<T>);..
1120: 7d 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d };........//====
1130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1170: 3d 3d 3d 3d 3d 0d 0a 0d 0a 7d 20 20 20 20 20 20 =====....}
1180: 2f 2f 20 6e 61 6d 65 73 70 61 63 65 20 6b 69 0d // namespace ki.
1190: 0a 23 65 6e 64 69 66 20 2f 2f 20 5f 4b 49 4c 49 .#endif // _KILI
11a0: 42 5f 4b 54 4c 5f 41 52 52 41 59 5f 48 5f 0d 0a B_KTL_ARRAY_H_..