Hex Artifact Content

Not logged in

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_..