TNB Library
TnbCollection.h
[詳解]
1#pragma once
13#include "TnbComparator.h"
14#include "TnbStr.h"
15#include "TnbSync.h"
16#include "TnbException.h"
17#include "TnbSerializer.h"
18
19
20
21//TNB Library
22namespace TNB
23{
24
25
26
27#ifndef _TnbDOXYGEN //Document作成用シンボル
28
29// Input Iterator ベーステンプレート
30template<typename COL, typename TYP>
31class CConstIteratorBaseT
32{
33 const COL * m_V;
34 mutable INDEX m_ind;
35public:
36 CConstIteratorBaseT(const COL* V = NULL, INDEX i = 0): m_V(V), m_ind(i) {}
37 INDEX GetIndex(void) const { return m_ind; }
38 TYP operator*(void) const { return m_V->Get(m_ind); }
39 const TYP* operator->(void) const { return &(m_V->At(m_ind)); }
40 bool operator==(const CConstIteratorBaseT& I) const
41 {
42 return m_V == I.m_V && m_ind == I.m_ind;
43 }
44 bool operator!=(const CConstIteratorBaseT& I) const
45 {
46 return m_V != I.m_V || m_ind != I.m_ind;
47 }
48 CConstIteratorBaseT& operator++(void) const
49 {
50 m_ind++;
51 return *this;
52 }
53 CConstIteratorBaseT operator++(int) const
54 {
55 CConstIteratorBaseT I = *this;
56 m_ind++;
57 return I;
58 }
59 const TYP& operator[](INDEX i) const{ return m_V->At(m_ind+i); }
60 CConstIteratorBaseT& operator+=(INT_PTR i) {m_ind+=i; return *this;}
61 CConstIteratorBaseT& operator-=(INT_PTR i) {m_ind-=i; return *this;}
62};
63
64// Randam Access Iterator ベースマクロ
65#define _ITERATORCORE(NAME, COLL) \
66 COLL* m_V; \
67 mutable INDEX m_ind; \
68 public: \
69 NAME(COLL* V = NULL, INDEX i = 0) : m_V(V), m_ind(i) {} \
70 INDEX GetIndex(void) const { return m_ind; } \
71 bool operator==(const NAME& I) const {return m_ind==I.m_ind;} \
72 bool operator!=(const NAME& I) const {return m_ind!=I.m_ind;} \
73 bool operator<=(const NAME& I) const {return m_ind<=I.m_ind;} \
74 bool operator<(const NAME& I) const {return m_ind<I.m_ind;} \
75 bool operator>=(const NAME& I) const {return m_ind>=I.m_ind;} \
76 bool operator>(const NAME& I) const {return m_ind>I.m_ind;} \
77 NAME& operator+=(INT_PTR i) {m_ind+=i; return *this;} \
78 NAME& operator-=(INT_PTR i) {m_ind-=i; return *this;} \
79 NAME operator+(INT_PTR i) const {NAME I=*this; return I+=i;} \
80 NAME operator-(INT_PTR i) const {NAME I=*this; return I-=i;} \
81 INT_PTR operator-(const NAME& I) const {return m_ind-I.m_ind; } \
82 NAME& operator++(void) {m_ind++; return *this;} \
83 NAME& operator--(void) {m_ind--; return *this;} \
84 NAME operator++(int) {NAME I=*this; m_ind++; return I;} \
85 NAME operator--(int) {NAME I=*this; m_ind--; return I;}
86
87
88// Randam Access Iterator ベーステンプレート
89template<typename COL, typename TYP>
90class CIteratorBaseT
91{
92 _ITERATORCORE(CIteratorBaseT, COL)
93public:
94 const TYP& operator*(void) const { return m_V->At(m_ind); }
95 const TYP* operator->(void) const { return &(m_V->At(m_ind)); }
96 const TYP& operator[](INDEX i) const{ return m_V->At(m_ind+i); }
97 TYP& operator*(void) { return m_V->Ref(m_ind); }
98 TYP* operator->(void) { return &(m_V->Ref(m_ind));}
99 TYP& operator[](INDEX i) { return m_V->Ref(m_ind+i); }
100};
101
102#endif //_TnbDOXYGEN
103
104
105
211template<typename TYP>
212struct IConstCollectionT : ISynchronized, ISerializable, IComparableT<TNB::IConstCollectionT<TYP> >
213{
218 struct IChecker
219 {
220 virtual ~IChecker(void) {}
227 virtual bool IsValid(const TYP& T) const = 0;
228 };
229
230
231 //---------------------------------
232
233
234 #ifndef _TnbDOXYGEN //Document作成用シンボル
235 // const_iterator型
236 typedef CConstIteratorBaseT<IConstCollectionT<TYP>, TYP> const_iterator;
237 // value_type宣言
238 typedef TYP value_type;
239 #endif //_TnbDOXYEM
240
246 const_iterator begin(void) const { return const_iterator(this, 0); }
247
253 const_iterator end(void) const { return const_iterator(this, GetSize()); }
254
255
256 //---------------------------------
257
258
261 {
262 }
263
268 operator size_t(void) const
269 {
270 return GetSize();
271 }
272
278 virtual size_t GetSize(void) const = 0;
279
288 virtual const TYP& At(INDEX index) const = 0;
289
298 virtual TYP Get(INDEX index) const
299 {
300 return At(index);
301 }
302
309 TYP GetEx(INDEX index) const
310 {
311 EXCLUSIVE(this);
312 return At(index);
313 }
314
322 virtual size_t GetElements(size_t size, TYP* _P, INDEX offset = 0) const
323 {
324 EXCLUSIVE(this);
325 if ( offset >= GetSize() )
326 {
327 return 0;
328 }
329 if ( size + offset > GetSize() )
330 {
331 size = GetSize() - offset;
332 }
333 for ( INDEX i = 0; i < size; i++ )
334 {
335 *_P++ = At(i + offset);
336 }
337 return size;
338 }
339
346 bool IsEmpty(void) const
347 {
348 return GetSize() == 0;
349 }
350
358 bool IsInRange(INDEX index) const
359 {
360 return TNB::IsInRange(index, GetSize());
361 }
362
368 virtual void Serialize(ISerializer& _sr) const
369 {
370 EXCLUSIVE(this);
371 size_t l = GetSize();
372 _sr << l << l;
373 loop ( i, l )
374 {
375 _sr << At(i);
376 }
377 }
378
384 virtual void Deserialize(const IDeserializer& ds)
385 {
386 throw CNotSupportException();
387 }
388
400 INDEX Find(const IChecker& checker, INDEX startIndex = 0, bool boIsReverse = false) const
401 {
402 EXCLUSIVE(this);
403 if ( IsInRange(startIndex) )
404 {
405 size_t size = GetSize();
406 for ( size_t i = startIndex; i < size; i++ )
407 {
408 if ( checker.IsValid(At(i)) ^ boIsReverse )
409 {
410 return i;
411 }
412 }
413 }
414 return INVALID_INDEX;
415 }
416
427 INDEX Find(const IConstCollectionT<TYP>& t, const IComparatorT<TYP>& comparator, INDEX startIndex = 0) const
428 {
429 EXCLUSIVE(this);
430 if ( IsInRange(startIndex) )
431 {
432 size_t size = GetSize();
433 for ( size_t i = startIndex; i < size; i++ )
434 {
435 size_t tsz = t.GetSize();
436 if ( i + tsz > size || tsz == 0 )
437 {
438 break;
439 }
440 bool isFind = true;
441 loop ( j, tsz )
442 {
443 if ( ! comparator.IsEqualTo(At(i + j), t.At(j)) )
444 {
445 isFind = false;
446 break;
447 }
448 }
449 if ( isFind )
450 {
451 return i;
452 }
453 }
454 }
455 return INVALID_INDEX;
456 }
457
467 INDEX Find(const IConstCollectionT<TYP>& t, INDEX startIndex = 0) const
468 {
469 return Find(t, IComparatorT<TYP>::GetDefault(), startIndex);
470 }
471
482 INDEX Find(const TYP& t, const IComparatorT<TYP>& comparator, INDEX startIndex = 0) const
483 {
484 EXCLUSIVE(this);
485 if ( IsInRange(startIndex) )
486 {
487 size_t size = GetSize();
488 for ( size_t i = startIndex; i < size; i++ )
489 {
490 if ( comparator.IsEqualTo(At(i), t) )
491 {
492 return i;
493 }
494 }
495 }
496 return INVALID_INDEX;
497 }
498
508 INDEX Find(const TYP& t, INDEX startIndex = 0) const
509 {
510 return Find(t, IComparatorT<TYP>::GetDefault(), startIndex);
511 }
512
521 INDEX FindMax(const IComparatorT<TYP>& comparator, const TYP& def) const
522 {
523 EXCLUSIVE(this);
524 TYP t = def;
525 INDEX r = INVALID_INDEX;
526 loop_dn ( i, GetSize() )
527 {
528 if ( comparator.CompareTo(At(i), t) >= 0 )
529 {
530 t = Get(i);
531 r = i;
532 }
533 }
534 return r;
535 }
536
545 INDEX FindMax(const TYP& def) const
546 {
548 }
549
558 INDEX FindMin(const IComparatorT<TYP>& comparator, const TYP& def) const
559 {
560 EXCLUSIVE(this);
561 TYP t = def;
562 INDEX r = INVALID_INDEX;
563 loop_dn ( i, GetSize() )
564 {
565 if ( comparator.CompareTo(At(i), t) <= 0 )
566 {
567 t = Get(i);
568 r = i;
569 }
570 }
571 return r;
572 }
573
582 INDEX FindMin(const TYP& def) const
583 {
585 }
586
595 virtual INT_PTR Compare(const IConstCollectionT<TYP>& c) const
596 {
597 if ( this == &c )
598 {
599 return 0;
600 }
601 EXCLUSIVE2(&c, this);
603 size_t mySize = GetSize();
604 size_t youSize = c.GetSize();
605 size_t size = (mySize < youSize) ? mySize : youSize;
606 loop ( i, size )
607 {
608 INT_PTR r = comparator.CompareTo(At(i), c.At(i));
609 if ( r != 0 )
610 {
611 return r;
612 }
613 }
614 return mySize - youSize;
615 }
616
624 virtual bool IsEqual(const IConstCollectionT<TYP>& c) const
625 {
626 ASSERT( IComparatorT<TYP>::GetDefault().IsEqualTo(TYP(), TYP()) );
627 if ( this == &c )
628 {
629 return true;
630 }
631 EXCLUSIVE2(&c, this);
632 size_t size = GetSize();
633 if ( size != c.GetSize() )
634 {
635 return false;
636 }
638 loop ( i, size )
639 {
640 if ( ! comparator.IsEqualTo(At(i), c.At(i)) )
641 {
642 return false;
643 }
644 }
645 return true;
646 }
647
648private:
650 void operator=(const IConstCollectionT& other);
651};
652
653
654
811template<typename TYP>
813{
827 {
828 ICollectionT<TYP>* m_piCollect;
829 const IComparatorT<TYP>* m_piComparator;
830 bool m_boIsReverse;
837 void m_qsort(size_t left, size_t right)
838 {
839 if ( left >= right ){ return; }
840 size_t j = left;
841 for ( size_t i = left + 1; i <= right; i++ )
842 {
843 const TYP& c1 = m_piCollect->At(i);
844 const TYP& c2 = m_piCollect->At(left);
845 if ( (m_piComparator->CompareTo(c1, c2) < 0) ^ m_boIsReverse )
846 {
847 m_piCollect->Swap(i, ++j);
848 }
849 }
850 m_piCollect->Swap(left, j);
851 //
852 if ( j > 0 )
853 {
854 m_qsort(left, j - 1);
855 }
856 m_qsort(j + 1, right);
857 }
858
859 public:
860
862 CSort(void) {}
863
871 void QuickSort(ICollectionT<TYP>& _collect, const IComparatorT<TYP>& comp, bool boIsReverse = false)
872 {
873 m_piCollect = &_collect;
874 m_piComparator = &comp;
875 m_boIsReverse = boIsReverse;
876 size_t l = _collect.GetSize();
877 if ( l > 0 )
878 {
879 m_qsort(0, l - 1);
880 }
881 }
882
890 void BubbleSort(ICollectionT<TYP>& _collect, const IComparatorT<TYP>& comp, bool boIsReverse = false)
891 {
892 size_t size = _collect.GetSize();
893 loop ( i, size )
894 {
895 for ( size_t j = size - 1; j > i; j-- )
896 {
897 const TYP& c1 = _collect.At(j - 1);
898 const TYP& c2 = _collect.At(j);
899 if ( (comp.CompareTo(c1, c2) > 0) ^ boIsReverse )
900 {
901 _collect.Swap(j - 1, j);
902 }
903 }
904 }
905 }
906 };
907
908
909 //------------------------------------
910
911
912 #ifndef _TnbDOXYGEN //Document作成用シンボル
913 // const_iterator型宣言
914 typedef CConstIteratorBaseT<ICollectionT<TYP>, TYP> const_iterator;
915 // iterator型宣言
916 typedef CIteratorBaseT<ICollectionT<TYP>, TYP> iterator;
917 #endif //_TnbDOXYEM
918
924 const_iterator begin(void) const { return const_iterator(this, 0); }
925
931 const_iterator end(void) const { return const_iterator(this, GetSize()); }
932
938 iterator begin(void) { return iterator(this, 0); }
939
945 iterator end(void) { return iterator(this, GetSize()); }
946
951 void push_back(const TYP& t) { Add(t); }
952
953
954 //------------------------------------
955
956
961 {
962 }
963
967 virtual ~ICollectionT(void)
968 {
969 }
970
977 {
978 Copy(other);
979 return *this;
980 }
981
991 virtual TYP& Ref(INDEX index) = 0;
992
1002 virtual bool Set(INDEX index, const TYP& t) = 0;
1003
1011 bool SetEx(INDEX index, const TYP& t)
1012 {
1013 EXCLUSIVE(this);
1014 return Set(index, t);
1015 }
1016
1025 virtual INDEX Add(const TYP& t) = 0;
1026
1033 INDEX AddEx(const TYP& t)
1034 {
1035 EXCLUSIVE(this);
1036 return Add(t);
1037 }
1038
1049 virtual bool Insert(INDEX index, const TYP& t)
1050 {
1051 size_t nowSize = GetSize();
1052 if ( index >= nowSize + 1 )
1053 {
1054 return false;
1055 }
1056 INDEX r = Add(TYP());
1057 if ( r == INVALID_INDEX )
1058 {
1059 return false;
1060 }
1061 loop_dn( i, nowSize - index )
1062 {
1063 Set(index + i + 1, At(index + i));
1064 }
1065 Set(index, t);
1066 return true;
1067 }
1068
1077 virtual bool InsertEx(INDEX index, const TYP& t)
1078 {
1079 EXCLUSIVE(this);
1080 return Insert(index, t);
1081 }
1082
1091 virtual bool Remove(INDEX index) = 0;
1092
1099 bool RemoveEx(INDEX index)
1100 {
1101 EXCLUSIVE(this);
1102 return Remove(index);
1103 }
1104
1112 virtual size_t RemoveElements(INDEX index, size_t size = 0)
1113 {
1114 size_t r = 0;
1115 if ( size == 0 )
1116 {
1117 size = INVALID_SIZE;
1118 }
1119 loop ( i, size )
1120 {
1121 if ( ! Remove(index) )
1122 {
1123 break;
1124 }
1125 r++;
1126 }
1127 return r;
1128 }
1129
1136 virtual bool RemoveAll(void)
1137 {
1138 EXCLUSIVE(this);
1139 while ( ! IsEmpty() )
1140 {
1141 if ( ! Remove(0) )
1142 {
1143 return false;
1144 }
1145 }
1146 return true;
1147 }
1148
1155 virtual void Swap(INDEX index1, INDEX index2)
1156 {
1157 if ( index1 != index2 )
1158 {
1159 EXCLUSIVE(this);
1160 TYP t = Get(index1);
1161 Set(index1, At(index2));
1162 Set(index2, t);
1163 }
1164 }
1165
1174 virtual size_t AddElements(size_t size, const TYP* P = NULL)
1175 {
1176 EXCLUSIVE(this);
1177 if ( P != NULL )
1178 {
1179 loop ( i, size )
1180 {
1181 if ( Add(*P++) == INVALID_INDEX )
1182 {
1183 return INVALID_SIZE;
1184 }
1185 }
1186 }
1187 else
1188 {
1189 loop ( i, size )
1190 {
1191 if ( Add(TYP()) == INVALID_INDEX )
1192 {
1193 return INVALID_SIZE;
1194 }
1195 }
1196 }
1197 return size;
1198 }
1199
1208 virtual size_t Append(const IConstCollectionT<TYP>& c)
1209 {
1210 EXCLUSIVE2(&c, this);
1211 size_t r = 0;
1212 loop ( i, c.GetSize() )
1213 {
1214 if ( Add(c.At(i)) == INVALID_INDEX )
1215 {
1216 return INVALID_SIZE;
1217 }
1218 r++;
1219 }
1220 return r;
1221 }
1222
1232 virtual size_t CopyElements(size_t size, const TYP* P = NULL)
1233 {
1234 return SetElements(size, P);
1235 }
1236
1245 virtual size_t SetElements(size_t size, const TYP* P = NULL)
1246 {
1247 if ( ! RemoveAll() )
1248 {
1249 return INVALID_SIZE;
1250 }
1251 return AddElements(size, P);
1252 }
1253
1263 virtual size_t Copy(const IConstCollectionT<TYP>& c)
1264 {
1265 if ( this != &c )
1266 {
1267 EXCLUSIVE2(&c, this);
1268 size_t l = c.GetSize();
1269 if ( SetSize(l) )
1270 {
1271 loop ( i, l )
1272 {
1273 Set(i, c.At(i));
1274 }
1275 }
1276 return l;
1277 }
1278 return c.GetSize();
1279 }
1280
1290 virtual size_t Cull(const IChecker& checker, bool boIsReverse = false)
1291 {
1292 EXCLUSIVE(this);
1293 size_t r = 0;
1294 if ( ! IsEmpty() )
1295 {
1296 loop_dn ( i, GetSize() )
1297 {
1298 if ( ! checker.IsValid(At(i)) ^ boIsReverse )
1299 {
1300 if ( ! Remove(i) )
1301 {
1302 return INVALID_SIZE;
1303 }
1304 r++;
1305 }
1306 }
1307 }
1308 return r;
1309 }
1310
1319 virtual bool SetSize(size_t size)
1320 {
1321 EXCLUSIVE(this);
1322 if ( size == 0 )
1323 {
1324 return RemoveAll();
1325 }
1326 else
1327 {
1328 size_t nowSize = GetSize();
1329 if ( nowSize > size )
1330 {
1331 //今より小さく
1332 for ( size_t i = nowSize - 1; i >= size; i-- )
1333 {
1334 if ( ! Remove(i) )
1335 {
1336 return false;
1337 }
1338 }
1339 }
1340 else if ( nowSize < size )
1341 {
1342 //今より大きく
1343 size_t l = (size - nowSize);
1344 return AddElements(l) == l;
1345 }
1346 }
1347 return true;
1348 }
1349
1355 virtual void Deserialize(const IDeserializer& ds)
1356 {
1357 EXCLUSIVE(this);
1358 size_t l1, l2;
1359 ds >> l1 >> l2;
1360 if ( l1 != l2 )
1361 {
1362 throw CInvalidParamException();
1363 }
1364 RemoveAll();
1365 TYP t;
1366 loop ( i, l1 )
1367 {
1368 ds >> t;
1369 Add(t);
1370 }
1371 }
1372
1385 bool Sort(const IComparatorT<TYP>& comparator, bool boIsReverse = false, bool boIsBubble = false)
1386 {
1387 EXCLUSIVE(this);
1388 CSort sort;
1389 bool boRc = true;
1390 try
1391 {
1392 if ( boIsBubble )
1393 {
1394 sort.BubbleSort(*this, comparator, boIsReverse);
1395 }
1396 else
1397 {
1398 sort.QuickSort(*this, comparator, boIsReverse);
1399 }
1400 }
1401 catch(CTnbException& e)
1402 {
1403 e.OnCatch();
1404 boRc = false;
1405 }
1406 return boRc;
1407 }
1408
1420 bool Sort(bool boIsReverse = false, bool boIsBubble = false)
1421 {
1422 return Sort(IComparatorT<TYP>::GetDefault(), boIsReverse, boIsBubble);
1423 }
1424
1434 bool Shuffle(int iDepth = 1)
1435 {
1436 EXCLUSIVE(this);
1437 bool boRc = true;
1438 try
1439 {
1440 size_t size = GetSize();
1441 if ( size > 1 )
1442 {
1443 loop ( j, iDepth )
1444 {
1445 loop ( i, size )
1446 {
1447 size_t r = rand() % size;
1448 if ( r == i )
1449 {
1450 r = rand() % size;
1451 }
1452 Swap(i, r);
1453 }
1454 }
1455 }
1456 }
1457 catch(CTnbException& e)
1458 {
1459 e.OnCatch();
1460 boRc = false;
1461 }
1462 return boRc;
1463 }
1464
1472 size_t TrimBottom(const TYP& t, const IComparatorT<TYP>& comparator)
1473 {
1474 EXCLUSIVE(this);
1475 size_t len = GetSize();
1476 if ( len > 0 )
1477 {
1478 loop ( i, len )
1479 {
1480 if ( ! comparator.IsEqualTo(At(len - 1 - i), t) )
1481 {
1482 SetSize(len - i);
1483 return len - i;
1484 }
1485 }
1486 RemoveAll();
1487 return 0;
1488 }
1489 return len;
1490 }
1491
1498 size_t TrimBottom(const TYP& t)
1499 {
1501 }
1502};
1503
1504
1505
1533template<typename TYP>
1535{
1536 DEFSUPER(ICollectionT<TYP>);
1537protected:
1538
1545 virtual const TYP* m_GetConstPointer(INDEX index) const = 0;
1546
1553 virtual TYP* m_GetPointer(INDEX index) = 0;
1554
1555public:
1556
1558 ICollectionMidT(void) : _super()
1559 {
1560 }
1561
1570 virtual TYP Get(INDEX index) const
1571 {
1572 const TYP* P = m_GetConstPointer(index);
1573 if ( P != NULL )
1574 {
1575 return *P;
1576 }
1578 }
1579
1588 virtual const TYP& At(INDEX index) const
1589 {
1590 const TYP* P = m_GetConstPointer(index);
1591 if ( P != NULL )
1592 {
1593 return *P;
1594 }
1596 }
1597
1607 virtual TYP& Ref(INDEX index)
1608 {
1609 TYP* P = m_GetPointer(index);
1610 if ( P == NULL )
1611 {
1612 throw CNotSupportException();
1613 }
1614 return *P;
1615 }
1616
1626 virtual bool Set(INDEX index, const TYP& t)
1627 {
1628 TYP* P = m_GetPointer(index);
1629 if ( P == NULL )
1630 {
1631 return false;
1632 }
1633 *P = t;
1634 return true;
1635 }
1636
1645 const TYP& operator[](INDEX index) const
1646 {
1647 return At(index);
1648 }
1649
1658 TYP& operator[](INDEX index)
1659 {
1660 TYP* P = m_GetPointer(index);
1661 if ( P != NULL )
1662 {
1663 return *P;
1664 }
1666 }
1667};
1668
1669
1670
1687template<typename TYP>
1689{
1691 virtual ~ISequenceCollectionT(void) {}
1692
1700 virtual const TYP* ReferBuffer(void) const = 0;
1701
1707 virtual size_t GetSize(void) const = 0;
1708};
1709
1710
1711
1712namespace HASH
1713{
1720 template<typename TYP>
1721 inline DWORD CalcHash(const IConstCollectionT<TYP>& c)
1722 {
1723 EXCLUSIVE(&c);
1724 DWORD dwRc = 0;
1725 loop ( i, c.GetSize() )
1726 {
1727 dwRc += c.At(i) << (i & 0x0F);
1728 }
1729 return dwRc;
1730 }
1731};
1732
1733
1734
1735}; // TNB
1736
コンパレータ関係のヘッダ
#define loop_dn(VAR, CNT)
loop構文.
Definition: TnbDef.h:355
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
例外状態管理関係のヘッダ
シリアライザー関係のヘッダ
文字列管理関係のヘッダ
同期処理関係のヘッダ
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
INDEX範囲外例外
Definition: TnbException.h:81
パラメータ不正例外
Definition: TnbException.h:159
サポート外例外
Definition: TnbException.h:185
例外ベースクラス
Definition: TnbException.h:36
void OnCatch(void) const
[表示] 内容表示
Definition: TnbException.h:69
情報群管理操作インターフェース拡張テンプレート
virtual TYP Get(INDEX index) const
[取得] 要素の取得.
virtual const TYP * m_GetConstPointer(INDEX index) const =0
[取得] 要素アドレス取得
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
const TYP & operator[](INDEX index) const
[取得] 要素の参照取得.
virtual TYP & Ref(INDEX index)
[取得] 要素の参照取得.
ICollectionMidT(void)
コンストラクタ
TYP & operator[](INDEX index)
[取得] 要素の参照取得.
virtual TYP * m_GetPointer(INDEX index)=0
[取得] 要素アドレス取得
virtual bool Set(INDEX index, const TYP &t)
[設定] 要素の設定.
情報群管理操作インターフェースのソート処理クラス
CSort(void)
コンストラクタ
void QuickSort(ICollectionT< TYP > &_collect, const IComparatorT< TYP > &comp, bool boIsReverse=false)
[操作] クイックソート.
void BubbleSort(ICollectionT< TYP > &_collect, const IComparatorT< TYP > &comp, bool boIsReverse=false)
[操作] バブルソート.
インプットイテレータ.
ランダムアクセスイテレータ.
#define EXCLUSIVE2(CLS1, CLS2)
簡易排他ツイン制御マクロ.
Definition: TnbSync.h:820
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
Definition: TnbSync.h:788
CValueAcceleration operator*(const CValueSpeed &s, const CValueFrequency &f)
[計算] 掛算 (加速度 = 速度 × 周波数) .
bool IsInRange(INDEX value, size_t size)
[確認] 範囲チェック.
Definition: TnbDef.h:421
DWORD CalcHash(const IConstCollectionT< TYP > &c)
COLLECT [HASH] ハッシュ値計算.
TNB Library
Definition: TnbDoxyTitle.txt:2
情報群管理操作インターフェーステンプレート
virtual void Swap(INDEX index1, INDEX index2)
[設定] 要素の入れ替え.
ICollectionT(void)
コンストラクタ
const_iterator end(void) const
[反復] 最後const_iterator.
virtual size_t Cull(const IChecker &checker, bool boIsReverse=false)
[削除] 間引き.
virtual void Deserialize(const IDeserializer &ds)
[処理] デシリアライズ
virtual bool Insert(INDEX index, const TYP &t)
[追加] 要素一つ挿入.
virtual size_t RemoveElements(INDEX index, size_t size=0)
[削除] 要素削除.
bool SetEx(INDEX index, const TYP &t)
[設定] 要素の設定.
iterator begin(void)
[反復] 先頭iterator.
virtual bool Set(INDEX index, const TYP &t)=0
[設定] 要素の設定.
bool Shuffle(int iDepth=1)
[操作] シャッフル.
virtual bool InsertEx(INDEX index, const TYP &t)
[追加] 要素一つ挿入.
virtual bool Remove(INDEX index)=0
[削除] 要素一つ削除.
virtual TYP & Ref(INDEX index)=0
[取得] 要素の参照取得.
virtual INDEX Add(const TYP &t)=0
[追加] 要素一つ追加.
virtual bool SetSize(size_t size)
[操作] サイズ指定
size_t TrimBottom(const TYP &t)
[処理] 末尾トリム.
bool Sort(const IComparatorT< TYP > &comparator, bool boIsReverse=false, bool boIsBubble=false)
[操作] ソート.
INDEX AddEx(const TYP &t)
[追加] 要素一つ追加.
bool Sort(bool boIsReverse=false, bool boIsBubble=false)
[操作] ソート.
virtual bool RemoveAll(void)
[削除] 全要素削除 .
virtual size_t AddElements(size_t size, const TYP *P=NULL)
[追加] 複数要素追加.
virtual size_t Copy(const IConstCollectionT< TYP > &c)
[設定] コピー.
virtual ~ICollectionT(void)
デストラクタ
bool RemoveEx(INDEX index)
[削除] 要素一つ削除.
void push_back(const TYP &t)
[反復] 最後に追加
const_iterator begin(void) const
[反復] 先頭const_iterator.
virtual size_t Append(const IConstCollectionT< TYP > &c)
[追加] 追加.
virtual size_t CopyElements(size_t size, const TYP *P=NULL)
[設定] コピー.
size_t TrimBottom(const TYP &t, const IComparatorT< TYP > &comparator)
[処理] 末尾トリム.
virtual size_t SetElements(size_t size, const TYP *P=NULL)
[設定] 複数要素設定.
iterator end(void)
[反復] 最後iterator.
ICollectionT & operator=(const ICollectionT &other)
[代入] コピーオペレータ.
比較機能インターフェース.
Definition: TnbComparable.h:54
コンパレータインターフェース.
Definition: TnbComparator.h:46
virtual INT_PTR CompareTo(const TYP &t1, const TYP &t2) const =0
[確認] 比較
static IComparatorT & GetDefault(void)
[作成] 汎用コンパレータ取得.
virtual bool IsEqualTo(const TYP &t1, const TYP &t2) const
[確認] 比較
Definition: TnbComparator.h:67
情報群管理インターフェースのチェッカーインターフェース.
virtual bool IsValid(const TYP &T) const =0
[確認] チェック
virtual ~IChecker(void)
デストラクタ
情報群管理インターフェーステンプレート
INDEX FindMin(const IComparatorT< TYP > &comparator, const TYP &def) const
[検索] 要素の最小検索.
virtual size_t GetElements(size_t size, TYP *_P, INDEX offset=0) const
[取得] 複数要素取り出し.
const_iterator end(void) const
[反復] 最後const_iterator.
INDEX Find(const TYP &t, INDEX startIndex=0) const
[検索] 指定要素の検索.
virtual void Deserialize(const IDeserializer &ds)
[処理] デシリアライズ
virtual TYP Get(INDEX index) const
[取得] 要素の取得.
bool IsEmpty(void) const
[確認] 要素の有無確認.
TYP GetEx(INDEX index) const
[取得] 要素の取得.
INDEX Find(const IConstCollectionT< TYP > &t, INDEX startIndex=0) const
[検索] 指定配列の検索.
virtual const TYP & At(INDEX index) const =0
[取得] 要素の参照取得.
INDEX Find(const IConstCollectionT< TYP > &t, const IComparatorT< TYP > &comparator, INDEX startIndex=0) const
[検索] 指定配列の検索.
INDEX Find(const TYP &t, const IComparatorT< TYP > &comparator, INDEX startIndex=0) const
[検索] 指定要素の検索.
INDEX Find(const IChecker &checker, INDEX startIndex=0, bool boIsReverse=false) const
[検索] 条件一致要素の検索.
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.
virtual INT_PTR Compare(const IConstCollectionT< TYP > &c) const
[確認] 比較.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.
INDEX FindMax(const IComparatorT< TYP > &comparator, const TYP &def) const
[検索] 要素の最大検索.
virtual void Serialize(ISerializer &_sr) const
[処理] シリアライズ
const_iterator begin(void) const
[反復] 先頭const_iterator.
IConstCollectionT(void)
コンストラクタ
INDEX FindMax(const TYP &def) const
[検索] 要素の最大検索.
INDEX FindMin(const TYP &def) const
[検索] 要素の最小検索.
virtual bool IsEqual(const IConstCollectionT< TYP > &c) const
[確認] 比較.
デシリアライザーインターフェースクラス.
連続メモリ配置型情報群管理インターフェーステンプレート
virtual ~ISequenceCollectionT(void)
デストラクタ
virtual const TYP * ReferBuffer(void) const =0
[取得] データアドレス取得.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.
シリアライザブルインターフェース.
Definition: TnbSerializer.h:47
シリアライザーインターフェースクラス.
排他基本インターフェース
Definition: TnbSync.h:40