Compare commits

..

416 Commits

Author SHA1 Message Date
/* User with id == 0 is a fake user from git author */ sauron
ff02649ca3 commit 2025-10-22 19:59 add ZtCObjtChain::SetDataRecur() ZCppMain/ZMainHead.H 2025-10-22 19:59:59 +09:00
/* User with id == 0 is a fake user from git author */ sauron
72cf94128d commit 2025-10-21 21:45 edit a bit ZCppMain/ZMainHead.H 2025-10-21 21:45:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
437b8a2e16 commit 2025-10-21 21:27 edit a bit ZCppMain/ZMainHead.H 2025-10-21 21:28:18 +09:00
/* User with id == 0 is a fake user from git author */ sauron
dbc483330b commit 2025-10-21 21:06 add ZtCObjtChain<TDataNow, ZCEmpty>::TypeChainLast : ZCppMain/ZMainHead.H 2025-10-21 21:06:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
835f80f179 commit 2025-10-21 19:48 add template<typename TTypeChainNext> typename> typename TTypeChainNext::TypeData& GetData() GetData() : ZCppMain/ZMainHead.H 2025-10-21 19:48:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5cd24d6e94 commit 2025-10-20 20:35 edit a bit ZCppMain/ZtCMainChars.H 2025-10-20 20:35:11 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3f4e40147b commit 2025-10-20 15:08 edit a bit ZCppMain/ZMainHead.H 2025-10-20 15:08:59 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f45137e8f3 commit 2025-10-20 13:03 ZtCTypeSelfLink => ZtCTypeDataRiing, add ZtCTypeDataRingS : ZCppMain/ZMainHead.H 2025-10-20 13:03:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
882e4f6278 commit 2025-10-20 11:01 edit a bit ZCppMain/ZMainHead.H 2025-10-20 11:01:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c30a14c0c9 commit 2025-10-20 01:01 edit a bit ZCppMain/ZMainHead.H 2025-10-20 01:01:36 +09:00
/* User with id == 0 is a fake user from git author */ sauron
cd4ab32709 commit 2025-10-20 00:32 edit a bit ZCppMain/ZMainHead.H 2025-10-20 00:33:12 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1ffbb95e80 commit 2025-10-20 00:08 add ZtCObjtChain::operator()() : ZCppMain/ZMainHead.H 2025-10-20 00:08:54 +09:00
/* User with id == 0 is a fake user from git author */ sauron
56960ed38f commit 2025-10-19 19:47 edit a bit ZCppMain/ZMainHead.H 2025-10-19 19:47:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5e34c2f5cc commit 2025-10-19 19:44 edit a bit ZCppMain/ZMainHead.H 2025-10-19 19:44:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f451a6a1e1 commit 2025-10-19 19:13 edit a bit ZCppMain/ZMainHead.H 2025-10-19 19:13:44 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7ff1933fb0 commit 2025-10-19 19:03 add ZCtDataRing::size_all() : ZCppMain/ZMainHead.H 2025-10-19 19:03:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d360408365 commit 2025-10-19 16:39 edit a bit in ZCppMain/ZMainHead.H 2025-10-19 16:39:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2f8fae30a4 commit 2025-10-19 16:30 edit a bit in ZCppMain/ZMainHead.H 2025-10-19 16:30:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6d4556236e commit 2025-10-19 16:28 add ZCtDataRing::IterHead() & IterTail() etc : ZCppMain/ZMainHead.H 2025-10-19 16:29:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d4614dcb09 commit 2025-10-19 13:13 edit a bit in ZCppMain/ZMainHead.H 2025-10-19 13:14:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ad8e294902 commit 2025-10-19 13:00 add ZCtDataRing in ZCppMain/ZMainHead.H 2025-10-19 13:00:37 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3e97046031 commit 2025-10-18 21:36 edit a bit ZCppMain/ZMainHead.H 2025-10-18 21:36:36 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f8b9887734 commit 2025-10-18 21:31 edit a bit ZCppMain/ZMainHead.H 2025-10-18 21:32:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
de6056ab27 commit 2025-10-18 19:06 edit a bit ZCppMain/ZMainHead.H 2025-10-18 19:06:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8266f0a6a3 commit 2025-10-18 19:03 edit a bit ZCppMain/ZMainHead.H 2025-10-18 19:03:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
af8fec15eb commit 2025-10-18 17:32 edit a bit ZCppMain/ZMainHead.H 2025-10-18 17:32:20 +09:00
/* User with id == 0 is a fake user from git author */ sauron
756b48ae36 commit 2025-10-18 17:29 edit a bit ZCppMainTest/c++_test_006.cpp 2025-10-18 17:29:53 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b5f71d95d2 commit 2025-10-18 16:33 add ZtCMiniValChain : ZCppMain/ZMainHead.H 2025-10-18 16:33:51 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ea178aa11a commit 2025-10-18 14:57 edit a bit ZCppMain/ZtCMainChars.H 2025-10-18 14:57:42 +09:00
/* User with id == 0 is a fake user from git author */ sauron
64630b4abd commit 2025-10-18 12:03 edit a bit ZCppMain/ZtCMainChars.H 2025-10-18 12:03:14 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8eeafdd0d8 commit 2025-10-18 12:02 edit a bit ZCppMain/ZtCMainChars.H 2025-10-18 12:02:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9277c95336 commit 2025-10-18 11:58 edit a bit ZCppMain/ZtCMainChars.H 2025-10-18 11:59:02 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ec687cc4e9 commit 2025-10-18 11:40 edit a bit ZCppMain/ZtCMainChars.H 2025-10-18 11:40:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d21d5b0263 commit 2025-10-18 11:37 edit a bit ZCppMain/ZtCMainChars.H 2025-10-18 11:37:18 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e1b7aeed21 commit 2025-10-18 10:56 delete class template in ZNsTmplChain : ZCppMain/ZMainHead.H 2025-10-18 10:56:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0bae715de7 commit 2025-10-18 10:29 edit a bit ZCppMain/ZMainHead.H 2025-10-18 10:29:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
849cab2dbb commit 2025-10-18 10:27 edit a bit ZCppMain/ZMainHead.H 2025-10-18 10:27:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4113a0a6f1 commit 2025-10-18 10:13 ZtCObjtChainEx => ZtCMiniValChain : ZCppMain/ZMainHead.H 2025-10-18 10:13:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e57cce5a28 commit 2025-10-18 02:12 edit a bit ZCppMain/ZMainHead.H 2025-10-18 02:12:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
342dc34096 commit 2025-10-18 01:55 ZtCObjtChain after ZtCObjtChain => ZtCObjtChainEx ZCppMain/ZMainHead.H 2025-10-18 01:55:54 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1d3ee05571 commit 2025-10-18 00:19 add ZCppMain/ZMainHead.H 2025-10-18 00:19:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
29aa6225b4 commit 2025-10-18 00:09 add ZCppMainTest/c++_test_006.cpp 2025-10-18 00:09:43 +09:00
/* User with id == 0 is a fake user from git author */ sauron
31a6d46726 commit 2025-10-18 00:09 add ZtCObjtChain in ZCppMain/ZMainHead.H 2025-10-18 00:09:09 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bea5561dc4 commit 2025-10-17 21:28 edit a bit ZCppMain/ZMainHead.H 2025-10-17 21:28:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b92b3e2107 commit 2025-10-17 21:23 ZftIterTmplChainTail() => ZftIterTypeChainTail() : ZCppMain/ZMainHead.H 2025-10-17 21:23:24 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c52ddbed83 commit 2025-10-17 21:06 edit a bit ZCppMain/ZMainHead.H 2025-10-17 21:06:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
58a38e75ab commit 2025-10-17 21:03 edit a bit ZCppMain/ZMainHead.H 2025-10-17 21:03:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e7692ddfd1 commit 2025-10-17 20:54 add class ZtCCheckRef<TType&> : ZCppMain/ZMainHead.H 2025-10-17 20:55:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0e4ae40622 commit 2025-10-17 19:13 add IterHead(TViewChain AO_CView, TTypeHelp AO_TypeHelp) & IterTail() in ZtCTypeChain : ZCppMain/ZMainHead.H 2025-10-17 19:13:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9c746559f4 commit 2025-10-17 16:45 add ZtCTypeChain::Size() : ZCppMain/ZMainHead.H 2025-10-17 16:45:20 +09:00
/* User with id == 0 is a fake user from git author */ sauron
536fec9db0 commit 2025-10-17 13:01 edit a bit ZCppMain/ZMainHead.H 2025-10-17 13:01:20 +09:00
/* User with id == 0 is a fake user from git author */ sauron
16bfabc6fe commit 2025-10-17 12:28 edit a bit ZCppMain/ZMainHead.H 2025-10-17 12:28:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5e550363ee commit 2025-10-17 12:26 add ZtCTypeChain in ZCppMain/ZMainHead.H 2025-10-17 12:26:22 +09:00
/* User with id == 0 is a fake user from git author */ sauron
fcb513d4ac commit 2025-10-17 01:04 edit a bit ZCppMain/ZMainHead.H 2025-10-17 01:04:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b4871d1b07 commit 2025-10-16 23:36 edit a bit ZCppMain/ZMainHead.H 2025-10-16 23:36:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5d337e3356 commit 2025-10-16 23:21 edit a bit ZCppMain/ZMainHead.H 2025-10-16 23:21:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
40debb62a6 commit 2025-10-16 23:16 edit a bit ZCppMain/ZMainHead.H 2025-10-16 23:16:42 +09:00
/* User with id == 0 is a fake user from git author */ sauron
70b7d85fac commit 2025-10-16 15:03 edit a bit ZCppMain/ZtCLinkList.H 2025-10-16 15:03:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c96244dd29 commit 2025-10-16 14:38 edit a bit ZCppMain/ZtCLinkList.H 2025-10-16 14:38:59 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6fe3bbff18 commit 2025-10-16 14:31 edit a bit ZCppMain/ZMainHead.H 2025-10-16 14:31:22 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a0438aebc6 commit 2025-10-16 14:04 edit a bit ZCppMain/ZMainHead.H 2025-10-16 14:05:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
eb35ccb059 commit 2025-10-16 10:30 edit a bit ZCppMainTest/ZtCBaseList_000.cpp 2025-10-16 10:30:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
84299e59a5 commit 2025-10-16 10:16 add skipping contdition code in list, SendRangeIn() => MoveRangeIn() : ZCppMain/ZtCLinkList.H etc 2025-10-16 10:17:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8cc267707f commit 2025-10-16 02:05 edit a bit ZCppMain/ZtCLinkList.H 2025-10-16 02:06:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4838bb74ef commit 2025-10-16 01:58 add ZtCLinkList::MoveLinkIn() & MoveRangeIn() : ZCppMain/ZtCLinkList.H 2025-10-16 01:58:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
023e1d8a0a commit 2025-10-16 01:04 add ZtCBaseList::MoveLinkIn() & MoveRangeIn() ZCppMain/ZMainHead.H 2025-10-16 01:04:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1e88508936 commit 2025-10-15 18:54 edit a bit ZCppMain/ZMainHead.H 2025-10-15 18:54:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bf3aa88ec1 commit 2025-10-15 18:44 edit a bit ZCppMainTest/ZtCBaseList_000.cpp 2025-10-15 18:45:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
908303d235 commit 2025-10-15 16:26 edit a bit ZCppMain/ZMainHead.H 2025-10-15 16:26:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
82a2c15364 commit 2025-10-15 16:25 edit a bit ZCppMain/ZMainHead.H 2025-10-15 16:25:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2ce107ed19 commit 2025-10-15 16:19 edit a bit ZCppMain/ZMainHead.H 2025-10-15 16:19:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1f05458724 commit 2025-10-15 16:08 edit a bit ZCppMain/ZMainHead.H 2025-10-15 16:08:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d85191b2d0 commit 2025-10-15 15:49 edit a bit ZCppMain/ZtCArray.H 2025-10-15 15:49:47 +09:00
/* User with id == 0 is a fake user from git author */ sauron
11acb59e39 commit 2025-10-15 15:46 edit a bit ZCppMain/ZtCSimList.H 2025-10-15 15:46:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3c12d055a2 commit 2025-10-15 15:43 delete GetDataInIter() in ZtCBaseList ZCppMain/ZMainHead.H 2025-10-15 15:43:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3e8cbd319e commit 2025-10-15 15:18 edit a bit ZCppMain/ZtCLinkList.H 2025-10-15 15:18:53 +09:00
/* User with id == 0 is a fake user from git author */ sauron
721d26ca5e commit 2025-10-15 14:53 edit a bit ZCppMain/ZtCLinkList.H 2025-10-15 14:53:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2b4596b065 commit 2025-10-15 14:13 TypeDataMaIN => TypeDataCore : ZCppMain/ZtCLinkList.H 2025-10-15 14:13:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0fb0270a53 commit 2025-10-15 13:18 edit a bit ZCppMain/ZtCLinkList.H 2025-10-15 13:18:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4147ea51d6 commit 2025-10-15 13:06 edit a bit ZCppMain/ZtCLinkList.H 2025-10-15 13:06:29 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a1b89271b7 commit 2025-10-15 12:54 add iterator and func : ZCppMain/ZtCLinkList.H 2025-10-15 12:54:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4c6cde5d59 commit 2025-10-15 10:52 edit a bit ZCppMain/ZMainHead.H 2025-10-15 10:52:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2f364e66a3 commit 2025-10-15 10:10 ZCppMain/ZMainHead.H 2025-10-15 10:00:43 +09:00
/* User with id == 0 is a fake user from git author */ sauron
600ac6ef1e commit 2025-10-15 09:49 edit a bit ZCppMain/ZtCSimList.H 2025-10-15 09:50:00 +09:00
/* User with id == 0 is a fake user from git author */ sauron
aa59e460c5 commit 2025-10-15 09:46 edit a bit ZCppMain/ZMainHead.H 2025-10-15 09:46:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4a0a74936b commit 2025-10-15 09:43 edit a bit ZCppMain/ZMainHead.H 2025-10-15 09:43:57 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d47a651fd4 commit 2025-10-15 07:55 edit a bit ZCppMain/ZMainHead.H 2025-10-15 07:55:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
40157d7df2 commit 2025-10-15 07:50 edit a bit ZCppMain/ZMainHead.H 2025-10-15 07:51:04 +09:00
/* User with id == 0 is a fake user from git author */ sauron
dabd772aec commit 2025-10-15 07:46 edit a bit ZCppMain/ZMainHead.H 2025-10-15 07:46:31 +09:00
/* User with id == 0 is a fake user from git author */ sauron
92a8cb501d commit 2025-10-15 07:32 edit a bit ZCppMain/ZMainHead.H 2025-10-15 07:32:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e9944b6e0c commit 2025-10-15 07:18 edit a bit ZCppMain/ZMainHead.H 2025-10-15 07:18:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5762ec1cdf commit 2025-10-15 07:17 edit a bit ZCppMain/ZMainHead.H 2025-10-15 07:17:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5c9c870654 commit 2025-10-15 06:56 edit a bit ZCppMain/ZtCArray.H 2025-10-15 06:56:26 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6a873ea2c9 commit 2025-10-15 06:46 edit a bit ZCppMain/ZMainHead.H 2025-10-15 06:47:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ef441cca37 commit 2025-10-15 06:15 edit a bit ZCppMain/ZMainHead.H 2025-10-15 06:16:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
03556b203c commit 2025-10-14 21:33 edit a bit ZCppMain/ZtCObjList.H 2025-10-14 21:33:37 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2aab937785 commit 2025-10-14 21:19 _FOR_ITER_EASY_START_R0 => _FOR_ITER_EASY_START0_R : ZCppMain/ZMainHead.H 2025-10-14 21:19:54 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3e37580b98 commit 2025-10-14 21:11 add _FOR_ITER_EASY_START_R0/_FOR_ITER_EASY_CLOSE_R0 : ZCppMain/ZMainHead.H 2025-10-14 21:11:14 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b8d5ddb47f commit 2025-10-14 20:48 __for_i => __for_it : ZCppMain/ZMainHead.H 2025-10-14 20:48:59 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a0d9d31a21 commit 2025-10-14 20:42 edit a bit ZCppMain/ZtCStringEx.H 2025-10-14 20:42:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1774cfda3a commit 2025-10-14 20:23 add ZCppMainTest/ZtCLink_001.cpp 2025-10-14 20:23:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b325c152fd commit 2025-10-14 20:16 typedef const IterEasyID IterEasyIDc => typedef const IterEasy* IterEasyIDc : ZCppMain/ZMainHead.H 2025-10-14 20:16:14 +09:00
/* User with id == 0 is a fake user from git author */ sauron
696b5744b1 commit 2025-10-14 17:57 edit a bit ZCppMain/ZtCArray.H etc 2025-10-14 17:57:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7cca0d4d92 commit 2025-10-14 17:36 edit a bit ZCppMain/ZtCArray.H 2025-10-14 17:36:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
391adbaf11 commit 2025-10-14 17:35 edit a bit ZCppMain/ZtCArray.H 2025-10-14 17:35:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
69fb7a8c5c commit 2025-10-14 17:33 edit a bit ZCppMain/ZtCArray.H 2025-10-14 17:33:44 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d66bdb4cea commit 2025-10-14 17:32 edit a bit ZCppMain/ZtCArray.H 2025-10-14 17:33:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a578e3b244 commit 2025-10-14 17:26 TypeDataC& ItD(IterEasyIDc APPI_IterEasyID) => TypeDataC& ItD(IterEasyIDc& APPI_IterEasyID ) in ZCppMain/ZMainHead.H etc 2025-10-14 17:26:48 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2e0356fe09 commit 2025-10-14 16:56 edit a bit ZCppMain/ZtCArray.H 2025-10-14 16:57:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
342446fdce commit 2025-10-14 16:38 add _FOR_ITER_EASY_START0 와 _FOR_ITER_EASY_CLOSE0 in ZCppMain/ZMainHead.H 2025-10-14 16:38:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
15d8ee63ad commit 2025-10-14 14:53 edit a bit ZCppMain/ZMainHead.H 2025-10-14 14:53:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d73d9e4227 commit 2025-10-14 14:52 edit a bit ZCppMain/ZMainHead.H 2025-10-14 14:52:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3b987e2a6e commit 2025-10-14 10:43 edit a bit ZCppMain/ZMainHead.H 2025-10-14 10:43:44 +09:00
/* User with id == 0 is a fake user from git author */ sauron
131e638f8b commit 2025-10-14 10:39 edit a bit ZCppMain/ZMainHead.H 2025-10-14 10:39:29 +09:00
/* User with id == 0 is a fake user from git author */ sauron
659b0a19cb commit 2025-10-14 10:19 edit a bit ZCppMain/ZtCArray 2025-10-14 10:19:58 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c8523687fc commit 2025-10-14 09:39 add end() : ZCppMain/ZtCArray 2025-10-14 09:39:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
65a115ff6f commit 2025-10-14 09:11 ZCNodePointC => ZCNodePointN : ZCppMain/ZMainHead.H etc 2025-10-14 09:12:02 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4fc794e834 commit 2025-10-14 00:36 edit a bit ZCppMain/ZtCArray.H 2025-10-14 00:36:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
15f24be62d commit 2025-10-14 00:11 edit a bit ZCppMain/ZMainHead.H 2025-10-14 00:11:29 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5166bbe7cf commit 2025-10-13 23:36 edit a bit ZCppMain/ZMainHead.H 2025-10-13 23:37:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7ba366e151 commit 2025-10-13 22:51 edit a bit ZCppMain/ZMainHead.H 2025-10-13 22:52:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5b692812db commit 2025-10-13 22:41 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 22:42:11 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b1958e065a commit 2025-10-13 12:33 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 22:33:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6cc8cff669 commit 2025-10-13 19:20 bug fix in ZCNodePoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos) : ZCppMain/ZtCArray.H 2025-10-13 19:20:18 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0e25b260de commit 2025-10-13 19:12 mr_CurrList => to first member in ZCNodePoint : ZCppMain/ZMainHead.H 2025-10-13 19:12:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7a3b57f135 commit 2025-10-13 19:00 ZCLinkPoint => ZCNodePoint : ZCppMain/ZtCObjList.H 2025-10-13 19:00:57 +09:00
/* User with id == 0 is a fake user from git author */ sauron
388b87377a commit 2025-10-13 18:46 add TypeNode : ZCppMain/ZtCObjList.H 2025-10-13 18:46:22 +09:00
/* User with id == 0 is a fake user from git author */ sauron
093eb009d0 commit 2025-10-13 17:58 edit a bit ZCppMain/ZtCSimList.H 2025-10-13 17:58:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
18e0b5d9d4 commit 2025-10-13 17:08 edit a bit ZCppMain/ZtCSimList.H 2025-10-13 17:09:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1bdcf7597b commit 2025-10-13 16:55 edit a bit ZCppMain/ZMainHead.H 2025-10-13 16:55:58 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bfe282e141 commit 2025-10-13 16:45 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 16:45:58 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bdc450d1b3 commit 2025-10-13 16:42 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 16:42:22 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bb547bd4f7 commit 2025-10-13 16:38 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 16:38:08 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e34ad6cfb1 commit 2025-10-13 16:33 add ZCLinkPoint for iterator ZCppMain/ZtCSimList.H 2025-10-13 16:33:44 +09:00
/* User with id == 0 is a fake user from git author */ sauron
df8ffa6024 commit 2025-10-13 14:56 edit a bit ZCppMain/ZMainHead.H 2025-10-13 14:56:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bf32afc1cd commit 2025-10-13 14:10 edit a bit ZCppMain/ZMainHead.H 2025-10-13 14:10:53 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3deb3d3106 commit 2025-10-13 13:35 edit a bit ZCppMain/ZMainHead.H 2025-10-13 13:36:01 +09:00
/* User with id == 0 is a fake user from git author */ sauron
50019e94cd commit 2025-10-13 13:31 add __for_iter & __for_iterc ZCppMain/ZMainHead.H 2025-10-13 13:31:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3629380b37 commit 2025-10-13 12:28 add ZCLinkPointC ZCppMain/ZtCObjList.H 2025-10-13 12:28:24 +09:00
/* User with id == 0 is a fake user from git author */ sauron
870b50066d commit 2025-10-13 10:55 add ZCLinkPointEx ZCppMain/ZtCObjList.H 2025-10-13 10:55:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
17e25f8f5d commit 2025-10-13 01:17 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 01:17:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
033dd35cfc commit 2025-10-13 13:08 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 01:08:48 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e0b357be37 commit 2025-10-13 00:27 edit a bit ZCppMain/ZtCObjList.H 2025-10-13 00:27:26 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0c52cb85af commit 2025-10-12 23:40 edit a bit ZCppMain/ZtCStringStd.H 2025-10-12 23:40:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7b3605a929 commit 2025-10-12 23:29 edit a bit ZCppMain/ZtCObjList.H 2025-10-12 23:29:43 +09:00
/* User with id == 0 is a fake user from git author */ sauron
fa52fe1027 commit 2025-10-12 23:10 edit a bit ZCppMain/ZtCObjList.H 2025-10-12 23:10:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
cdca176fa9 commit 2025-10-12 19:32 edit a bit ZCppMain/ZtCObjList.H 2025-10-12 19:32:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a112a17f0d commit 2025-10-12 19:22 edit a bit ZCppMain/ZtCObjList.H 2025-10-12 19:22:12 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3c1aba34e9 commit 2025-10-12 19:18 edit a bit ZCppMain/ZtCObjList.H 2025-10-12 19:18:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
29156b0dd0 commit 2025-10-12 19:15 edit a bit ZCppMain/ZtCObjList.H 2025-10-12 19:15:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ae76c4626c commit 2025-10-12 19:12 edit a bit ZCppMain/ZMainHead.H 2025-10-12 19:12:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
66bec91d83 commit 2025-10-12 19:10 edit a bit ZCppMain/ZMainHead.H 2025-10-12 19:10:08 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f8e1e7f062 commit 2025-10-12 19:03 edit a bit ZCppMain/ZtCObjList.H 2025-10-12 19:03:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2c2b664d15 commit 2025-10-12 18:51 add iterator class in ZCppMain/ZtCObjList.H 2025-10-12 18:51:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3259618f1e commit 2025-10-12 08:03 is coding ZtCBaseList::CutLinkRangeIn() in ZCppMain/ZMainHead.H 2025-10-12 12:50:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
73d4d3daaf commit 2025-10-12 08:03 add MoveLinkAfter() etc in ZCppMain/ZtCLinkList.H 2025-10-12 08:03:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8f8ddb9460 commit 2025-10-12 00:58 add ZtCObjList::mp_TailLink : ZCppMain/ZtCObjList.H 2025-10-12 00:58:51 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a46afc5865 commit 2025-10-11 23:03 add ZtCBaseList::AddHeadDef() & AddTailDef() : ZCppMain/ZMainHead.H 2025-10-11 23:03:47 +09:00
/* User with id == 0 is a fake user from git author */ sauron
32ae22cc92 commit 2025-10-11 22:33 edit a bit ZCppMainTest/ZtCLinkList_001.cpp 2025-10-11 22:33:56 +09:00
/* User with id == 0 is a fake user from git author */ sauron
13b39d7b1b commit 2025-10-11 22:25 add ZtCLinkList::SwapLink() : ZCppMain/ZtCLinkList.H 2025-10-11 22:25:36 +09:00
/* User with id == 0 is a fake user from git author */ sauron
10eefea106 commit 2025-10-11 21:59 I64d => lld etc : ZCppMain/ZMainHead.H 2025-10-11 21:59:51 +09:00
/* User with id == 0 is a fake user from git author */ sauron
eb050b2c6c commit 2025-10-11 21:30 add ZtCBaseList::SendRangeIn() etc : ZCppMain/ZMainHead.H 2025-10-11 21:31:02 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3fbaa2f2a6 commit 2025-10-11 20:43 edit a bit ZCppMain/ZMainHead.H 2025-10-11 20:43:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ce958a5d74 commit 2025-10-11 20:41 add ZtCBaseList::MoveLinkAfter() etc : ZCppMain/ZMainHead.H 2025-10-11 20:41:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3c13880b49 commit 2025-10-11 19:39 edit a bit ZtCBaseList::SwapLink() : ZCppMain/ZMainHead.H 2025-10-11 19:39:26 +09:00
/* User with id == 0 is a fake user from git author */ sauron
aa5d67daf4 commit 2025-10-11 19:29 add ZtCBaseList::SwapLink() : ZCppMain/ZMainHead.H 2025-10-11 19:29:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a64b43b1e9 commit 2025-10-11 17:57 add ZtCBaseList::SwapLinkPrev() : ZCppMain/ZMainHead.H 2025-10-11 17:57:09 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8b226414b5 commit 2025-10-11 17:20 edit a bit ZCppMain/ZMainHead.H 2025-10-11 17:20:29 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e2ceca2cd8 commit 2025-10-11 17:16 edit a bit ZCppMain/ZMainHead.H 2025-10-11 17:16:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f10ea286c0 commit 2025-10-11 17:04 edit a bit ZCppMain/ZMainHeadEx.H 2025-10-11 17:04:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
15edbd80d8 commit 2025-10-11 16:51 add ZtCBaseList::SwapLinkNext() : ZCppMain/ZMainHead.H 2025-10-11 16:51:09 +09:00
/* User with id == 0 is a fake user from git author */ sauron
22f85f03a4 commit 2025-10-11 06:38 edit a bit ZtCCount ZCppMain/ZMainHead.H 2025-10-11 06:39:14 +09:00
/* User with id == 0 is a fake user from git author */ sauron
89e67d93e3 commit 2025-10-10 21:45 add ZtCCount ZCppMain/ZMainHead.H 2025-10-10 21:47:00 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e69cc7577f commit 2025-10-10 20:48 add ZCppMain/ZMainEnc.H 2025-10-10 20:48:24 +09:00
/* User with id == 0 is a fake user from git author */ sauron
016a45f648 commit 2025-10-10 20:45 edit by g++ option -Wall -Wno-unused-function -Wno-misleading-indentation 2025-10-10 20:45:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
467c46a5c3 commit 2025-10-10 14:58 edit a bit ZCppMainTest/ZtCLinkMoveList_000.cpp 2025-10-10 14:58:54 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ed5f8509cd commit 2025-10-10 14:54 edit a bit ZCppMainTest/ZtCLinkMoveList_000.cpp 2025-10-10 14:54:44 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9052a06bd5 commit 2025-10-10 14:49 add ZCLink::TypeLink : ZCppMain/ZMainHead.H 2025-10-10 14:49:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8924a85c85 commit 2025-10-10 14:45 edit a bit : ZCppMain/ZMainHead.H 2025-10-10 14:48:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
93080593d1 commit 2025-10-10 14:24 add TypeData& operator()() in ZtCObjOpt : ZCppMain/ZMainHead.H 2025-10-10 14:24:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5a23263a92 commit 2025-10-10 13:08 edit a bit ZCppMain/ZMainHeadEx.H 2025-10-10 13:09:04 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d220831b19 commit 2025-10-10 10:17 edit a bit ZCppMain/ZMainHeadEx.H 2025-10-10 10:17:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
787a410814 commit 2025-10-10 10:15 edit a bit ZCppMain/ZMainHeadEx.H 2025-10-10 10:15:29 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ca72233581 commit 2025-10-10 08:22 edit a bit ZCppMain/ZMainHeadEx.H 2025-10-10 08:22:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
561be0b68e commit 2025-10-10 08:16 edit a bit ZCppMain/ZMainHead.H 2025-10-10 08:16:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6f6fc16383 commit 2025-10-10 07:44 edit a bit ZCppMain/ZMainHead.H 2025-10-10 07:44:11 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0e3b50de91 commit 2025-10-10 07:21 edit a bit ZCppMain/ZMainHead.H 2025-10-10 07:21:49 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1cb53c967e commit 2025-10-10 07:03 edit a bit ZCppMain/ZMainHead.H 2025-10-10 07:03:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d988636881 commit 2025-10-10 06:44 edit a bit ZCppMain/ZMainHead.H 2025-10-10 06:44:57 +09:00
/* User with id == 0 is a fake user from git author */ sauron
278eeaefcf commit 2025-10-10 06:18 add ZftMakeStr(ARR_SaveCStr, ZTypIntUL AUL_Int) etc : ZCppMain/ZMainHead.H etc 2025-10-10 06:18:09 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7af3c774e4 commit 2025-10-09 17:32 edit a bit ZCppMain/ZMainHead.H 2025-10-10 05:33:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4d81b7168d commit 2025-10-09 23:07 edit a bit ZCppMain/ZtCStringStd.H 2025-10-09 23:07:26 +09:00
/* User with id == 0 is a fake user from git author */ sauron
60f2a25103 commit 2025-10-09 23:0 edit a bit ZCppMain/ZMainHead.H 2025-10-09 23:00:56 +09:00
/* User with id == 0 is a fake user from git author */ sauron
24fd8fea92 commit 2025-10-09 22:23 edit a bit ZCppMain/ZtCStringStd.H 2025-10-09 22:24:04 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7c5b93fa34 commit 2025-10-09 22:11 delete operator()(TypeLength AL_AddSize, TypeCharC* APC_Format, ...) : ZCppMain/ZtCStringEx.H 2025-10-09 22:11:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
30a1dc7ce5 commit 2025-10-09 22:02 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 22:02:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
860d383da6 commit 2025-10-09 21:53 add ZtCBoolStr : ZCppMain/ZMainHead.H 2025-10-09 21:54:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f5957100ea commit 2025-10-09 16:15 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 16:15:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
641ef996f9 commit 2025-10-09 16:12 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 16:12:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9545f7cf86 commit 2025-10-09 16:09 edit a bit ZCppMain/ZMainHead.H 2025-10-09 16:09:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
784f42dd40 commit 2025-10-09 16:06 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 16:07:04 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a38ad468e3 commit 2025-10-09 15:39 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 15:39:24 +09:00
/* User with id == 0 is a fake user from git author */ sauron
074ddf0c31 commit 2025-10-09 15:05 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 15:05:36 +09:00
/* User with id == 0 is a fake user from git author */ sauron
665b119c61 commit 2025-10-09 14:42 edit a bit ZCppMain/ZtCLinkList.H 2025-10-09 14:42:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
26b7770b61 commit 2025-10-09 14:31 add size_type in ZtCCharType : ZCppMain/ZtCStringEx.H etc 2025-10-09 14:31:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ab07905f68 commit 2025-10-09 13:41 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 13:41:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
299bbe8c51 commit 2025-10-09 13:35 edit a bit ZCppMain/ZtCStringStd.H 2025-10-09 13:36:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
22ce305df6 commit 2025-10-09 13:30 add ZtCCharType< ZtCStringStd<TTypeBaseStr> > : ZCppMain/ZtCStringStd.H 2025-10-09 13:30:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c31fd0b671 commit 2025-10-09 13:03 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 13:03:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0c0c7a8a0e commit 2025-10-09 12:58 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 12:58:11 +09:00
/* User with id == 0 is a fake user from git author */ sauron
eb890e4409 commit 2025-10-09 12:50 edit a bit ZCppMain/ZtCStringStd.H 2025-10-09 12:50:23 +09:00
/* User with id == 0 is a fake user from git author */ sauron
dd753905c8 commit 2025-10-09 12:44 edit a bit ZCppMain/ZMainHead.H 2025-10-09 12:44:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
22acd30baa commit 2025-10-09 12:43 add ZftTrimDecimalZero() ZCppMain/ZMainHead.H 2025-10-09 12:43:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b58796277d commit 2025-10-09 12:04 edit a bit ZCppMain/ZMainHead.H 2025-10-09 12:04:20 +09:00
/* User with id == 0 is a fake user from git author */ sauron
53125f9556 commit 2025-10-09 11:57 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 11:57:37 +09:00
/* User with id == 0 is a fake user from git author */ sauron
51ea4859d8 commit 2025-10-09 11:33 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 11:34:02 +09:00
/* User with id == 0 is a fake user from git author */ sauron
acfcd70fd7 commit 2025-10-09 11:28 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 11:28:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7331afaa8a commit 2025-10-09 11:26 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 11:26:56 +09:00
/* User with id == 0 is a fake user from git author */ sauron
143cda31c1 commit 2025-10-09 11:18 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 11:18:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
25abd43d79 commit 2025-10-09 11:12 edit a bit ZCppMain/ZMainHead.H 2025-10-09 11:12:56 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f32ab7e51b commit 2025-10-09 11:06 edit a bit ZCppMain/ZtCStringEx.H 2025-10-09 11:06:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f3e62b89ae commit 2025-10-09 11:02 edit a bit ZCppMain/ZMainHead.H 2025-10-09 11:02:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9d5af62781 commit 2025-10-09 11:00 int VI_Minus => TypeCharInt VI_Minus in ZCppMain/ZMainHead.H 2025-10-09 11:00:29 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ce0d364102 commit 2025-10-09 10:41 bug fix about wchar_t in ZCppMain/ZtCStringEx.H and add ZftAtoI(), ZftAotL() etc in ZCppMain/ZMainHead.H 2025-10-09 10:41:59 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f2a67017c8 commit 2025-10-09 02:24 Invalidate() => Invalid() : ZCppMain/ZtCStringEx.H 2025-10-09 02:24:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5a1dba2a38 commit 2025-10-09 01:41 bug fix of operator()(long), (long long) etc : ZCppMain/ZtCStringStd.H 2025-10-09 01:41:26 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0100406f3f commit 2025-10-08 23:58 edit a bit ZCppMain/ZtCStringStd.H 2025-10-08 23:56:45 +09:00
/* User with id == 0 is a fake user from git author */ sauron
554455133d commit 2025-10-08 23:54 edit a bit ZCppMain/ZtCStringStd.H 2025-10-08 23:54:12 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0d5e74665b commit 2025-10-08 23:48 ZCppMain/ZCStringStd.H -> ZCppMain/ZtCStringStd.H 2025-10-08 23:48:31 +09:00
/* User with id == 0 is a fake user from git author */ sauron
83e5de35bb commit 2025-10-08 23:07 add explicit before ZtCChars(TypeCharC* APC_TypeChar) : ZCppMain/ZMainHead.H 2025-10-08 23:07:22 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f85f685cdf commit 2025-10-08 23:03 add ZCSngtLogData& operator()(const ZCCharView& AR_View) : ZCppMain/ZMainHead.H 2025-10-08 23:03:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
76d4a4dbe1 commit 2025-10-08 22:56 edit a bit ZCppMain/ZtCStringEx.H 2025-10-08 22:56:58 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e2f3a662f3 commit 2025-10-08 22:54 edit a bit ZCppMain/ZtCStringEx.H 2025-10-08 22:54:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6974c13d16 commit 2025-10-08 20:43 add ZtCCharType in ZCppMain/ZMainHead.H 2025-10-08 22:43:47 +09:00
/* User with id == 0 is a fake user from git author */ sauron
443ebf4fd1 commit 2025-10-08 18:06 add ZftMakeStr(string& ARR_SaveCStr, const ZCCharView& AR_View) in ZCppMain/ZMainHead.H 2025-10-08 18:08:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1b7c4543c8 commit 2025-10-08 17:34 add ZCppMainTest/ZtCStringBase_000.cpp 2025-10-08 17:34:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
174320c264 commit 2025-10-08 10:00 edit a bit ZCppMain/ZMainHead.H 2025-10-08 10:00:23 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ff8b9667d9 commit 2025-10-08 09:48 add ZtCCharInt in ZCppMain/ZMainHead.H 2025-10-08 09:48:42 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6a5b24e62c commit 2025-10-08 08:19 edit a bit ZCppMain/ZCStringStd.H 2025-10-08 08:19:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c2e77c293d commit 2025-10-08 07:34 edit a bit ZCppMain/ZCStringStd.H 2025-10-08 07:34:58 +09:00
/* User with id == 0 is a fake user from git author */ sauron
aca56895ac commit 2025-10-08 07:31 edit a bit ZCppMain/ZCStringStd.H 2025-10-08 07:31:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
defcee30a4 commit 2025-10-08 07:19 edit a bit ZCppMain/ZtCObjList.H 2025-10-08 07:19:54 +09:00
/* User with id == 0 is a fake user from git author */ sauron
71f2c6fd54 commit 2025-10-08 07:14 edit a bit ZCppMain/ZtCLinkList.H 2025-10-08 07:14:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8d7745ac90 commit 2025-10-07 23:54 public ReplaceByPosList() => private ReplaceByPosList() ZCppMain/ZtCStringEx.H 2025-10-07 23:54:36 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9459bfa707 commit 2025-10-07 23:32 add 'const' after SendFreeOut() ZCppMain/ZtCLinkList.H 2025-10-07 23:32:26 +09:00
/* User with id == 0 is a fake user from git author */ sauron
12a482c098 commit 2025-10-07 22:38 edit a bit ZCppMain/ZtCObjList.H 2025-10-07 22:38:14 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d738a5fc2c commit 2025-10-07 22:34 delete <typedef ZtCArray ZCArray> in ZCppMain/ZtCArray.H 2025-10-07 22:34:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f35984ba84 commit 2025-10-07 22:28 edit a bit ZCppMain/ZtCArray.H 2025-10-07 22:28:56 +09:00
/* User with id == 0 is a fake user from git author */ sauron
dc84354861 commit 2025-10-07 21:54 edit a bit ZCppMain/ZMainHead.H 2025-10-07 21:54:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
855dc37af1 commit 2025-10-07 21:44 edit a bit ZCppMain/ZMainHead.H 2025-10-07 21:44:08 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3eec5443ab commit 2025-10-07 21:31 CopyThis() => CopyThis() const : ZCppMain/ZtCLinkList.H 2025-10-07 21:31:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
34b5db2822 commit 2025-10-07 20:53 edit a bit ZCppMain/ZtCLinkList.H 2025-10-07 20:52:22 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ec4928d67b commit 2025-10-07 19:47 edit a bit ZCppMainTest/ZtCBaseList_000.cpp 2025-10-07 19:47:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5f707743a4 commit 2025-10-07 19:40 add CopyThis() in ZCppMain/ZtCLinkList.H 2025-10-07 19:40:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3db771e9d9 commit 2025-10-07 18:26 add TypeMain in ZCppMain/ZtCLinkList.H 2025-10-07 18:27:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
cf870b5c9c commit 2025-10-07 15:50 edit a bit ZCppMain/ZMainHead.H 2025-10-07 15:50:30 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0aca9256c3 commit 2025-10-07 15:46 edit a bit ZCppMainTest/ZtCLinkMoveList_000.cpp 2025-10-07 15:46:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
59a8cb3708 commit 2025-10-07 15:40 edit a bit ZCppMain/ZtCLinkList.H 2025-10-07 15:40:40 +09:00
/* User with id == 0 is a fake user from git author */ sauron
27eb6b19a6 commit 2025-10-07 12:25 edit a bit ZCppMain/ZtCLinkList.H 2025-10-07 12:25:36 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d2e3ed17e6 commit 2025-10-07 12:10 edit a bit ZCppMain/ZMainHead.H 2025-10-07 12:10:37 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ec5b42a3b2 commit 2025-10-07 11:39 edit a bit ZCppMain/ZMainHead.H 2025-10-07 11:39:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e37523f671 commit 2025-10-07 11:36 edit a bit ZCppMain/ZMainHead.H 2025-10-07 11:36:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
19477b3c51 commit 2025-10-07 11:35 edit a bit ZCppMain/ZMainHead.H 2025-10-07 11:35:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1d4de6d8a7 commit 2025-10-07 11:29 edit a bit ZCppMain/ZMainHead.H 2025-10-07 11:29:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
027e8a9191 commit 2025-10-07 11:25 edit a bit ZCppMain/ZMainHead.H 2025-10-07 11:25:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7ee84c97aa commit 2025-10-07 11:21 edit a bit ZCppMain/ZtCObjLit.H 2025-10-07 11:22:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
83ad9c6bbf commit 2025-10-07 10:58 edit a bit ZCppMain/ZCProcess.H 2025-10-07 10:58:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
abf5c28c43 commit 2025-10-07 10:33 edit a bit ZCppMain/ZCProcess.H 2025-10-07 10:33:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ca5d86f1c6 commit 2025-10-07 10:22 edit a bit ZCppMain/ZtCLinkList.H 2025-10-07 10:22:47 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4eb0f8b724 commit 2025-10-07 10:17 edit a bit ZMainHead.H 2025-10-07 10:17:47 +09:00
/* User with id == 0 is a fake user from git author */ sauron
557c18cb3f commit 2025-10-07 10:01 add SendRangeOut() : ZCppMain/ZtCLinkList.H & ZtCObjList.H & ZMainHead.H etc 2025-10-07 10:11:48 +09:00
/* User with id == 0 is a fake user from git author */ sauron
138dc8f5ac commit 2025-10-06 23:51 edit a bit ZCppMain/ZtCLinkList.H 2025-10-06 23:51:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
38b7b5d085 commit 2025-10-06 23:46 edit a bit ZCppMain/ZtCLinkList.H 2025-10-06 23:46:47 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e13d8589f6 commit 2025-10-06 23:29 edit a bit ZCppMain/ZtCLinkList.H 2025-10-06 23:29:23 +09:00
/* User with id == 0 is a fake user from git author */ sauron
586c7aee43 commit 2025-10-06 23:26 edit ZCppMain/ZtCSimList.H 2025-10-06 23:26:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
cd4e81a89a commit 2025-10-06 22:53 add ZtCLinkMoveList : ZCppMain/ZtCLinkList.H 2025-10-06 22:53:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
998dee68b7 commit 2025-10-06 19:02 edit a bit ZCppMain/ZCProcess.H 2025-10-06 19:02:14 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f5cc30d65e commit 2025-10-06 15:25 edit a bit ZCppMain/ZtCLinkList.H 2025-10-06 15:25:20 +09:00
/* User with id == 0 is a fake user from git author */ sauron
80c7b85ec2 commit 2025-10-06 15:02 add Raw() in ZtCObjOpt : ZCppMain/ZMainHead.H 2025-10-06 15:03:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b5cf36be19 commit 2025-10-06 11:48 add GetLinkOpt() : ZCppMain/ZtCObjList.H 2025-10-06 11:48:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2272742d8f commit 2025-10-06 11:12 add Argument ZCLink* => ZCLink& in SendOutAfter() and SendOutBefore() : ZCppMain/ZtCObjList.H 2025-10-06 11:12:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
afe609c463 commit 2025-10-06 10:50 add SendRangeOutAfter() : ZCppMain/ZtCLinkList.H 2025-10-06 10:50:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b714f5579c commit 2025-10-06 08:36 add GetNextPrevPtr() in ZtCLink : ZCppMain/ZtCLinkList.H 2025-10-06 08:36:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d7ed80d1b0 commit 2025-10-05 22:47 edit SendOutAfter/SendOutBefore : ZCppMain/ZtCLinkList.H 2025-10-05 22:47:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
fdd6cdc718 commit 2025-10-05 22:37 add AddHead/AddTail(const ZCLink& AR_CLink) : ZCppMain/ZtCLinkList.H 2025-10-05 22:37:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c1d788a611 commit 2025-10-05 21:55 edit a bit ZtCObjNew : ZCppMain/ZMainHead.H 2025-10-05 21:55:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e1519765ba commit 2025-10-05 21:00 add operator bool() in ZtCObjOpt : ZCppMain/ZMainHead.H 2025-10-05 21:00:58 +09:00
/* User with id == 0 is a fake user from git author */ sauron
cd42f26bfd commit 2025-10-05 20:29 add ZCppMainTest/ZtCLinkList_000.cpp 2025-10-05 20:29:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8890462b1b commit 2025-10-05 15:31 edit CutLink() argument : ZCppMain/ZtCObjList.H 2025-10-05 15:31:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1cb7045ad8 commit 2025-10-05 14:36 edit ZCppMain/ZtCLinkList.H 2025-10-05 14:36:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8bfa731e4a commit 2025-10-05 12:14 edit GetLinkPtr() : ZCppMain/ZMainHead.H 2025-10-05 12:14:43 +09:00
/* User with id == 0 is a fake user from git author */ sauron
cb73c93360 commit 2025-10-05 12:02 add SendOutAfter() & SendOutBefore() etc ZCppMain/ZtCObjList.H 2025-10-05 12:02:59 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bc20d259f5 commit 2025-10-04 23:35 edit a bit ZCppMain/ZtCObjList.H 2025-10-04 23:35:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4c4ca8645e commit 2025-10-04 22:55 is writing ZCppMain/ZtCLinkList.H 2025-10-04 22:55:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
62e33805f0 commit 2025-10-04 21:02 edit a bit ZCppMain/ZCProcess_Linux.H 2025-10-04 21:02:11 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8b6ea4118f commit 2025-10-04 20:40 replace ZtCMutexCondDataVar with ZtCMutexCondVar : ZCppMain/ZCProcess.H 2025-10-04 20:40:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
939d1cc007 commit 2025-10-04 14:32 edit a bit ZCppMain/ZCProcess.H 2025-10-04 14:32:09 +09:00
/* User with id == 0 is a fake user from git author */ sauron
72f23aa514 commit 2025-10-04 14:10 rename GetObjtPtr() => GetUnitPtr() in ZtCObjUnitList : ZCppMain/ZtCObjList.H 2025-10-04 14:10:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8fc49ae8d9 commit 2025-10-04 13:38 edit a bit ZCppMain/ZtCObjList.H 2025-10-04 13:38:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6bb20fe2e2 commit 2025-10-04 13:26 edit a bit ZCppMain/ZtCObjList.H 2025-10-04 13:26:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c7d6ecd0c5 commit 2025-10-04 12:28 edit a bit ZCppMain/ZtCObjList.H 2025-10-04 12:31:23 +09:00
/* User with id == 0 is a fake user from git author */ sauron
75fa0f9e45 commit 2025-10-04 12:28 edit a bit ZCppMain/ZtCObjList.H 2025-10-04 12:28:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
989273ee18 commit 2025-10-04 12:08 add IterElemLink(TFunctor, TTypeHelp1, TTypeHelp2) : ZCppMain/ZMainHead.H 2025-10-04 12:08:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a721d4465a commit 2025-10-04 10:26 edit a bit ZCppMain/ZtCStringEx.H 2025-10-04 10:26:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
fe956958d2 commit 2025-10-04 10:23 edit a bit ZCppMain/ZtCStringEx.H 2025-10-04 10:23:42 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0fbd22b7b1 commit 2025-10-04 10:04 edit a bit ZCppMainTest/ZtCBaseList_000.cpp 2025-10-04 10:05:04 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3bfc5f8355 commit 2025-10-04 09:54 IterElemLink() in ZtCBaseList : ZCppMain/ZMainHead.H 2025-10-04 09:54:37 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4543f13d9f commit 2025-10-04 09:18 ZCLink& operator+, - in ZtCBaseList : ZCppMain/ZMainHead.H 2025-10-04 09:19:01 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f24913673b commit 2025-10-04 09:13 ZCLink& operator+, - : ZCppMain/ZtCObjList.H 2025-10-04 09:13:53 +09:00
/* User with id == 0 is a fake user from git author */ sauron
90bfd26996 commit 2025-10-04 09:05 add IterElemLink() : ZCppMain/ZtCObjList.H 2025-10-04 09:05:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
933bed0404 commit 2025-10-04 08:36 edit a bit ZtCObjUnitList : ZCppMain/ZtCObjList.H 2025-10-04 08:36:54 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e4b9bfffee commit 2025-10-04 08:35 edit a bit ZtCObjUnitList : ZCppMain/ZtCObjList.H 2025-10-04 08:35:16 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8bf6f3447f commit 2025-10-04 00:42 edit a bit ZtCObjUnitList : ZCppMain/ZtCObjList.H 2025-10-04 00:42:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d04d601a7c commit 2025-10-04 00:30 edit a bit ZtCObjUnitList : ZCppMain/ZtCObjList.H 2025-10-04 00:31:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
96c89eb68c commit 2025-10-03 23:54 edit a bit ZCppMainTest/ZtCBaseList_000.cpp 2025-10-03 23:54:53 +09:00
/* User with id == 0 is a fake user from git author */ sauron
66660bfb3c commit 2025-10-03 23:48 add capacity() & size_free() in ZtCBaseList : ZCppMain/ZMainHead.H 2025-10-03 23:48:53 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0b9828c06a commit 2025-10-03 19:35 rename mo_Data to mo_DataObjt : ZCppMain/ZMainHead.H 2025-10-03 19:36:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6d623437ff commit 2025-10-03 19:29 rename mo_Data to mo_DataObjt : ZCppMain/ZtCSimList.H 2025-10-03 19:30:00 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4273cea392 commit 2025-10-03 19:24 rename mo_Data to mo_DataObjt : ZCppMain/ZtCObjList.H 2025-10-03 19:24:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3c60af8369 commit 2025-10-03 19:16 edit a bit ZCppMain/ZMainHead.H 2025-10-03 19:16:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
49dfa7570d commit 2025-10-03 19:05 add ZEActRun : ZCppMain/ZMainHead.H 2025-10-03 19:10:33 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2c713b6ccb commit 2025-10-03 18:44 rename IterEleCutIf() to IterElemCut() : ZCppMain/ZtCSimList.H 2025-10-03 18:45:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
11f79dec3a commit 2025-10-03 17:30 add DeleteHead(TypeSize) & DeleteTail(TypeSize) in ZtCBaseList : ZCppMain/ZMainHead.H 2025-10-03 17:30:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
fee4f8aee1 commit 2025-10-03 16:01 delete ChangeCapacity() in ZtCBaseList : ZCppMain/ZMainHead.H 2025-10-03 16:01:49 +09:00
/* User with id == 0 is a fake user from git author */ sauron
97b1280b15 commit 2025-10-03 11:51 add ChangeCapacity() in ZtCBaseList : ZCppMain/ZMainHead.H 2025-10-03 11:51:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c0cc5540b5 commit 2025-10-03 04:31 add RecvFreeIn() etc in ZtCBaseList : ZCppMain/ZMainHead.H 2025-10-03 04:31:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b8ae34461b commit 2025-19-29 19:48 rename AddHeadDefault() => AddHeadDef(), AddTailDefault() => AddTailDef() ZCppMain/ZtCObjList.H etc 2025-10-01 19:29:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e075c1c67c commit 2025-09-30 19:37 delete typedef TypeData in ZtCFreeHeapCDL::ZtCBody : ZCppMain/ZtCObjList.H 2025-09-30 19:38:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6e9dffc1f4 commit 2025-09-29 19:48 edit a bit ZCppMain/ZMainHead.H 2025-09-29 19:48:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
92d2763d40 commit 2025-09-29 19:47 bug fix in ZtCBaseList::operator=(const ZtCBaseList& rhs) : ZCppMain/ZMainHead.H 2025-09-29 19:47:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
091f19d93a commit 2025-09-28 22:15 edit a bit ZCppMain/ZMainHead.H 2025-09-28 22:15:56 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c860938de3 commit 2025-09-28 22:09 edit a bit ZCppMain/ZMainHead.H 2025-09-28 22:09:32 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f8a8c6ce28 commit 2025-09-28 22:00 edit a bit ZCppMain/ZMainHead.H 2025-09-28 22:00:31 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e5ae0cf091 commit 2025-09-28 21:35 edit a bit ZCppMain/ZMainHead.H 2025-09-28 21:35:40 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1f10da8473 commit 2025-09-28 21:14 edit a bit ZCppMain/ZMainHead.H 2025-09-28 21:14:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4afd99fce1 commit 2025-09-28 18:14 edit a bit ZCppMainTest/ZtCBaseList_000.cpp 2025-09-28 18:14:18 +09:00
/* User with id == 0 is a fake user from git author */ sauron
286259df9d commit 2025-09-28 17:19 add template parameter 'bool TTypebUseCRTP' inZtCTypeNowCRTP : ZCppMain/ZMainHead.H 2025-09-28 17:19:34 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c617e6ea8a commit 2025-09-28 11:34 edit a bit ZCppMain/ZMainHead.H 2025-09-28 11:35:04 +09:00
/* User with id == 0 is a fake user from git author */ sauron
290b72d362 commit 2025-09-28 10:30 edit a bit ZCppMain/ZtCSortObjList.H 2025-09-28 10:30:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ed0ab398db commit 2025-09-28 10:13 edit a bit ZCppMain/ZMainHead.H 2025-09-28 10:13:42 +09:00
/* User with id == 0 is a fake user from git author */ sauron
cf415becc0 commit 2025-09-28 10:10 template parameter TTypeCRTP in ZtCBaseList : ZCppMain/ZMainHead.H 2025-09-28 10:10:58 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6c4c4a86e1 commit 2025-09-28 02:42 edit a bit ZCppMain/ZMainHead.H 2025-09-28 02:42:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a8e6127a0f commit 2025-09-28 02:11 edit a bit ZCppMain/ZMainHead.H 2025-09-28 02:11:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
71cefa21c4 commit 2025-09-28 01:08 edit a bit ZCppMain/ZMainHead.H 2025-09-28 01:08:39 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6e6c59b0cc commit 2025-09-27 19:21 edit a bit ZCppMain/ZtCObjList.H 2025-09-27 19:21:43 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a542e66922 commit 2025-09-27 18:59 edit a bit ZCppMain/ZtCObjList.H 2025-09-27 18:59:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a12c86d471 commit 2025-09-27 18:38 delete ZtCTypeCheckRef : ZCppMain/ZMainHead.H 2025-09-27 18:39:02 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2071e21542 commit 2025-09-27 11:14 edit a bit ZtCObjUnitList : ZCppMain/ZtCObjList.H 2025-09-27 11:14:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4485241a49 commit 2025-09-27 10:57 bug fix in DeleteHeap() : ZCppMain/ZtCObjList.H 2025-09-27 10:57:52 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c613f0df8a commit 2025-09-27 09:19 refine a bit DeleteHeap(TypeSize AI_DelCnt) : ZCppMain/ZtCObjList.H 2025-09-27 09:20:03 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a407d97d70 commit 2025-09-27 08:52 bug fix in DeleteHeap(TypeSize AI_DelCnt) : ZCppMain/ZtCObjList.H 2025-09-27 08:52:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2c553a20e0 commit 2025-09-27 01:02 edit a bit ZCppMain/ZtCObjList.H 2025-09-27 01:02:57 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9ca7dd3a90 commit 2025-09-27 00:58 add ZtCTypeData< ZtCRef<TType> > and ZtCTypeData< ZtCRef<TType>* > 2025-09-27 00:58:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3cbcc8df6c commit 2025-09-24 17:07 edit a bit ZCppMain/ZCStringStd.H 2025-09-24 15:07:31 +09:00
/* User with id == 0 is a fake user from git author */ sauron
59fc4ff1e1 commit 2025-09-24 14:06 edit a bit ZCppMain/ZtCSimList.H 2025-09-24 14:06:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
388e62b7c3 commit 2025-09-24 13:45 delete _CODE_OLD_ codes in ZCppMain/ZtCSimList.H 2025-09-24 13:45:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5e39246c60 commit 2025-09-24 13:37 delete _CODE_OLD_ codes in ZCppMain/ZtCObjList.H 2025-09-24 13:37:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f3b886c8c2 commit 2025-09-24 11:20 add ZtCFreeHeapSngl<>::MakeEqual() in ZCppMain/ZtCObjList.H and ZtCSimList.H 2025-09-24 11:20:40 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f58ad91530 commit 2025-09-20 18:59 edit a bit ZCppMain/ZCProcess_Win.H 2025-09-20 18:59:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
16e11d9cb7 commit 2025-09-20 18:29 edit a bit ZCppMain/ZtCStringEx.H 2025-09-20 18:29:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
04e2329262 commit 2025-09-20 10:22 edit a bit ZCppMain/ZtCStringEx.H 2025-09-20 10:22:29 +09:00
/* User with id == 0 is a fake user from git author */ sauron
6238184f8d commit 2025-09-20 10:16 edit member fun of ZCAllocClass ZCppMain/ZMainHead.H 2025-09-20 10:17:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b893f0884e commit 2025-09-20 08:39 edit a bit ZCppMain/ZMainHead.H 2025-09-20 08:39:30 +09:00
/* User with id == 0 is a fake user from git author */ sauron
936581e12d commit 2025-09-20 08:37 edit a bit ZCppMainTest/ZtCBaseList_000.cpp 2025-09-20 08:37:30 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d812f6c40e commit 2025-09-20 08:29 mv ZtCList to ZtCBaseList in ZCppMain/ZMainHead.H 2025-09-20 08:29:43 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a821ee6cc5 commit 2025-09-20 00:39 delete ZCHeapAllocList in ZCppMain/ZMainHead.H 2025-09-20 00:39:46 +09:00
/* User with id == 0 is a fake user from git author */ sauron
500c806dbd commit 2025-09-19 22:55 Optimize Replace() in ZtCStringBase 2025-09-19 22:55:40 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0ca2981290 commit 2025-09-18 19:56 add 202509181922 code< ZCLink::MakeCircle(mp_HeadLink, mp_TailLink); > in ZCppMain/ZtCSimList.H 2025-09-18 19:56:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
fb77b5ef89 commit 2025-09-16 20:38 edit a bit ZCppMain/ZtCObjList.H 2025-09-16 20:36:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c676b9d4f2 commit 2025-09-16 19:57 edit a bit ZCppMainTest/ZtCSimList_000.cpp 2025-09-16 19:57:50 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4ca3c9a955 commit 2025-09-15 20:44 edit a bit ZCppMain/ZtCSimList.H 2025-09-15 20:44:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b213c85b78 commit 2025-09-15 20:41 edit a bit ZCppMain/ZtCObjList.H 2025-09-15 20:41:13 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c5a1b1ae94 commit 2025-09-15 20:34 refine ZtCBody::Fetch() in ZCppMain/ZtCObjList.H 2025-09-15 20:35:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8059bfd3a0 commit 2025-09-14 20:24 is testing ZtCBody::Fetch() in ZCppMain/ZtCSimList.H 2025-09-14 20:25:08 +09:00
/* User with id == 0 is a fake user from git author */ sauron
c87ecc13cd commit 2025-09-14 19:03 is testing ZtCBody::Fetch() in ZCppMain/ZtCObjList.H 2025-09-14 19:04:11 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a16a71084b commit 2025-09-14 18:37 is testing ZtCBody::Fetch() in ZCppMain/ZtCObjList.H 2025-09-14 18:37:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0bf7d2c290 commit 2025-09-14 13:39 edit a bit ZCppMain/ZtCSimList.H 2025-09-14 13:39:24 +09:00
/* User with id == 0 is a fake user from git author */ sauron
63edcfd88e commit 2025-09-14 13:37 edit a bit ZCppMain/ZtCObjList.H 2025-09-14 13:37:15 +09:00
/* User with id == 0 is a fake user from git author */ sauron
7b9ce2c1fb commit 2025-09-14 12:48 bug fix in ZtCObjList& operator=(const ZtCObjList& rhs) in ZCppMain/ZtCObjList.H 2025-09-14 12:48:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1876bdc2ce commit 2025-09-14 12:37 apply ZNsIFaceEx::ZtCFreeHeapCDL<ZNsConst::CI_ListKind_Double> in ZCppMain/ZtCObjList.H 2025-09-14 12:37:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
82761030c8 commit 2025-09-14 00:42 edit a bit ZCppMain/ZtCObjList.H 2025-09-14 00:42:27 +09:00
/* User with id == 0 is a fake user from git author */ sauron
86e1668591 commit 2025-09-14 00:13 edit a bit ZCppMain/ZtCObjList.H 2025-09-14 00:13:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f05b82847e commit 2025-09-14 00:07 edit a bit ZCppMain/ZtCSimList.H 2025-09-14 00:07:57 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ca20ff4850 commit 2025-09-13 23:44 complete ZtCFreeHeapSngl< ZNsConst::CI_ListKind_Single > in ZCppMain/ZtCSimList.H 2025-09-13 23:44:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
602f35faba commit 2025-09-13 10:46 is coding ZCFreeHeapSngl::ZtCBody in ZCppMain/ZtCSimList.H 2025-09-13 10:47:04 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1ae5806738 commit 2025-09-12 18:01 edit ZIFreeHeap in ZCppMain/ZMainHead.H 2025-09-12 18:01:55 +09:00
/* User with id == 0 is a fake user from git author */ sauron
ea970195fb commit 2025-09-12 17:12 edit ZIFreeHeap in ZCppMain/ZMainHead.H 2025-09-12 17:13:00 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2513842f7f commit 2025-09-12 14:54 add ZIFreeHeap in ZCppMain/ZMainHead.H 2025-09-12 14:54:11 +09:00
/* User with id == 0 is a fake user from git author */ sauron
8a770d21ab commit 2025-09-12 11:19 edit a bit ZCppMain/ZtCSimList.H 2025-09-12 11:19:22 +09:00
/* User with id == 0 is a fake user from git author */ sauron
74dbcd6482 commit 2025-09-11 14:57 ZtCInit::EUseInit, EUseFini => ZEUseInit, ZEUseFini in ZCppMain/ZMainHead.H 2025-09-11 14:57:28 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3a41be365a commit 2025-09-11 14:31 edit a bit ZCppMain/ZtCArray.H 2025-09-11 14:31:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
968063376b commit 2025-09-11 14:27 edit a bit ZCppMain/ZtCArray.H 2025-09-11 14:27:35 +09:00
/* User with id == 0 is a fake user from git author */ sauron
562381e4c2 commit 2025-09-11 14:17 edit a bit ZCppMain/ZtCObjList.H 2025-09-11 14:17:42 +09:00
/* User with id == 0 is a fake user from git author */ sauron
4c40e76abd commit 2025-09-11 13:31 edit codes for ZtCList in ZCppMain/ZMainHead.H 2025-09-11 13:31:10 +09:00
/* User with id == 0 is a fake user from git author */ sauron
0c07b0e497 commit 2025-09-11 12:36 edit codes for ZtCInit<> in ZCppMain/ZtSimList.H etc 2025-09-11 12:37:05 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5ced8624e6 commit 2025-09-11 00:22 edit a bit ZCppMain/ZtSimList.H 2025-09-11 00:22:42 +09:00
/* User with id == 0 is a fake user from git author */ sauron
a9fbdef1d7 commit 2025-09-10 15:35 edit a bit ZCppMain/ZCProcess_Linux.H 2025-09-10 15:35:25 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e54bc15c4a commit 2025-09-10 15:27 edit a bit ZCppMain/ZCProcess_Linux.H 2025-09-10 15:27:19 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b2956aad58 commit 2025-09-09 23:43 edit a bit ZCppMain/ZCProcess_Linux.H 2025-09-09 23:43:54 +09:00
/* User with id == 0 is a fake user from git author */ sauron
707711607d commit 2025-09-09 23:32 edit a bit ZCppMain/ZCProcess_Linux.H 2025-09-09 23:33:02 +09:00
/* User with id == 0 is a fake user from git author */ sauron
d4c5014bd8 commit 2025-09-09 23:22 edit a bit ZCppMain/ZCProcess_Win.H 2025-09-09 23:22:36 +09:00
/* User with id == 0 is a fake user from git author */ sauron
5440691151 commit 2025-09-09 14:18 add ZCppMainTest/ZtCSimList_000.cpp etc 2025-09-09 14:17:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
bf89d8c83e commit 2025-09-09 14:15 add template parameter 'TMoveObj' in ZtCList & ZtCSimList 2025-09-09 14:15:21 +09:00
/* User with id == 0 is a fake user from git author */ sauron
004c9a9135 commit 2025-09-09 11:02 add ItHID(), ItNext() etc in ZCppMain/ZtCSimList.H 2025-09-09 11:03:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b994f15dbb commit 2025-09-09 00:30 edit a bit ZCppMain/ZtCSimList.H 2025-09-09 00:31:06 +09:00
/* User with id == 0 is a fake user from git author */ sauron
3537c0a37d commit 2025-09-09 00:14 edit a bit ZCppMain/ZtCSimList.H 2025-09-09 00:15:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
9c39536b4f commit 2025-09-08 09:42 edit a bit ZCppMain/ZMainAVL.H 2025-09-08 09:42:38 +09:00
/* User with id == 0 is a fake user from git author */ sauron
39996ce5fa commit 2025-09-07 22:54 add ZtStTuple<> ZftMakeTuple() : ZCppMain/ZMainHeadEx.H 2025-09-07 22:54:24 +09:00
/* User with id == 0 is a fake user from git author */ sauron
b7ebc664cc commit 2025-09-07 15:16 edit code for _NO_USE_REEDDIR_R_ : ZCppMain/ZMainHeadEx.H 2025-09-07 15:16:17 +09:00
/* User with id == 0 is a fake user from git author */ sauron
e57424e4e8 commit 2025-09-07 15:03 add _NO_USE_REEDDIR_R_ : ZCppMain/ZMainHeadEx.H 2025-09-07 15:03:40 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f5f73b0344 commit 2025-09-07 14:35 edit a bit ZCppMainTest/~ 2025-09-07 14:35:43 +09:00
/* User with id == 0 is a fake user from git author */ sauron
642385f95f commit 2025-09-07 14:27 edit a bit ZCppMainTest/~ 2025-09-07 14:27:24 +09:00
/* User with id == 0 is a fake user from git author */ sauron
f050af4718 commit 2025-09-07 12:20 edit a bit ZCppMain/ZMainHead.H 2025-09-07 12:55:44 +09:00
/* User with id == 0 is a fake user from git author */ sauron
2e5c90155f commit 2025-09-07 12:20 edit a bit ZCppMain/ZMainHead.H 2025-09-07 12:21:07 +09:00
/* User with id == 0 is a fake user from git author */ sauron
1bb328a4bb commit 2025-09-07 09:58 edit ZCppMainTest/ZftMakeTuple_000.cpp 2025-09-07 00:58:41 +09:00
/* User with id == 0 is a fake user from git author */ sauron
154890d939 commit 2025-09-07 00:27 add ZCppMainTest/ZtCThreadEx_002_MutexCond.cpp 2025-09-07 00:57:26 +09:00
37 changed files with 22323 additions and 7048 deletions

View File

@ -751,6 +751,9 @@ namespace ZNsMain
ZtCThreadEx& operator=(const ZtCThreadEx& rhs)*/
virtual ~ZtCThreadEx(){}
bool Make()
{
return this->TThread::Make(ThreadFunc, GetCDerivePtr());
@ -998,15 +1001,29 @@ namespace ZNsMain
typename TDataArg =const TSyncData& ,
typename TSyncEasy=ZNsMain::ZCCriticSectEasy
>
class ZtCSyncObj ////////////////////////////////*/
class ZtCSyncObj /////////////////////////////////////*/
#if(_CODE_OLD_)
/*/////////////////////////////////////////////////////////////////////////////
■ TMutexCondData 클래스를 상속하여 대기상태에 관련된 2 개의 bool 멤버를 갖는다.
■ TMutexCondData 클래스를 상속하여 대기 상태에 관련된 2 개의 bool 멤버를 갖는다.
■ TMutexCondData 클래스 타입은 mutex 와 조건변수를 가지고 있어야 한다.
■ ZtCMutexCondDataVar 에 접근하는 쓰레드는 크게 2개가 있다.
하나는 ZtCMutexCondDataVar 를 가지고 있는 쓰레드로, 주로 작업이 없으면 잠드
는 쓰레드이고, 또 하나는 해야 할 작업이 발생했는데, ZtCMutexCondDataVar 에
서 잠들어 있는 쓰레드를 깨우는 쓰레드이다. 즉 아래로 정리하자.
1번 쓰레드 : 잠자는 쓰레드, 작업이 없으면 잠자는 쓰레드.
2번 쓰레드 : 깨우는 쓰레드, 작업이 있으면 깨우는 쓰레드.
-- 2025-10-04 18:18
/////////////////////////////////////////////////////////////////////////////*/
template< typename TMutexCondData=ZNsMain::ZtCMutexCondData<>
@ -1015,42 +1032,87 @@ namespace ZNsMain
{
public :
typedef TMutexCondData TypeData ;
typedef TMutexCondData CMutexCondData;
typedef TMutexCondData ZCMutexCondData;
protected:
bool mb_MustWait ;
bool mb_DoWaitCond;
bool mb_MustWait;
bool mb_WaitCond;
public :
ZtCMutexCondDataVar()
{
mb_MustWait =false;
mb_DoWaitCond=false;
mb_MustWait= false;
mb_WaitCond= false;
}/*
ZtCMutexCondDataVar()*/
void CheckWaitCond()
ZtCMutexCondDataVar(const ZtCMutexCondDataVar& rhs)
{
if(this->mb_MustWait==true)
mb_MustWait= false;
mb_WaitCond= false;
}/*
ZtCMutexCondDataVar(const ZtCMutexCondDataVar& rhs)*/
ZtCMutexCondDataVar& operator=(const ZtCMutexCondDataVar& rhs)
{
return *this; // nothing to do.
}/*
ZtCMutexCondDataVar& operator=(const ZtCMutexCondDataVar& rhs)*/
_SY_ void WaitCondIfMust()
{
/* 이 TMutexCondData 에 접근하는 쓰레드(즉 '잠자는 쓰레드')는
this->mb_MustWait==true
인 경우, 해야 할 작업이 없는 것으로 판단하고, WaitCond()
서 대기한다. -- 2025-10-04 18:21
*/
this->TMutexCondData::Lock();
{
if(this->mb_MustWait==true)
{
this->mb_DoWaitCond=true ;
this->mb_WaitCond=true ;
this->TMutexCondData::WaitCond();
this->mb_DoWaitCond=false;
this->mb_WaitCond=false;
}/*
if(this->mb_MustWait==true)*/
}
this->TMutexCondData::UnLock();
}/*
if(this->mb_MustWait==true)*/
}/*
void CheckWaitCond()*/
_SY_ void WaitCondIfMust()*/
void SetMustWaitBool(bool AB_MustWait)
_SY_ void WakeCondOnBool(bool AB_MustWait)
{
/*////////////////////////////////////////////////////////////////
■ 처리해야 할 작업이 발생해서 '깨우는 쓰레드'에서 호출한다.
-- 2025-10-04 18:23
■ 최초 이름은 SetMustWaitBool() 이었다.
AB_MustWait 와 mb_MustWait 에 따라, WakeCond() 을 호출하는데,
this->mb_MustWait==true && AB_MustWait==false, 즉
this->mb_MustWait==true 이 this->mb_MustWait==false
로 바뀌는 경우에, 쓰레드가 잠자고 있다면 깨운다. -- 2025-10-04 17:23
상태 this->mb_MustWait==true 를 만든 쓰레드는 '잠자는 쓰레드'이고
상태 this->mb_MustWait==false 를 만든 쓰레드는 '깨우는 쓰레드'이다.
다시 풀어 쓰면,
상태 this->mb_MustWait==true 를 만든 쓰레드는 '소비자 쓰레드'이고
상태 this->mb_MustWait==false 를 만든 쓰레드는 '생산자 쓰레드'이다.
-- 2025-10-06 18:29
////////////////////////////////////////////////////////////////*/
this->TMutexCondData::Lock();
{
if(AB_MustWait==this->mb_MustWait)
@ -1059,24 +1121,45 @@ namespace ZNsMain
}
else if(this->mb_MustWait=AB_MustWait)
{
// nothing to do
}
else if(this->mb_DoWaitCond==true)
{
// 이때는 쓰레드가 잠자고 있다면 깨워야 한다.
/* nothing to do
this->mb_MustWait==false && AB_MustWait==true, 즉
this->mb_MustWait==false 이 this->mb_MustWait==true
로 바뀌는 경우. nothing to do.
*/
}
else if(this->mb_WaitCond==true)
{
/*
this->mb_MustWait==true && AB_MustWait==false, 즉
this->mb_MustWait==true 이 this->mb_MustWait==false
로 바뀌는 경우. 이때는 쓰레드가 잠자고 있다면 깨워야 한다.
*/
this->TMutexCondData::WakeCond();
this->mb_DoWaitCond=false;
this->mb_WaitCond=false;
}/*
else if(this->mb_DoWaitCond==true)*/
else if(this->mb_WaitCond==true)*/
}
this->TMutexCondData::UnLock();
// WakeCondOnBool(true ) : '잠자는 쓰레드'에서 호출.
// WakeCondOnBool(false) : '깨우는 쓰레드'에서 호출.
}/*
void SetMustWaitBool(bool AB_MustWait)*/
_SY_ void WakeCondOnBool(bool AB_MustWait)*/
bool MustWait () const{return mb_MustWait ;}
bool DoWaitCond() const{return mb_DoWaitCond;}
_SY_ void SetMustWaitTrue (){WakeCondOnBool(true );} // '잠자는 쓰레드'에서 호출.
_SY_ void SetMustWaitFalse(){WakeCondOnBool(false);} // '깨우는 쓰레드'에서 호출.
_SY_ void WakeCondOnTrue (){WakeCondOnBool(true );} // '잠자는 쓰레드'에서 호출.
_SY_ void WakeCondOnFalse (){WakeCondOnBool(false);} // '깨우는 쓰레드'에서 호출.
bool MustWait () const{return mb_MustWait;}
bool DoWaitCond() const{return mb_WaitCond;}
public:
};/*
@ -1084,6 +1167,146 @@ namespace ZNsMain
>
class ZtCMutexCondDataVar ///////////////////////////////////*/
#endif //_CODE_OLD_
/*/////////////////////////////////////////////////////////////////////////////
■ TMutexCondData 클래스를 상속하여 대기 상태를 표시하는 1 개의 bool 멤버를 갖는다.
■ TMutexCondData 클래스 타입은 mutex 와 조건변수를 가지고 있어야 한다.
■ ZtCMutexCondVar 에 접근하는 쓰레드는 크게 2개가 있다.
하나는 ZtCMutexCondVar 를 가지고 있는 쓰레드로, 주로 작업이 없으면 잠드는
쓰레드이고, 또 하나는 해야 할 작업이 발생했는데, ZtCMutexCondDataVar 에서
잠들어 있는 쓰레드를 깨우는 쓰레드이다. 즉 아래로 정리하자.
1번 쓰레드 : 잠자는 쓰레드, 작업이 없으면 잠자는 쓰레드.
2번 쓰레드 : 깨우는 쓰레드, 작업이 있으면 깨우는 쓰레드.
-- 2025-10-04 19:07
바꿔 말하면,
1번 쓰레드는 '소비자 쓰레드'이고, 2번 쓰레드는 '생산자 쓰레드'
이다. 그래서
WaitCondBoolSync() 는 '소비자 쓰레드'에서 호출하고
WakeCondBoolSync() 는 '생산자 쓰레드'에서 호출한다.
-- 2025-10-06 18:38
/////////////////////////////////////////////////////////////////////////////*/
template< typename TMutexCondData=ZNsMain::ZtCMutexCondData<>
>
class ZtCMutexCondVar : public TMutexCondData /////////////////
{
public :
typedef TMutexCondData TypeData ;
typedef TMutexCondData ZCMutexCondData;
protected:
bool mb_WaitCond; // 지금 쓰레드가 작업이 없어서 잠잔다.
bool mb_WakeCond; // 어떤 쓰레드가 작업이 있어서 깨웠다.
public :
ZtCMutexCondVar()
{
mb_WaitCond= false;
mb_WakeCond= false;
}/*
ZtCMutexCondVar()*/
ZtCMutexCondVar(const ZtCMutexCondVar& rhs)
{
mb_WaitCond= false;
mb_WakeCond= false;
}/*
ZtCMutexCondVar(const ZtCMutexCondVar& rhs)*/
ZtCMutexCondVar& operator=(const ZtCMutexCondVar& rhs)
{
return *this; // nothing to do.
}/*
ZtCMutexCondVar& operator=(const ZtCMutexCondVar& rhs)*/
_SY_ bool WaitCondBoolSync()
{
/* 이 TMutexCondData 에 접근해 작업을 처리한 쓰레드
즉 잠자는 쓰레드, 소비자 쓰레드
는 작업이 끝나면 WaitCond() 에서 대기한다.
다만, 이 함수로 2개 이상의 쓰레드가 대기하는 것은
잘못된 설계이다. 어디까지나 1 개 쓰레드 대기용이다.
-- 2025-10-04 18:21
*/
bool VB_Return = false;
this->TMutexCondData::Lock();
{
if(!this->mb_WakeCond && !this->mb_WaitCond)
{
this->mb_WaitCond = true ;
this->TMutexCondData::WaitCond();
this->mb_WaitCond = false;
this->mb_WakeCond = false;
VB_Return = true;
}/*
if(!this->mb_WakeCond && !this->mb_WaitCond)*/
else // '작업'이 발생해 잠들지 않고 계속 작업하는 경우.
{
this->mb_WaitCond = false;
this->mb_WakeCond = false;
}/*
else // '작업'이 발생해 잠들지 않고 계속 작업하는 경우.*/
}
this->TMutexCondData::UnLock();
return VB_Return;
}/*
_SY_ bool WaitCondBoolSync()*/
_SY_ void WakeCondBoolSync()
{
/* 작업이 발생해, 이 TMutexCondData 에 접근해 해당
쓰레드를 깨워 작업을 시키려는 쓰레드
즉 깨우는 쓰레드, 생산자 쓰레드
가 호출한다. -- 2025-10-04 19:01
*/
this->TMutexCondData::Lock();
{
if(!this->mb_WakeCond)
{
this->TMutexCondData::WakeCond(); this->mb_WakeCond=true;
}/*
if(!this->mb_WakeCond)*/
}
this->TMutexCondData::UnLock();
}/*
_SY_ void WakeCondBoolSync()*/
bool DoWaitCond() const{return mb_WaitCond;}
public:
};/*
template< typename TMutexCondData=ZNsMain::ZtCMutexCondData<>
>
class ZtCMutexCondVar ///////////////////////////////////////*/
}/*
namespace ZNsMain */
@ -1288,6 +1511,8 @@ namespace ZNsMain */
고 있는지 동작중인지를 판단하는 변수와, 쓰레드를 재워야하는지 아닌지를 표시하는 변
수, 이렇게 2 개가 필요하다.
그렇지 않다. ZtCMutexCondVar 을 보면, bool 멤버 하나로도 괜찮다. -- 2025-10-04 19:21
■ 긴 작업을 하고 있는 쓰레드의 경우, 그 쓰레드가 현재 어디까지 작업을 하고 있는지 알
고 싶을 때가 있다. 이때 작업 진행 정보를 멤버 변수에 담아 두게 되는데, 다른 쓰레드
에서 이 진행 정보 멤버에 접근할 때, 해당 멤버 변수가 int 나 long 과 같은 primitive

View File

@ -34,9 +34,9 @@ namespace ZNsMain
enum ZEThread
{
ZEThread_OK =0 ,
ZEThread_Invalid=EINVAL , // 쓰레드 관련 함수 에러.
ZEThread_TimeOut=ETIMEDOUT
ZEThread_OK = 0 ,
ZEThread_Invalid= EINVAL , // 쓰레드 관련 함수 에러.
ZEThread_TimeOut= ETIMEDOUT
};/*
enum ZEThread*/
@ -472,7 +472,7 @@ namespace ZNsMain
static bool SetupRTS(int AI_FileID, int AI_SigNo=SIGRTMIN, int AI_Flag=O_RDWR | /*O_NONBLOCK|*/O_ASYNC, pid_t AI_PId=::getpid())
{
if (::fcntl(AI_FileID, F_SETFL, AI_Flag) < 0)
if (::fcntl(AI_FileID, F_SETFL , AI_Flag ) < 0)
{
return false;
}
@ -480,11 +480,11 @@ namespace ZNsMain
{
return false;
}
if (::fcntl(AI_FileID, F_SETOWN, AI_PId) < 0)
if (::fcntl(AI_FileID, F_SETOWN, AI_PId ) < 0)
{
return false;
}/*
if (::fcntl(AI_FileID, F_SETOWN, AI_PId) < 0)*/
if (::fcntl(AI_FileID, F_SETOWN, AI_PId ) < 0)*/
return true;
}/*
@ -1059,7 +1059,8 @@ namespace ZNsMain
bool Close()
{
bool VB_IsOK=(::shmctl(mh_FileMap, IPC_RMID, 0)!=-1) ;
bool VB_IsOK =
( ::shmctl(mh_FileMap, IPC_RMID, 0) != -1 ) ;
mh_FileMap=EInvalidID; return VB_IsOK;
@ -1176,10 +1177,10 @@ namespace ZNsMain
bool Lock()
{
struct sembuf sembuf_Obj;
sembuf_Obj.sem_num= 0; // semaphore 배열에서 몇 번째 semaphore 인지를 지정
sembuf_Obj.sem_op =-1;
sembuf_Obj.sem_flg=SEM_UNDO;
struct sembuf sembuf_Obj ;
sembuf_Obj.sem_num = 0 ; // semaphore 배열에서 몇 번째 semaphore 인지를 지정
sembuf_Obj.sem_op = -1 ;
sembuf_Obj.sem_flg = SEM_UNDO ;
return ::semop(mh_Mutex, &sembuf_Obj, 1)==0 ;
}/*
@ -1187,12 +1188,12 @@ namespace ZNsMain
bool UnLock()
{
struct sembuf sembuf_Obj;
sembuf_Obj.sem_num=0 ; // semaphore 배열에서 몇 번째 semaphore 인지를 지정
sembuf_Obj.sem_op =1 ;
sembuf_Obj.sem_flg=SEM_UNDO;
struct sembuf sembuf_Obj ;
sembuf_Obj.sem_num = 0 ; // semaphore 배열에서 몇 번째 semaphore 인지를 지정
sembuf_Obj.sem_op = 1 ;
sembuf_Obj.sem_flg = SEM_UNDO ;
return ::semop(mh_Mutex,&sembuf_Obj, 1)==0 ;
return ::semop(mh_Mutex, &sembuf_Obj, 1)==0 ;
}/*
bool UnLock()*/
@ -1204,10 +1205,10 @@ namespace ZNsMain
// 동기화되지 않는다. 프로세스가 이 함수를 수행하지 않고 종료해도 커
// 널은 자동적으로 semaphore 를 삭제하지 않는다.
union semun SemUnion;
union semun SemUnion ;
const bool CB_IsOK =
(::semctl(mh_Mutex, 0, IPC_RMID, SemUnion)!=-1);
(::semctl(mh_Mutex, 0, IPC_RMID, SemUnion) != -1);
mh_Mutex=0; return CB_IsOK;
}/*
@ -1246,13 +1247,13 @@ namespace ZNsMain
class ZCMutexData*/
private:
ZCMutexData* mp_MutexData ;
ZCMutexData* mp_CMutexData ;
ZCShareMemory mo_CShareMemory;
public :
ZCProcessMutexPosix()
{
mp_MutexData=0;
mp_CMutexData=0;
}/*
ZCProcessMutexPosix()*/
@ -1276,7 +1277,7 @@ namespace ZNsMain
}/*
if(mo_CShareMemory.LinkMap()==false)*/
mp_MutexData=(ZCMutexData*)mo_CShareMemory.GetStartAddress();
mp_CMutexData=(ZCMutexData*)mo_CShareMemory.GetStartAddress();
}
else // mo_CShareMemory.ShmGet(AL_MapKey,sizeof(ZCMutexData))==true
{
@ -1286,14 +1287,14 @@ namespace ZNsMain
}/*
if(mo_CShareMemory.LinkMap()==false)*/
mp_MutexData=(ZCMutexData*)mo_CShareMemory.GetStartAddress();
mp_CMutexData = (ZCMutexData*)mo_CShareMemory.GetStartAddress();
::memset(mp_MutexData, 0x00, sizeof(ZCMutexData));
::memset(mp_CMutexData, 0x00, sizeof(ZCMutexData));
::pthread_mutexattr_init (&mp_MutexData->mo_PThreadMutexAttr);
::pthread_mutexattr_settype (&mp_MutexData->mo_PThreadMutexAttr, PTHREAD_MUTEX_RECURSIVE); // 이전에는 PTHREAD_MUTEX_ERRORCHECK 로 설정했었다. 2007-05-24 20:04:00
::pthread_mutexattr_setpshared(&mp_MutexData->mo_PThreadMutexAttr, PTHREAD_PROCESS_SHARED);
::pthread_mutex_init (&mp_MutexData->mo_PThreadMutex, (const pthread_mutexattr_t*)&mp_MutexData->mo_PThreadMutexAttr);
::pthread_mutexattr_init (&mp_CMutexData->mo_PThreadMutexAttr);
::pthread_mutexattr_settype (&mp_CMutexData->mo_PThreadMutexAttr, PTHREAD_MUTEX_RECURSIVE); // 이전에는 PTHREAD_MUTEX_ERRORCHECK 로 설정했었다. 2007-05-24 20:04:00
::pthread_mutexattr_setpshared(&mp_CMutexData->mo_PThreadMutexAttr, PTHREAD_PROCESS_SHARED );
::pthread_mutex_init (&mp_CMutexData->mo_PThreadMutex, (const pthread_mutexattr_t*)&mp_CMutexData->mo_PThreadMutexAttr);
}/*
else // mo_CShareMemory.ShmGet(AL_MapKey,sizeof(ZCMutexData))==true*/
@ -1310,7 +1311,7 @@ namespace ZNsMain
int LockRaw()
{
return ::pthread_mutex_lock(&mp_MutexData->mo_PThreadMutex);
return ::pthread_mutex_lock(&mp_CMutexData->mo_PThreadMutex);
// EDEADLK 를 반환하는 경우를 체크할 것.
}/*
@ -1332,7 +1333,7 @@ namespace ZNsMain
int LockRaw(const struct timespec& AR_TimeSpec)
{
return ::pthread_mutex_timedlock(&mp_MutexData->mo_PThreadMutex, &AR_TimeSpec);
return ::pthread_mutex_timedlock(&mp_CMutexData->mo_PThreadMutex, &AR_TimeSpec);
// 성공이면 ZNsEnum::ZEThread_OK 를
// 시간초과이면 ZNsEnum::ZEThread_TimeOut 를 리턴
@ -1345,10 +1346,11 @@ namespace ZNsMain
{
timespec VO_TimeSpec;
VO_TimeSpec.tv_sec =time(NULL)+AL_MiliSec/1000;
VO_TimeSpec.tv_nsec=(AL_MiliSec%1000)*1000*1000;
VO_TimeSpec.tv_sec = time(NULL) + AL_MiliSec/1000 ;
VO_TimeSpec.tv_nsec = (AL_MiliSec%1000)* 1000*1000 ;
return ::pthread_mutex_timedlock(&mp_MutexData->mo_PThreadMutex, &VO_TimeSpec);
return ::pthread_mutex_timedlock
(&mp_CMutexData->mo_PThreadMutex, &VO_TimeSpec);
}/*
int Lock(long AL_MiliSec)*/
@ -1362,13 +1364,13 @@ namespace ZNsMain
bool UnLock()
{
return ::pthread_mutex_unlock(&mp_MutexData->mo_PThreadMutex)==0;
return ::pthread_mutex_unlock(&mp_CMutexData->mo_PThreadMutex)==0;
}/*
bool UnLock()*/
void Close()
{
::pthread_mutex_destroy(&mp_MutexData->mo_PThreadMutex);
::pthread_mutex_destroy(&mp_CMutexData->mo_PThreadMutex);
mo_CShareMemory.UnMap();
mo_CShareMemory.Close();
@ -1387,7 +1389,7 @@ namespace ZNsMain
■ 기록자/판독자 lock(read-write lock) 으로 Window 의 수동리셋 이벤트를 구현할 수
있다. 즉 특정 지점에서 다수의 쓰레드가 대기하다가 동시에 깨어나는 동작이 가능하
다. 물론 뮤텍스 조건변수로 수동리셋 이벤트를 구현하는 것이 더 효과적이다.
다. 물론 뮤텍스 조건 변수로 수동리셋 이벤트를 구현하는 것이 더 효과적이다.
■ POSIX.1b structure for a time value.
This is like a `struct timeval' but has nanoseconds instead of microseconds.
@ -3464,22 +3466,32 @@ namespace ZNsMain
{
_DEBUG_REENTRANT_CHECK_
mh_ThreadID =rhs.mh_ThreadID ;
(TTypeBase&)(*this)=static_cast<const TTypeBase&>(rhs);
}
mh_ThreadID = 0 ;
}/*
ZtCThread(const ZtCThread& rhs):TTypeBase(rhs)*/
template<typename TTypeArg>
ZtCThread(const TTypeArg& AR_TTypeArg):TTypeBase(AR_TTypeArg)
ZtCThread(const TTypeArg& AR_TTypeArg) : TTypeBase(AR_TTypeArg)
{
_DEBUG_REENTRANT_CHECK_
mh_ThreadID = 0 ;
}
}/*
template<typename TTypeArg>
ZtCThread(const TTypeArg& AR_TTypeArg) : TTypeBase(AR_TTypeArg)
*/
ZtCThread& operator=(const ZtCThread& rhs)
{
return *this;
*(TTypeBase*)(this) = rhs; return *this;
}/*
ZtCThread& operator=(const ZtCThread& rhs)*/
ZtCThread& operator=(const TTypeBase& AR_CBaseType)
{
*(TTypeBase*)(this) = AR_CBaseType; return *this;
}/*
ZtCThread& operator=(const TTypeBase& AR_CBaseType)*/
operator ThreadID () const
{
@ -3690,7 +3702,7 @@ namespace ZNsMain
/*//////////////////////////////////////////////////////////////////////////////////////
■ class ZtCMutexCond 는 window 에는 없는 리눅스 뮤텍스 조건변수 클래스
■ class ZtCMutexCond 는 window 에는 없는 리눅스 뮤텍스 조건 변수 클래스
이것이 유용한 경우는 다수의 쓰레드가 함수 A, 함수 B, 함수 C 를 수행하는데, 반드시 함
수 A -> B -> C 이 순서로 실행해야 하고 각 함수는 동기화를 해주어야 할 때, 쓰레드 조
@ -3698,9 +3710,9 @@ namespace ZNsMain
B,C 용 각각 3 개의 뮤텍스를 사용해야 한다. 즉 한 개의 뮤텍스에 여러 개의 조건 변수가
대응할 수 있다. 반대로 한 개의 조건변수에 여러개의 뮤텍스가 대응할 수는 없다.
조건변수는 복사사용해서는 안된다. 따라서 복사생성자와 대입연산자의 실행을 막는다.
조건 변수는 복사 사용해서는 안된다. 따라서 복사 생성자와 대입 연산자의 실행을 막는다.
조건변수는 반드시 한번만 초기화 되어야 한다.
조건 변수는 반드시 한번만 초기화 되어야 한다.
■ 어떤 작업 큐에 다수의 쓰레드가 접근하여 작업을 가져온다고 가정하자. 작업큐에 접근하는
쓰레드는, 큐에 접근하는 동안은 다른 쓰레드가 동시 접근하지 않도록 '작업 큐 접근 동기
@ -3980,15 +3992,15 @@ namespace ZNsMain
/*///////////////////////////////////////////////////////////////
■ mutex 와 조건변수를 결합한 클래스다. ZtCMutexCond<> 템플릿과
■ mutex 와 조건 변수를 결합한 클래스다. ZtCMutexCond<> 템플릿과
ZCProcessMutex 등을 적절히 이용하면 되지만 좀더 최적화 하기 위
해서 별도로 구현하는 것이다.
///////////////////////////////////////////////////////////////*/
template< typename TData=ZNsMain::ZCEmpty
template< typename TData=ZNsMain::ZCEmpty /////////////////////
>
class ZtCMutexCondData : public TData
class ZtCMutexCondData : public TData ///////////////////////////
{
protected:
pthread_mutex_t mh_Mutex;
@ -4001,8 +4013,8 @@ namespace ZNsMain
// 실험용 코드.
bool VB_IsOK1=::pthread_mutex_init(&mh_Mutex, AP_MutexAttr)==ZNsMain::ZNsEnum::ZEThread_OK;
bool VB_IsOK2=::pthread_cond_init (&mh_Cond, AP_CondAttr )==ZNsMain::ZNsEnum::ZEThread_OK;
bool VB_IsOK1= (::pthread_mutex_init(&mh_Mutex, AP_MutexAttr)==ZNsMain::ZNsEnum::ZEThread_OK);
bool VB_IsOK2= (::pthread_cond_init (&mh_Cond, AP_CondAttr )==ZNsMain::ZNsEnum::ZEThread_OK);
return (VB_IsOK1 && VB_IsOK2) ? ZNsMain::ZNsEnum::ZEThread_OK : ZNsMain::ZNsEnum::ZEThread_Invalid ;
@ -4054,7 +4066,7 @@ namespace ZNsMain
int WaitCondTime(int AI_TimeOutMili)
{
timespec VO_TimeAbs; // 절대시간
timespec VO_TimeAbs; // 절대 시간
timeval VO_TimeNow;
/*///////////////////////////////////////////////////////
@ -4099,8 +4111,8 @@ namespace ZNsMain
::gettimeofday(&VO_TimeNow, NULL);
VO_TimeAbs.tv_sec =VO_TimeNow.tv_sec + (AI_TimeOutMili/1000) ;
VO_TimeAbs.tv_nsec=VO_TimeNow.tv_usec*1000 + (AI_TimeOutMili%1000)*1000*1000 ;
VO_TimeAbs.tv_sec = VO_TimeNow.tv_sec + (AI_TimeOutMili/1000) ;
VO_TimeAbs.tv_nsec= VO_TimeNow.tv_usec*1000 + (AI_TimeOutMili%1000)*1000*1000 ;
return ::pthread_cond_timedwait(&mh_Cond, &mh_Mutex, &VO_TimeAbs) ; // return ZEThread_TimeOut if timeout
}/*
@ -4132,8 +4144,8 @@ namespace ZNsMain
// 실험용 코드.
bool VB_IsOK1=::pthread_cond_destroy (&mh_Cond )==ZNsMain::ZNsEnum::ZEThread_OK;
bool VB_IsOK2=::pthread_mutex_destroy(&mh_Mutex)==ZNsMain::ZNsEnum::ZEThread_OK;
bool VB_IsOK1= (::pthread_cond_destroy (&mh_Cond )==ZNsMain::ZNsEnum::ZEThread_OK);
bool VB_IsOK2= (::pthread_mutex_destroy(&mh_Mutex)==ZNsMain::ZNsEnum::ZEThread_OK);
return (VB_IsOK1 && VB_IsOK2) ? ZNsMain::ZNsEnum::ZEThread_OK : ZNsMain::ZNsEnum::ZEThread_Invalid ;
@ -4149,9 +4161,9 @@ namespace ZNsMain
public:
};/*
template< typename TData=ZNsMain::ZCEmpty
template< typename TData=ZNsMain::ZCEmpty /////////////////////
>
class ZtCMutexCondData : public TData ///*/
class ZtCMutexCondData : public TData ///////////////////*/
/*//////////////////////////////////////////////////////////////////
@ -4397,6 +4409,7 @@ namespace ZNsMain
>
class ZtCBarrier : public TData /////////*/
#endif // !defined(__USE_XOPEN2K) || defined(__USE_MUTEX_COND_FOR_BARRIER__)

View File

@ -1259,7 +1259,7 @@ namespace ZNsMain
bool Make(LPTHREAD_START_ROUTINE AP_StartAddress, void* AP_Arg=0, DWORD dwCreationFlags=0, DWORD dwStackSize=0, LPSECURITY_ATTRIBUTES lpThreadAttributes=NULL)
{
unsigned int VUI_ThreadID;
unsigned int VUI_ThreadID=0;
return ( mh_ThreadID = (void*)::/*CreateThread*/_beginthreadex
(
@ -1294,7 +1294,7 @@ namespace ZNsMain
bool Make(unsigned (__stdcall *AP_StartAddress)(void *), void* AP_Arg=0, DWORD dwCreationFlags=0, DWORD dwStackSize=0, LPSECURITY_ATTRIBUTES lpThreadAttributes=NULL)
{
unsigned int VUI_ThreadID;
unsigned int VUI_ThreadID=0;
return ( mh_ThreadID=(void*)::_beginthreadex
(
@ -2364,9 +2364,8 @@ namespace ZNsMain
::InitializeConditionVariable(&mo_CondVar);
if(::InitializeCriticalSectionEx(&mo_CritSect, ESpinCount, 0)==TRUE)
return ZNsEnum::ZEThread_OK;
else
return ZNsEnum::ZEThread_Invalid;
return ZNsEnum::ZEThread_OK ;
else return ZNsEnum::ZEThread_Invalid;
}/*
int InitCond()*/
@ -2423,7 +2422,7 @@ namespace ZNsMain
class ZtCMutexCondData : public TData */
#else // !(defined(__VISUAL_CPP_VER__) && __VISUAL_CPP_VER__>=200800)
#else // !( defined(__VISUAL_CPP_VER__) && __VISUAL_CPP_VER__>=200800 )
template< typename TData=ZNsMain::ZCEmpty
@ -2497,8 +2496,8 @@ namespace ZNsMain
}/*
if(mb_IsOnWait==false)*/
DWORD VI_Return = ::SignalObjectAndWait(
mh_MutexSync, mh_EventWait, ADW_TimeOut, FALSE);
DWORD VI_Return = ::SignalObjectAndWait
( mh_MutexSync, mh_EventWait, ADW_TimeOut, FALSE );
#if(_CODE_BAD_)
return (VI_Return==WAIT_OBJECT_0) ? Lock() : VI_Return;
@ -2892,8 +2891,8 @@ namespace ZNsMain
enum
{
ZEPIPE_OutBuffSize=1024*8,
ZEPIPE_InBuffSize =1024*8
ZEPIPE_OutBuffSize = 1024*8,
ZEPIPE_InBuffSize = 1024*8
};/*
enum*/
@ -2933,7 +2932,7 @@ namespace ZNsMain
DWORD GetByteOfRecved() const*/
// 이름없는 파이프를 생성한다.
// 이름 없는 파이프를 생성한다.
static bool Create(PHANDLE APH_ReadPipe, PHANDLE APH_WritePipe, LPSECURITY_ATTRIBUTES AP_PipeAtt, DWORD AI_Size=0)
{
@ -2942,15 +2941,18 @@ namespace ZNsMain
static bool Create(PHANDLE APH_ReadPipe, PHANDLE APH_WritePipe, LPSECURITY_ATTRIBUTES AP_PipeAtt, DWORD AI_Size=0)*/
HANDLE CreateNamed( LPCTSTR AP_Name ,
DWORD AI_OpenMode=PIPE_ACCESS_DUPLEX ,
DWORD AI_PipeMode=PIPE_TYPE_BYTE ,
DWORD AI_MaxInstance=PIPE_UNLIMITED_INSTANCES,
DWORD AI_OutBufferSize=ZEPIPE_OutBuffSize,
DWORD AI_InBufferSize =ZEPIPE_InBuffSize ,
DWORD AI_DefaultTimeOut=0 ,
LPSECURITY_ATTRIBUTES AP_SecAtt=NULL
/*/////////////*/ )
HANDLE CreateNamed /*######################################################*/
(
LPCTSTR AP_Name
, DWORD AI_OpenMode = PIPE_ACCESS_DUPLEX
, DWORD AI_PipeMode = PIPE_TYPE_BYTE
, DWORD AI_MaxInstance = PIPE_UNLIMITED_INSTANCES
, DWORD AI_OutBufferSize = ZEPIPE_OutBuffSize
, DWORD AI_InBufferSize = ZEPIPE_InBuffSize
, DWORD AI_DefaultTimeOut = 0
, LPSECURITY_ATTRIBUTES AP_SecAtt = NULL
)
/*#########################################################################*/
{
/*///////////////////////////////////////////////////////////////////////
@ -2963,19 +2965,21 @@ namespace ZNsMain
///////////////////////////////////////////////////////////////////////*/
return mh_Pipe=::CreateNamedPipe(
return mh_Pipe = ::CreateNamedPipe(
AP_Name, AI_OpenMode, AI_PipeMode, AI_MaxInstance, AI_OutBufferSize, AI_InBufferSize, AI_DefaultTimeOut, AP_SecAtt) ;
}/*
HANDLE CreateNamed(
LPCTSTR AP_Name ,
DWORD AI_OpenMode=PIPE_ACCESS_DUPLES ,
DWORD AI_PipeMode=PIPE_TYPE_BYTE ,
DWORD AI_MaxInstance=PIPE_UNLIMITED_INSTANCES,
DWORD AI_OutBufferSize=ZEPIPE_OutBuffSize,
DWORD AI_InBufferSize =ZEPIPE_InBuffSize ,
DWORD AI_DefaultTimeOut=0 ,
LPSECURITY_ATTRIBUTES AP_SecAtt=NULL
///////////////// ) */
HANDLE CreateNamed /*########################################################
(
LPCTSTR AP_Name
, DWORD AI_OpenMode = PIPE_ACCESS_DUPLEX
, DWORD AI_PipeMode = PIPE_TYPE_BYTE
, DWORD AI_MaxInstance = PIPE_UNLIMITED_INSTANCES
, DWORD AI_OutBufferSize = ZEPIPE_OutBuffSize
, DWORD AI_InBufferSize = ZEPIPE_InBuffSize
, DWORD AI_DefaultTimeOut = 0
, LPSECURITY_ATTRIBUTES AP_SecAtt = NULL
)
###########################################################################*/
bool WaitConnect(LPOVERLAPPED AP_LPOVERLAPPED=0)
@ -3019,27 +3023,32 @@ namespace ZNsMain
static bool WaitPipe(LPCTSTR AP_PipeName, DWORD AI_TimeOut=NMPWAIT_WAIT_FOREVER)*/
HANDLE CreateFile( LPCTSTR AP_PipeName ,
DWORD AI_DesiredAccess=FILE_SHARE_READ | FILE_SHARE_WRITE,
DWORD AI_SharedMode=0 ,
LPSECURITY_ATTRIBUTES AP_SecuAtt=NULL ,
DWORD AI_CreationDisposition=OPEN_EXISTING,
DWORD AI_FlagAtt =0 ,
HANDLE AH_Template=NULL
/*////////////*/ )
HANDLE CreateFile /*////////////////////////////////////////////////*/
(
LPCTSTR AP_PipeName
, DWORD AI_DesiredAccess = FILE_SHARE_READ | FILE_SHARE_WRITE
, DWORD AI_SharedMode = 0
, LPSECURITY_ATTRIBUTES AP_SecuAtt= NULL
, DWORD AI_CreationDisposition = OPEN_EXISTING
, DWORD AI_FlagAtt = 0
, HANDLE AH_Template = NULL
)
/*//////////////////////////////////////////////////////////////////*/
{
return mh_Pipe=::CreateFile(
return mh_Pipe = ::CreateFile(
AP_PipeName, AI_DesiredAccess, AI_SharedMode, AP_SecuAtt, AI_CreationDisposition, AI_FlagAtt, AH_Template);
}/*
HANDLE CreateFile(
LPCTSTR AP_PipeName ,
DWORD AI_DesiredAccess=FILE_SHARE_READ | FILE_SHARE_WRITE,
DWORD AI_SharedMode=0 ,
LPSECURITY_ATTRIBUTES AP_SecuAtt=NULL ,
DWORD AI_CreationDisposition=OPEN_EXISTING,
DWORD AI_FlagAtt =0 ,
HANDLE AH_Template=NULL
///////////// ) */
HANDLE CreateFile
(
LPCTSTR AP_PipeName
, DWORD AI_DesiredAccess = FILE_SHARE_READ | FILE_SHARE_WRITE
, DWORD AI_SharedMode = 0
, LPSECURITY_ATTRIBUTES AP_SecuAtt= NULL
, DWORD AI_CreationDisposition = OPEN_EXISTING
, DWORD AI_FlagAtt = 0
, HANDLE AH_Template = NULL
)
/*//////////////////////////////////////////////////////////////////*/
bool Write(LPCVOID AP_Buffer, DWORD AI_BytesToWrite, LPOVERLAPPED AP_LPOVERLAPPED=0)

View File

@ -1,438 +0,0 @@

#ifndef __ZCPPMAIIN_ZCSTRINGSTD_H__
#define __ZCPPMAIIN_ZCSTRINGSTD_H__
#include<string>
#include "ZCppMain/ZtCMainChars.H"
namespace ZNsMain
{
class ZCStringStd : public std::string
{
public:
typedef ZNsChars::ZNsType::ZtCTypeChars<char> ZCTypeChars;
typedef ZNsChars::ZtCMainChars<ZCTypeChars> ZCMainChars;
public:
typedef char TypeChar ;
typedef char* TypePChar ;
typedef const char* TypeCPChar;
typedef std::string TypeBase ;
typedef std::string TypeStrStd;
typedef ZTypLength TypeLength;
typedef ZTypLength TypeSize ;
public:
ZCStringStd(): TypeStrStd(){}
ZCStringStd(const ZCStringStd& rhs): TypeStrStd(rhs){}
ZCStringStd(const char* APC_Origin, TypeLength AL_Length): TypeStrStd(APC_Origin, AL_Length){}
ZCStringStd(const char* APC_Origin): TypeStrStd(APC_Origin){}
ZCStringStd& operator=(const ZCStringStd& rhs)
{
if(this==&rhs){ return *this; }
this->TypeStrStd::operator=(rhs); return *this;
}/*
ZCStringStd& operator=(const ZCStringStd& rhs)*/
ZCStringStd& operator=(const TypeBase& rhs)
{
if(this->data()==rhs.data()){ return *this; }
this->TypeStrStd::operator=(rhs); return *this;
}/*
ZCStringStd& operator=(const TypeBase& rhs)*/
template<typename TPosList> void FindPosToList /////////////
(
TPosList& ARR_CPosList, TypeCPChar APC_SearchData,
TypeLength AL_SearchLen, TypeLength AL_Offset=0
)
/*########################################################*/
{
// TPosList : ZNsMain::ZtCList<TypeLength> etc
if(0 > AL_Offset) AL_Offset=0 ;
if(this->size() <= AL_Offset) return ;
if(this->size() < 1 ) return ;
const char* VPC_OriginStart = this->data();
TypeLength VL_OriginLen = this->size();
TypeLength VL_FindPos = -1 ;
TypeLength VL_OffsetNow = AL_Offset ;
while /*::::::::::::::::::::::::::::::::::::::::::::::*/
(
( VL_FindPos = ZCMainChars::FindPos
( VPC_OriginStart, APC_SearchData,
VL_OriginLen , AL_SearchLen , VL_OffsetNow
)
)
>= 0
)
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
{
ARR_CPosList.push_back(VL_FindPos);
VL_OffsetNow = VL_FindPos + AL_SearchLen;
}
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
template<typename TPosList> void FindPosToList /////////////
(
TPosList& ARR_CPosList, TypeCPChar APC_SearchData,
TypeLength AL_SearchLen, TypeLength AL_Offset=0
)
##########################################################*/
template<typename TPosList> ZCStringStd& ReplaceToOutByPosList
(
TPosList& AR_CPosList ,
TypeCPChar APC_Replace ,
TypeLength AL_Replace ,
TypeLength AL_Searched ,
ZCStringStd& ARR_SaveOut
)
/*##########################################################*/
{
// TPosList : ZNsMain::ZtCList<TypeLength> etc
// AL_Replace : APC_Replace 의 길이
// AL_Searched : 이전에 찾은 길이
// ARR_SaveOut : AL_Replace>AL_Searched 인 경우에 여기에 저장한다.
if(AR_CPosList.size()<1) return *this;
TypeLength VL_PosListSize= AR_CPosList.size() ;
TypeLength VL_ThisSize = this->size() ;
TypeLength VL_NeedSize = VL_ThisSize +
(AL_Replace-AL_Searched) * VL_PosListSize ;
TypePChar VPC_ThisStart = const_cast<char*>(this->data()) ;
IterEasyID VH_IterEasyID = AR_CPosList.ItHID();
TypeLength VL_SearchedPos= 0 ;
TypeLength VL_SearchedPre= 0 ; // VL_SearchedPos 의 이전 값
if(AL_Replace<=AL_Searched) // 메모리 증가 불필요
{
TypePChar VPC_MoveStart = 0 ;
TypePChar VPC_DestStart = 0 ;
TypeLength VL_MoveStart = 0 ;
TypeLength VL_DestStart = 0 ;
TypeLength VL_MemMoveSize= 0 ;
TypePChar VPC_RepalcePos= 0 ;
__for1(TypeLength, i, VL_PosListSize)
{
VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ;
VPC_RepalcePos = VPC_ThisStart + VL_SearchedPos -
( AL_Searched-AL_Replace ) * (i-1) ;
if(VL_MoveStart>VL_DestStart)
{
VL_MemMoveSize =
VL_SearchedPos - VL_SearchedPre - AL_Searched ;
VPC_MoveStart = VPC_ThisStart + VL_MoveStart ;
VPC_DestStart = VPC_ThisStart + VL_DestStart ;
::memmove /*::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, VPC_MoveStart, VL_MemMoveSize
);
/*::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_MoveStart>VL_DestStart)*/
VL_SearchedPre = VL_SearchedPos ;
VL_MoveStart = VL_SearchedPos+ AL_Searched ;
VL_DestStart = VL_SearchedPos+ AL_Searched -
( AL_Searched-AL_Replace ) * i ;
::memcpy(VPC_RepalcePos, APC_Replace, AL_Replace);
AR_CPosList.ItNext(VH_IterEasyID);
}/*
__for1(TypeLength, i, VL_PosListSize)*/
if(VL_ThisSize > VL_MoveStart)
{
::memmove /*::::::::::::::::::::::::::::::*/
(
VPC_ThisStart + VL_DestStart,
VPC_ThisStart + VL_MoveStart,
VL_ThisSize - VL_MoveStart
);
/*::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_ThisSize > VL_MoveStart)*/
this->resize(VL_NeedSize); return *this;
}/*
if(AL_Replace<=AL_Searched) // 메모리 증가 불필요*/
ARR_SaveOut.resize(VL_NeedSize);
TypePChar VPC_OutStart = const_cast<char*>(ARR_SaveOut.data()) ;
TypePChar VPC_CopyStart = 0 ;
TypePChar VPC_DestStart = 0 ;
TypeLength VL_CopyStart = 0 ;
TypeLength VL_DestStart = 0 ;
TypeLength VL_MemCopySize= 0 ;
TypePChar VPC_RepalcePos= 0 ;
__for1(TypeLength, i, VL_PosListSize)
{
VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ;
VPC_CopyStart = VPC_ThisStart + VL_SearchedPre ;
VL_DestStart = VL_SearchedPre +
( AL_Replace-AL_Searched ) * (i-1) ;
VPC_DestStart = VPC_OutStart + VL_DestStart ;
if(VL_SearchedPos>VL_SearchedPre)
{
VL_MemCopySize =
VL_SearchedPos - VL_SearchedPre ;
::memcpy /*:::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, VPC_CopyStart, VL_MemCopySize
);
/*::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_SearchedPos>VL_SearchedPre)*/
VL_SearchedPre = VL_SearchedPos + AL_Searched ;
VL_DestStart = VL_SearchedPos +
( AL_Replace-AL_Searched ) * (i-1) ;
VPC_RepalcePos = VPC_OutStart + VL_DestStart ;
::memcpy(VPC_RepalcePos, APC_Replace, AL_Replace) ;
AR_CPosList.ItNext(VH_IterEasyID);
}/*
__for1(TypeLength, i, VL_PosListSize)*/
if(VL_SearchedPre<VL_ThisSize)
{
VL_DestStart = VL_DestStart + AL_Replace ;
VPC_DestStart = VPC_OutStart + VL_DestStart ;
VPC_CopyStart = VPC_ThisStart+ VL_SearchedPre;
VL_MemCopySize = VL_ThisSize - VL_SearchedPre;
::memcpy /*:::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, VPC_CopyStart, VL_MemCopySize
);
/*::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_SearchedPre<VL_ThisSize)*/
return ARR_SaveOut;
}/*
template<typename TPosList> ZCStringStd& ReplaceToOutByPosList
(
TPosList& AR_CPosList ,
TypeCPChar APC_Replace ,
TypeLength AL_Replace ,
TypeLength AL_Searched ,
ZCStringStd& ARR_SaveOut
)
############################################################*/
ZCStringStd& Replace /*####################################################*/
(
TypeCPChar APC_Search, TypeCPChar APC_Replace,
TypeLength AL_Search , TypeLength AL_Replace , TypeLength AL_Offset=0
)
/*#########################################################################*/
{
if(0 > AL_Offset) AL_Offset=0 ;
if(this->size() <= AL_Offset) return *this;
if(this->size() < 1 ) return *this;
ZtCList<TypeLength> VO_CPosCList; FindPosToList
(
RR(VO_CPosCList), APC_Search, AL_Search, AL_Offset
);
/*////////////////////////////////////////////*/
ZCStringStd VO_CStringOut; return *this = ReplaceToOutByPosList
(
VO_CPosCList, APC_Replace, AL_Replace, AL_Search, RR(VO_CStringOut)
);
/*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
ZCStringStd& Replace /*######################################################
(
TypeCPChar APC_Search, TypeCPChar APC_Replace,
TypeLength AL_Search , TypeLength AL_Replace , TypeLength AL_Offset=0
)
###########################################################################*/
ZCStringStd& Replace /*####################################################*/
(
TypeCPChar APC_Search, TypeCPChar APC_Replace, TypeLength AL_Offset=0
)
/*#########################################################################*/
{
return Replace(APC_Search, APC_Replace, ZftLength(APC_Search), ZftLength(APC_Replace), AL_Offset);
}/*
ZCStringStd& Replace /*######################################################
(
TypeCPChar APC_Search, TypeCPChar APC_Replace, TypeLength AL_Offset=0
)
###########################################################################*/
ZCStringStd& operator()(ZCStringStd& rhs)
{
if(this==&rhs) return *this; this->append(rhs); return *this;
}/*
ZCStringStd& operator()(ZCStringStd& rhs)*/
ZCStringStd& operator()(TypeCPChar APC_Data, TypeLength AI_Length)
{
if(this->data()==APC_Data) return *this;
this->append(APC_Data, AI_Length); return *this;
}/*
ZCStringStd& operator()(TypeCPChar APC_Data, TypeLength AI_Length)*/
ZCStringStd& operator()(TypeCPChar APC_Data)
{
if(this->data()==APC_Data) return *this;
this->append(APC_Data); return *this;
}/*
ZCStringStd& operator()(TypeCPChar APC_Data)*/
ZCStringStd& operator()(TypeLength AI_Repeat, char AC_Data)
{
this->append(AI_Repeat, AC_Data); return *this;
}/*
ZCStringStd& operator()(char AC_Data, TypeLength AI_Repeat)*/
ZCStringStd& operator()(char AC_Data, TypeLength AI_Repeat=1)
{
this->append(AI_Repeat, AC_Data); return *this;
}/*
ZCStringStd& operator()(char AC_Data, TypeLength AI_Repeat=1)*/
ZCStringStd& operator()(int AI_IntParam)
{
const int CI_BuffSize=21; char VCA_BuffParam[CI_BuffSize];
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%d", AI_IntParam);
return (*this)(VCA_BuffParam, VI_ResultSize);
}/*
ZCStringStd& operator()(int AI_IntParam)*/
ZCStringStd& operator()(ZTypUInt AUI_UIntParam)
{
const int CI_BuffSize=21; char VCA_BuffParam[CI_BuffSize];
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%u", AUI_UIntParam);
return (*this)(VCA_BuffParam, VI_ResultSize);
}/*
ZCStringStd& operator()(ZTypUInt AUI_UIntParam)*/
ZCStringStd& operator()(long AL_LongParam)
{
const int CI_BuffSize=31; char VCA_BuffParam[CI_BuffSize];
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%ld", AL_LongParam);
return (*this)(VCA_BuffParam, VI_ResultSize);
}/*
ZCStringStd& operator()(long AL_LongParam)*/
ZCStringStd& operator()(ZTypULong AUL_ULongParam)
{
const int CI_BuffSize=31; char VCA_BuffParam[CI_BuffSize];
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%lu", AUL_ULongParam);
return (*this)(VCA_BuffParam, VI_ResultSize);
}/*
ZCStringStd& operator()(ZTypULong AUL_ULongParam)*/
ZCStringStd& operator()(ZTypLLong ALL_LLongParam)
{
const int CI_BuffSize=41; char VCA_BuffParam[CI_BuffSize];
#ifdef _WIN
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%I64d", ALL_LLongParam);
#else
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%lld" , ALL_LLongParam);
#endif
return (*this)(VCA_BuffParam, VI_ResultSize);
}/*
ZCStringStd& operator()(ZTypLLong ALL_LLongParam)*/
ZCStringStd& operator()(ZTypULLong AULL_LLongParam)
{
const int CI_BuffSize=41; char VCA_BuffParam[CI_BuffSize];
#ifdef _WIN
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%I64u", AULL_LLongParam);
#else
int VI_ResultSize = ::sprintf(VCA_BuffParam, "%llu" , AULL_LLongParam);
#endif
return (*this)(VCA_BuffParam, VI_ResultSize);
}/*
ZCStringStd& operator()(ZTypULLong AULL_LLongParam)*/
ZCStringStd& operator()(double AD_DoubleParam)
{
const int CI_BuffSize=51 ;
char VCA_BuffParam[CI_BuffSize];
int VI_ResultSize = ::sprintf
(
VCA_BuffParam, "%f", AD_DoubleParam
);
/////////////////////////////
return (*this)(VCA_BuffParam);
}/*
ZCStringStd& operator()(double AD_DoubleParam)*/
public:
};/*
class ZCStringStd : public std::string*/
std::ostream& operator <<
(std::ostream& AR_COStream, const ZCStringStd& AR_CStringBase)
{
AR_COStream<<static_cast<const std::string&>(AR_CStringBase); return AR_COStream;
}/*
std::ostream& operator <<
(std::ostream& AR_COStream, const ZCStringStd& AR_CStringBase)*/
}/*
namespace ZNsMain*/
#endif //__ZCPPMAIIN_ZCSTRINGSTD_H__

View File

@ -15,9 +15,9 @@ namespace ZNsMain
enum ZEAVL_INSERT
{
ZEAVL_INSERT_RIGHT = +1,
ZEAVL_INSERT_OK = 0, /* 삽입 후의 평형계수가 0 이다. */
ZEAVL_INSERT_LEFT = -1,
ZEAVL_INSERT_RIGHT = +1 ,
ZEAVL_INSERT_OK = 0 , /* 삽입 후의 평형계수가 0 이다. */
ZEAVL_INSERT_LEFT = -1 ,
ZEAVL_INSERT_NONE = -2 /* 삽입 안 됨 */
};/*
enum ZEAVL_INSERT*/
@ -348,7 +348,7 @@ namespace ZNsMain
typename TEnvVar , //= ZNsMain::ZNsCGI::ZNsBase::ZtCEnvVar<TStringData>,
typename TEnvVarSet //= NsCPP::ZtCObjAVL<TEnvVar>
>
class ZtCTypeEnvVarSet /*############################################################*/
class ZtCTypeEnvVarSet ##############################################################*/
}/*
namespace NsType*/

View File

@ -1040,7 +1040,7 @@ namespace ZNsMain
int AI_Offset= 0 ,
const char* APC_Padd = ""
)
/*################################################################*/
##################################################################*/
template<typename TString> void ZftGetBinHexFormat /*#############*/
@ -1258,7 +1258,7 @@ namespace ZNsMain
int AI_Offset=0 ,
const char* APC_Padd =""
)
/*################################################################*/
##################################################################*/
template<typename TString> void ZftGetBinHexFormatEx( /*##########*/

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,16 @@
#define __ZCPPMAIIN__MAINHEAD_EX_H__
#ifndef _NO_USE_REEDDIR_R_
/* readdir_r() 함수가 실은 thread-safe 하지 않다고
해서 폐기되었다. -- 2025-09-07 14:55
*/
#define _NO_USE_REEDDIR_R_
#endif // !_NO_USE_REEDDIR_R_
#include<ctime>
#include<fstream>
#include<cstdio>
@ -1147,7 +1157,7 @@ namespace ZNsMain
{
time_t VI_TimeSec=ZNsMain::ZCTime::MakeTimeInt(AI_Year, AI_Month, AI_Day, AI_Hour, AI_Min, AI_Sec);
if(VI_TimeSec<1) return false; *this+=VI_TimeSec; return true ;
if(VI_TimeSec<1){return false;} *this+=VI_TimeSec; return true ;
}/*
bool GetDiffSec(time_t& ARRI_TimeGap, int AI_Year,int AI_Month,int AI_Day,int AI_Hour,int AI_Min,int AI_Sec)*/
@ -1378,15 +1388,15 @@ namespace ZNsMain
static string& GetUniqueID(string& ARR_CString)
{
const int CI_BuffSize=100 ;
static int SI_Count =0 ;
static long SI_Count =0 ;
const char* CPC_Gap ="_" ;
char VCA_Buff[CI_BuffSize] ;
::sprintf( VCA_Buff,
"%d%s%d%s%d" ,
"%ld%s%ld%s%ld" ,
(long)GetNowSec(), // (long) 가 없으면 메모리 오류가 난다.
CPC_Gap , GetTickCount() ,
CPC_Gap , (++SI_Count)+ ::GetCurrentProcessId()
CPC_Gap , (long)GetTickCount() ,
CPC_Gap , (++SI_Count)+long(::GetCurrentProcessId())
/*////*/ );
return ARR_CString = VCA_Buff ;
@ -3977,8 +3987,8 @@ namespace ZNsMain
if(VI_Index<0) return ARR_CStringExt;
return ARR_CStringExt(
APC_FileName+VI_Index+1, AI_Length-(VI_Index+1));
return ARR_CStringExt
( APC_FileName+VI_Index+1, AI_Length-(VI_Index+1) );
}/*
template<typename TString, typename TTypChar> ///////////////
static TString& GetExtName
@ -3990,19 +4000,23 @@ namespace ZNsMain
///////////////////////////////////////////////////////////*/
template<typename TString, typename TTypChar> static bool SetExtName(
template<typename TString, typename TTypChar> static bool SetExtName
(
const TTypChar* APC_FileName, ZTypLength AI_FileLen ,
const TTypChar* APC_FileExt , ZTypLength AI_ExtLength,
TString& ARR_CStringFileNew
/*#########*/ ) /*#################################################*/
)
/*################################################################*/
{
// APC_FileName 의 확장자를 APC_FileExt 으로 바꾼
// 새로운 파일명을 ARR_CStringFileNew 에 전달한다.
ZTypLength VL_ExtPos=ZCMainChars::FindPosFromEnd(
APC_FileName, ".",
AI_FileLen ,(ZTypLength)1
/*/////////*/ ); ////////////////////////////////
ZTypLength VL_ExtPos=ZCMainChars::FindPosFromEnd
(
APC_FileName, TTypChar(".") ,
AI_FileLen , (ZTypLength)1
);
/**********************************************/
if(VL_ExtPos<0 || VL_ExtPos==AI_FileLen-1)
{
@ -4017,34 +4031,54 @@ namespace ZNsMain
}/*
else if(VL_ExtPos==0)*/
ARR_CStringFileNew.append(APC_FileName, VL_ExtPos );
ARR_CStringFileNew+=".";
ARR_CStringFileNew.append(APC_FileExt , AI_ExtLength);
ARR_CStringFileNew.append(APC_FileName , VL_ExtPos );
ARR_CStringFileNew.append(TTypChar('.') );
ARR_CStringFileNew.append(APC_FileExt , AI_ExtLength );
return true;
}/*
template<typename TString, typename TTypChar> static bool SetExtName(
template<typename TString, typename TTypChar> static bool SetExtName
(
const TTypChar* APC_FileName, ZTypLength AI_FileLen ,
const TTypChar* APC_FileExt , ZTypLength AI_ExtLength,
TString& ARR_CStringFileNew
############# ) ###################################################*/
)
##################################################################*/
template<typename TString> static bool SetExtName(
const TString& AR_CStringFileNow, const TString& AR_CStringNewExt, TString& ARR_CStringFileNew)
{
return SetExtName( /////////////////////////////
AR_CStringFileNow.c_str(),
return SetExtName /**************/
(
AR_CStringFileNow.data() ,
AR_CStringFileNow.size() ,
AR_CStringNewExt.c_str() ,
AR_CStringNewExt.size() ,
AR_CStringNewExt .data() ,
AR_CStringNewExt .size() ,
RR(ARR_CStringFileNew)
/*//////////*/ ); //////////////////////////////
);
/********************************/
}/*
template<typename TString> static bool SetExtName(
const TString& AR_CStringFileNow, const TString& AR_CStringNewExt, TString& ARR_CStringFileNew) */
template<typename TString, typename TCharView> static bool SetExtName
(
const TCharView& AR_FileName, const TCharView& AR_FileExt, TString& ARR_CStringFileNew
)
/*#################################################################*/
{
return SetExtName /***************************/
(
AR_FileName.data(), AR_FileName.size(),
AR_FileExt .data(), AR_FileExt .size()
);
/*********************************************/
}
/*#################################################################*/
template<typename TString, typename TTypChar> static bool SetFileName
(
const TTypChar* APC_FileNow, ZTypLength AI_FileNowLen,
@ -4056,10 +4090,11 @@ namespace ZNsMain
/* 파일 APC_FileNow 의 확장자를 뺀 부분을 APC_FileNew 으로 바꾼,
새로운 파일명을 ARR_CStringFileNew 에 전달한다. */
ZTypLength VL_ExtPos=ZCMainChars::FindPos( /////////
APC_FileNow , ".",
AI_FileNowLen, 1
/*/////////*/ ); //////////////////////////////////
ZTypLength VL_ExtPos=ZCMainChars::FindPos
(
APC_FileNow , ".", AI_FileNowLen, 1
);
/***************************************/
if(VL_ExtPos<0)
{ ARR_CStringFileNew.append(APC_FileNew, AI_FileNewLen); return false; }
@ -4068,7 +4103,7 @@ namespace ZNsMain
/*else if(VL_ExtPos==0)*/
ARR_CStringFileNew.append(APC_FileNew, AI_FileNewLen);
ARR_CStringFileNew+=".";
ARR_CStringFileNew.append('.');
if(VL_ExtPos<AI_FileNowLen-1)
{
@ -4077,9 +4112,7 @@ namespace ZNsMain
APC_FileNow+VL_ExtPos+1, AI_FileNowLen-VL_ExtPos-1
);
}
/////////////////////////////
return true;
return true; /**************/
}/*
template<typename TString, typename TTypChar> static bool SetFileName
(
@ -4093,13 +4126,13 @@ namespace ZNsMain
template<typename TString> static bool SetFileName(
const TString& AR_CStringFileNow, const TString& AR_CStringNewExt, TString& ARR_CStringFileNew)
{
return SetFileName( ///////////////////////////
AR_CStringFileNow.data(),
AR_CStringFileNow.size(),
AR_CStringNewExt .data(),
AR_CStringNewExt .size(),
return SetFileName /**************************************/
(
AR_CStringFileNow.data(), AR_CStringFileNow.size(),
AR_CStringNewExt .data(), AR_CStringNewExt .size(),
RR(ARR_CStringFileNew)
/*//////////*/ ); /////////////////////////////
);
/*********************************************************/
}/*
template<typename TString> static bool SetFileName(
const TString& AR_CStringFileNow, const TString& AR_CStringNewExt, TString& ARR_CStringFileNew) */
@ -4134,8 +4167,7 @@ namespace ZNsMain
return APC_PathName+VL_FindPos+1;
}/*
template<typename TTypChar>
static const TTypChar* GetFileNameInPath ///////////////////////
template<typename TTypChar> static const TTypChar* GetFileNameInPath
(
const TTypChar* APC_PathName,
ZTypLength AI_Length ,
@ -4169,7 +4201,7 @@ namespace ZNsMain
static TString& GetFileNameInPath(const TChars& AR_PathName, TString& ARR_FileNameCStr) */
static bool RmAnyDir /*###############################################################*/
static bool RmAnyDir ///////////////////////////////////////////////////////////////////
( ZTypCPCh AP_DirName, void (*APF_ExceptHandle)
(
ZTypCPCh AP_FileName, ZCFileData& AR_CFileData, ZTypCPCCh AP_Message
@ -4236,7 +4268,7 @@ namespace ZNsMain
VB_RemoveFail=false;
}
while(VB_IsSearched = ::FindNextFileA(VH_File, &VO_CFileData));
while((VB_IsSearched = ::FindNextFileA(VH_File, &VO_CFileData))==TRUE);
::FindClose(VH_File);
@ -4257,7 +4289,7 @@ namespace ZNsMain
}/*
else*/
#elif defined(_REENTRANT) // && !defined(_WIN)
#elif defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_) // && !defined(_WIN)
ZCFileData VO_CFileData;
dirent VO_DirEnt ;
@ -4377,7 +4409,7 @@ namespace ZNsMain
::rmdir(AP_DirName); return true ;
//#elif defined(_REENTRANT) // && !defined(_WIN)
#else // !defined(_WIN) && !defined(_REENTRANT)
#else // !defined(_WIN) && !defined(_REENTRANT) || defined(_NO_USE_REEDDIR_R_)
ZCFileData VO_CFileData;
dirent* VP_DirEnt ;
@ -4456,7 +4488,7 @@ namespace ZNsMain
#endif //!defined(_WIN) && !defined(_REENTRANT)
}/*
static bool RmAnyDir ################################################################@#
static bool RmAnyDir //////////////////////////////////////////////////////////////////
(
ZTypCPCh AP_DirName ,
void (*APF_ExceptHandle)
@ -4615,7 +4647,7 @@ namespace ZNsMain
#else //!defined(_WIN)
ZCFileData VO_CFileData;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
dirent VO_DirEnt;
#endif
dirent* VP_DirEnt;
@ -4625,7 +4657,7 @@ namespace ZNsMain
if(VH_File==NULL)
return ZNsMain::ZNsEnum::ZERun_OK;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt = ::readdir(VH_File))!=0)
@ -4699,7 +4731,7 @@ namespace ZNsMain
}/*
else // !VO_CFileData.IsDir()*/
}/*
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt = ::readdir(VH_File))!=0)
@ -4834,7 +4866,7 @@ namespace ZNsMain
#else //!defined(_WIN)
ZCFileData VO_CFileData;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
dirent VO_DirEnt;
#endif
dirent* VP_DirEnt;
@ -4844,7 +4876,7 @@ namespace ZNsMain
if(VH_File==NULL)
return ZNsMain::ZNsEnum::ZERun_OK;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt = ::readdir(VH_File))!=0)
@ -4906,7 +4938,7 @@ namespace ZNsMain
}/*
else*/
}/*
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt = ::readdir(VH_File))!=0)
@ -5016,8 +5048,8 @@ namespace ZNsMain
#else //!defined(_WIN)
ZCFileData VO_CFileData;
#ifdef _REENTRANT
dirent VO_DirEnt;
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
dirent VO_DirEnt ;
#endif
dirent* VP_DirEnt;
TypeDirID VH_File= ::opendir(APC_DirPath);
@ -5025,7 +5057,7 @@ namespace ZNsMain
if(VH_File==NULL) return ZERun_OK;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt= ::readdir(VH_File))!=0)
@ -5083,7 +5115,7 @@ namespace ZNsMain
}/*
else*/
}/*
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt= ::readdir(VH_File))!=0)
@ -5173,7 +5205,7 @@ namespace ZNsMain
#else // !defined(_WIN)
ZCFileData VO_CFileData;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
dirent VO_DirEnt;
#endif
dirent* VP_DirEnt;
@ -5183,7 +5215,7 @@ namespace ZNsMain
if(VH_File==NULL)
return ZNsMain::ZNsEnum::ZERun_OK;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt= ::readdir(VH_File))!=0)
@ -5237,7 +5269,7 @@ namespace ZNsMain
}/*
else*/
}/*
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt= ::readdir(VH_File))!=0)
@ -5258,7 +5290,7 @@ namespace ZNsMain
ZNsMain::ZNsEnum::ZERun (*APF_EachFile)(ZTypCPCh APC_NowPath, ZCFileData& AR_CFileData, void* APC_VoidKey),
ZNsMain::ZNsEnum::ZERun (*APF_EachDir )(ZTypCPCh APC_NowPath, ZCFileData& AR_CFileData, void* APC_VoidKey)=0
)
/*##########################################################################*/
############################################################################*/
/*////////////////////////////////////////////////////
@ -5338,7 +5370,7 @@ namespace ZNsMain
#else // !defined(_WIN)
ZCFileData VO_CFileData;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
dirent VO_DirEnt;
#endif
dirent* VP_DirEnt;
@ -5348,7 +5380,7 @@ namespace ZNsMain
if(VH_File==NULL)
return ZNsMain::ZNsEnum::ZERun_OK;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt= ::readdir(VH_File))!=0)
@ -5400,7 +5432,7 @@ namespace ZNsMain
}/*
else*/
}/*
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt= ::readdir(VH_File))!=0)
@ -5491,7 +5523,7 @@ namespace ZNsMain
#else // !defined(_WIN)
ZCFileData VO_CFileData;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
dirent VO_DirEnt;
#endif
dirent* VP_DirEnt;
@ -5500,7 +5532,7 @@ namespace ZNsMain
if(VH_File==NULL) return ZNsMain::ZNsEnum::ZERun_OK;
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt = ::readdir(VH_File))!=0)
@ -5558,7 +5590,7 @@ namespace ZNsMain
}/*
else*/
}/*
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_NO_USE_REEDDIR_R_)
while(::readdir_r(VH_File, &VO_DirEnt, &VP_DirEnt)==0 && VP_DirEnt!=0)
#else
while((VP_DirEnt = ::readdir(VH_File))!=0)
@ -5730,11 +5762,11 @@ namespace ZNsMain
char* VP_NowDir = ::getcwd
((char*)ARR_CStringDir.data(), CI_BuffSize);
if(VP_NowDir==0) return false; ARR_CStringDir.
if(VP_NowDir==0){return false;} ARR_CStringDir.
resize(ZNsMain::ZftLength(VP_NowDir), ' ') ;
return true; /********************************/
return true; /*********************************/
}/*
if(false==AB_DoKeepPrev)*/
@ -7104,7 +7136,6 @@ namespace ZNsMain
{
return VI_EmptyBuffCnt;
}
////////////////
}
else // AL_Length<ZNsMain::ZTypInt(VP_IOBuff->iov_len)
{
@ -7135,12 +7166,10 @@ namespace ZNsMain
void MoveFirst()
{
if(mi_HeadPos<1) return;
if(mi_HeadPos<1) return ;
int VI_Index=0 ;
int i =mi_HeadPos;
int VI_ValidBuffCnt=GetSize();
int VI_Index= 0, i = mi_HeadPos;
int VI_ValidBuffCnt = GetSize() ;
for(; i<=mi_TailPos; ++i)
{
@ -7157,8 +7186,7 @@ namespace ZNsMain
}/*
for(i=0; i<mi_HeadPos; ++i)*/
mi_HeadPos=0 ;
mi_TailPos=VI_ValidBuffCnt-1;
mi_HeadPos= 0 ; mi_TailPos= VI_ValidBuffCnt-1;
}/*
void MoveFirst()*/
@ -7243,7 +7271,7 @@ namespace ZNsMain
#######################################################################################################*/
static bool ZfWriteFileRaw /*##########################################################################*/
static bool ZfWriteFileRaw /*//////////////////////////////////////////////////////////////////////////*/
(
ZTypCPCh APC_FileName , ZTypCPCh APC_Content ,
ZTypLength AL_ContentLen, bool AB_DoAppend=true, int AI_RightMode=-1
@ -7330,15 +7358,15 @@ namespace ZNsMain
#endif //!defined(_WIN)
}/*
static bool ZfWriteFileRaw( #############################################################################
static bool ZfWriteFileRaw( /////////////////////////////////////////////////////////////////////////////
(
ZTypCPCh APC_FileName , ZTypCPCh APC_Content ,
ZTypLength AL_ContentLen, bool AB_DoAppend=true, int AI_RightMode=-1
)
/*#####################################################################################################*/
#######################################################################################################*/
template<typename TStringData> bool ZftLoadFile /*############################*/
template<typename TStringData> bool ZftLoadFile /*////////////////////////////*/
(
TStringData& ARR_SaveCStr , ZTypCPCChar APC_FileName ,
ZTypLength AL_LoadSize=0 , ZTypLength AL_Offset =0,
@ -7350,6 +7378,9 @@ namespace ZNsMain
if(AL_Offset<0) AL_Offset=0;
typedef ZtCCharType<TStringData> ZCCharType;
typedef typename ZCCharType::TypeChar Typechar ;
#ifndef _WIN
int AH_FileDesc = ::open
@ -7363,10 +7394,8 @@ namespace ZNsMain
(AH_FileDesc, 0/*Offset*/, SEEK_END); // 실패시 -1
if(VL_LastPos == -1 || VL_LastPos<=AL_Offset)
{
::close(AH_FileDesc); return false;
}/*
if(VL_LastPos == -1 || VL_LastPos<=AL_Offset)*/
{ ::close(AH_FileDesc); return false; }
/*******************************************/
VL_LastPos -= AL_Offset;
@ -7389,17 +7418,19 @@ namespace ZNsMain
ZTypLength VL_ReadSize = 0 ;
ZTypCPChar VP_CopyStart =
const_cast<ZTypPChar>(ARR_SaveCStr.c_str())+VL_PrevSize ;
const_cast<ZTypPChar>(ARR_SaveCStr.data())+VL_PrevSize ;
if((VL_ReadSize = read(AH_FileDesc, VP_CopyStart, VL_LastPos))<0)
if((VL_ReadSize = ::read(AH_FileDesc, VP_CopyStart, VL_LastPos))<0)
{
ARR_SaveCStr.resize(VL_PrevSize, ' '); ::close(AH_FileDesc); return true;
ARR_SaveCStr.resize(VL_PrevSize, Typechar(0));
::close(AH_FileDesc); return true; /*********/
}
/*/////////////////////////////////////////////////////////////*/
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
ARR_SaveCStr.resize(VL_PrevSize+VL_ReadSize, ' ');
ARR_SaveCStr.resize(VL_PrevSize+VL_ReadSize, Typechar(0));
::close(AH_FileDesc); return true; /*:::::::::::*/
::close(AH_FileDesc); return true; /*********************/
#else //defined(_WIN)
@ -7436,27 +7467,27 @@ namespace ZNsMain
::SetFilePointer(VH_File, AL_Offset, NULL, FILE_BEGIN);
ZTypCPChar VP_CopyStart =
const_cast<ZTypPChar>(ARR_SaveCStr.c_str())+VL_PrevSize ;
const_cast<ZTypPChar>(ARR_SaveCStr.data())+VL_PrevSize ;
if(::ReadFile(VH_File, (LPVOID)VP_CopyStart, dwRead, &dwRead2, NULL)==FALSE)
{
ARR_SaveCStr.resize(VL_PrevSize+dwRead2, ' ');
ARR_SaveCStr.resize(VL_PrevSize+dwRead2, Typechar(0));
CloseHandle(VH_File); return false;
::CloseHandle(VH_File); return false; /**************/
}
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
::CloseHandle(VH_File);
if(dwRead2>0)
ARR_SaveCStr.resize(VL_PrevSize+dwRead2, ' ');
else ARR_SaveCStr.resize(VL_PrevSize , ' ');
ARR_SaveCStr.resize(VL_PrevSize+dwRead2, Typechar(0));
else ARR_SaveCStr.resize(VL_PrevSize , Typechar(0));
return true;
#endif //defined(_WIN)
}/*
template<typename TStringData> bool ZftLoadFile ################################
template<typename TStringData> bool ZftLoadFile ////////////////////////////////
(
TStringData& ARR_SaveCStr , ZTypCPCChar APC_FileName ,
ZTypLength AL_LoadSize=0 , ZTypLength AL_Offset =0,

View File

@ -18,83 +18,288 @@ namespace ZNsMain
{
public:
typedef TType Type ;
typedef TType TypeData;
typedef TType TypeData ;
typedef TTypArg TypeArg ;
typedef TSize TypeSize;
typedef ZtCArray ZCArray ;
typedef TSize TypeSize ;
public:
class ZCIterator;
class ZCNodePoint; class ZCNodePointN ;
public:
typedef Type* IterEasy;
typedef ZCIterator iterator;
typedef const ZCIterator const_iterator;
typedef TypeData* IterEasy ;
typedef TypeData* TypeNode ; // ZCLinkPoint::GetNode() 의 반환형.
typedef ZCNodePoint TypeIter ;
typedef ZtCArray TypeThis ;
typedef const TypeThis TypeThisC ;
typedef const TypeData TypeDataC ;
typedef const TypeData* TypeNodeC ; // ZCLinkPoint::GetNode() const 의 반환형.
typedef const TypeIter TypeIterC ;
typedef const TypeData* IterEasyC ;
/**********************************************/
typedef const ZCNodePoint ZCNodePointC;
typedef const ZCNodePoint iteratorC ;
/**********************************************/
typedef ZCNodePoint iterator ;
typedef ZCNodePointN const_iterator;
typedef ZCNodePointN iteratorN ;
typedef ZCNodePointN TypeIterN ;
public:
class ZCIterator
class ZCNodePoint
{
private: mutable
Type* mp_Data ; mutable
TSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치
ZCArray* mp_CArray;
private:
ZtCArray& mr_CArray; mutable
TypeData* mp_Data ; mutable
TypeSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치
public:
ZCIterator()
static ZCNodePoint MakeTailPoint(ZtCArray & AR_CArray)
{
mp_Data =0;
mp_CArray=0;
ml_ElePos=0;
ZCNodePoint VO_ZCLinkPoint(AR_CArray);
if(AR_CArray.size()>0) /****************************/
{
VO_ZCLinkPoint.mp_Data = AR_CArray.mp_TypeArr+AR_CArray.size()-1 ;
VO_ZCLinkPoint.ml_ElePos = AR_CArray.size() ;
}
return VO_ZCLinkPoint; /****************************/
}/*
ZCIterator()*/
static ZCNodePoint MakeTailPoint(ZtCArray & AR_CArray)*/
static ZCNodePoint MakeTailPoint(TypeIterC& AR_TypeIter)
{
ZCNodePoint VO_ZCLinkPoint(AR_TypeIter);
ZCIterator(ZCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)
const TypeSize VL_ArrSize = AR_TypeIter.mr_CArray.size();
if(VL_ArrSize>0) /**********************************/
{
VO_ZCLinkPoint.mp_Data = AR_TypeIter.mr_CArray+VL_ArrSize-1 ;
VO_ZCLinkPoint.ml_ElePos = VL_ArrSize ;
}
return VO_ZCLinkPoint; /****************************/
}/*
static ZCNodePoint MakeTailPoint(TypeIterC& AR_TypeIter)*/
public:
ZCNodePoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos) :
mr_CArray(AR_CArray)
/*****************************************************************/
{
mp_Data =&AR_CData ;
mp_CArray=&AR_CArray;
ml_ElePos=AL_ElePos ;
}/*
ZCIterator(ZCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/
ZCNodePoint(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/
ZCIterator(ZCArray& AR_CArray)
ZCNodePoint(ZtCArray& AR_CArray) : mr_CArray(AR_CArray)
{
mp_Data = AR_CArray.mp_TypeArr ;
mp_CArray=&AR_CArray ;
ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ;
}/*
ZCIterator(ZCArray& AR_CArray)*/
ZCNodePoint(ZtCArray& AR_CArray)*/
ZCIterator(const ZCArray& AR_CArray)
ZCNodePoint(const ZCNodePoint& rhs) : mr_CArray(rhs.mr_CArray)
{
mp_Data = AR_CArray.mp_TypeArr;
mp_CArray=const_cast<ZCArray*>(&AR_CArray);
ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ;
mp_Data = rhs.mp_Data ;
ml_ElePos= (mr_CArray.size()>0 ? 1 : 0 );
}/*
ZCIterator(const ZCArray& AR_CArray)*/
ZCNodePoint(const ZCNodePoint& rhs)*/
Type& operator*( ){return *mp_Data;}
Type* operator->(){return mp_Data;}
const Type& operator* () const{return *mp_Data;}
const Type* operator->() const{return mp_Data;}
TypeThis & GetMain() {return mr_CArray ;}
TypeNode GetNode() {return mp_Data ;}
ZCIterator& operator++( ){++mp_Data; ++ml_ElePos; return *this;}
ZCIterator operator++(int){++mp_Data; ++ml_ElePos; return *this;}
TypeThisC& GetMain() const{return mr_CArray ;}
TypeNodeC GetNode() const{return mp_Data ;}
const ZCIterator& operator++( ) const{++mp_Data; ++ml_ElePos; return *this;}
const ZCIterator operator++(int) const{++mp_Data; ++ml_ElePos; return *this;}
TypeSize GetPos () const{return ml_ElePos ;}
TypeSize size () const{return mr_CArray.size();}
ZCIterator operator+(TSize AL_AddPos) const
TypeData & operator* () {return *mp_Data;}
TypeData * operator->() {return mp_Data;}
TypeDataC& operator* () const{return *mp_Data;}
TypeDataC* operator->() const{return mp_Data;}
TypeIter & operator++( ) {++mp_Data; ++ml_ElePos; return *this;}
TypeIter operator++(int) {++mp_Data; ++ml_ElePos; return *this;}
TypeIter & operator--( ) {--mp_Data; --ml_ElePos; return *this;}
TypeIter operator--(int) {--mp_Data; --ml_ElePos; return *this;}
ZCNodePointC& operator++( ) const{++mp_Data; ++ml_ElePos; return *this;}
ZCNodePointC operator++(int) const{++mp_Data; ++ml_ElePos; return *this;}
ZCNodePointC& operator--( ) const{--mp_Data; --ml_ElePos; return *this;}
ZCNodePointC operator--(int) const{--mp_Data; --ml_ElePos; return *this;}
TypeIter operator+(TSize AL_AddPos) const
{
return ZCIterator(*this, mp_Data+AL_AddPos, ml_ElePos+AL_AddPos);
return ZCNodePoint(*this, mp_Data+AL_AddPos, ml_ElePos+AL_AddPos);
}/*
ZCIterator operator+(TSize AL_AddPos) const*/
TypeIter operator+(TSize AL_AddPos) const*/
bool operator == (ZCNodePointC& rhs) const
{ return ml_ElePos == rhs.ml_ElePos; }
bool operator != (ZCNodePointC& rhs) const
{ return ml_ElePos != rhs.ml_ElePos; }
bool operator > (ZCNodePointC& rhs) const
{ return ml_ElePos > rhs.ml_ElePos; }
bool operator >= (ZCNodePointC& rhs) const
{ return ml_ElePos >= rhs.ml_ElePos; }
bool operator < (ZCNodePointC& rhs) const
{ return ml_ElePos < rhs.ml_ElePos; }
bool operator <= (ZCNodePointC& rhs) const
{ return ml_ElePos <= rhs.ml_ElePos; }
bool operator == (TypeSize AL_Size) const
{ return ml_ElePos == AL_Size; }
bool operator != (TypeSize AL_Size) const
{ return ml_ElePos != AL_Size; }
bool operator > (TypeSize AL_Size) const
{ return ml_ElePos > AL_Size; }
bool operator >= (TypeSize AL_Size) const
{ return ml_ElePos >= AL_Size; }
bool operator < (TypeSize AL_Size) const
{ return ml_ElePos < AL_Size; }
bool operator <= (TypeSize AL_Size) const
{ return ml_ElePos <= AL_Size; }
public:
};/*
class ZCIterator
class ZCNodePoint*/
public :*/
class ZCNodePointN
{
private:
mutable TypeData* mp_Data ;
mutable TypeSize ml_ElePos; // *mp_Data 가 배열에서 차지하는 위치
const ZtCArray& mr_CArray;
public:
static ZCNodePointN MakeTailPoint(ZtCArray & AR_CArray)
{
ZCNodePointN VO_ZCLinkPoint(AR_CArray);
if(AR_CArray.size()>0) /****************************/
{
VO_ZCLinkPoint.mp_Data = AR_CArray.mp_TypeArr+AR_CArray.size()-1 ;
VO_ZCLinkPoint.ml_ElePos = AR_CArray.size() ;
}
return VO_ZCLinkPoint; /****************************/
}/*
static ZCNodePointN MakeTailPoint(ZtCArray & AR_CArray)*/
static ZCNodePointN MakeTailPoint(TypeIterC& AR_TypeIter)
{
ZCNodePointN VO_ZCLinkPoint(AR_TypeIter);
const TypeSize VL_ArrSize = AR_TypeIter.mr_CArray.size();
if(VL_ArrSize>0) /**********************************/
{
VO_ZCLinkPoint.mp_Data = AR_TypeIter.mr_CArray+VL_ArrSize-1 ;
VO_ZCLinkPoint.ml_ElePos = VL_ArrSize ;
}
return VO_ZCLinkPoint; /****************************/
}/*
static ZCNodePointN MakeTailPoint(TypeIterC& AR_TypeIter)*/
static ZCNodePointN MakeTailPoint(TypeIterN& AR_TypeIter)
{
ZCNodePointN VO_ZCLinkPoint(AR_TypeIter);
const TypeSize VL_ArrSize = AR_TypeIter.mr_CArray.size();
if(VL_ArrSize>0) /**********************************/
{
VO_ZCLinkPoint.mp_Data = AR_TypeIter.mr_CArray+VL_ArrSize-1 ;
VO_ZCLinkPoint.ml_ElePos = VL_ArrSize ;
}
return VO_ZCLinkPoint; /****************************/
}/*
static ZCNodePointN MakeTailPoint(TypeIterN& AR_TypeIter)*/
public:
ZCNodePointN(const ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos) :
mr_CArray(AR_CArray)
/*****************************************************************/
{
mp_Data =&AR_CData ;
ml_ElePos=AL_ElePos ;
}/*
ZCNodePointN(ZtCArray& AR_CArray, Type& AR_CData, TSize AL_ElePos)*/
ZCNodePointN(ZtCArray& AR_CArray) : mr_CArray(AR_CArray)
{
mp_Data = AR_CArray.mp_Data ;
ml_ElePos=(AR_CArray.size()>0 ? 1 : 0 ) ;
}/*
ZCNodePointN(ZtCArray& AR_CArray)*/
ZCNodePointN(const ZCNodePointN& rhs) : mr_CArray(rhs.mr_CArray)
{
mp_Data = rhs.mp_Data ;
ml_ElePos=(mr_CArray.size()>0 ? 1 : 0 ) ;
}/*
ZCNodePointN(const ZCNodePointN& rhs)*/
ZCNodePointN(const ZCNodePoint & rhs) : mr_CArray(rhs.mr_CArray)
{
mp_Data = rhs.mp_Data ;
ml_ElePos=(mr_CArray.size()>0 ? 1 : 0 ) ;
}/*
ZCNodePointN(const ZCNodePoint & rhs)*/
TypeSize size () const{return mr_CArray.size();}
TypeSize GetPos() const{return ml_ElePos ;}
TypeDataC& operator* () const{return *mp_Data;}
TypeDataC* operator->() const{return mp_Data;}
TypeIterN& operator++( ) const{++mp_Data; ++ml_ElePos; return *this;}
TypeIterN operator++(int) const{++mp_Data; ++ml_ElePos; return *this;}
TypeIterN operator+(TSize AL_AddPos) const
{
return ZCNodePointN(*this, mp_Data+AL_AddPos, ml_ElePos+AL_AddPos);
}/*
TypeIterN operator+(TSize AL_AddPos) const*/
bool operator == (const ZCNodePointN& rhs) const
{ return ml_ElePos == rhs.ml_ElePos; }
bool operator != (const ZCNodePointN& rhs) const
{ return ml_ElePos != rhs.ml_ElePos; }
bool operator > (const ZCNodePointN& rhs) const
{ return ml_ElePos > rhs.ml_ElePos; }
bool operator >= (const ZCNodePointN& rhs) const
{ return ml_ElePos >= rhs.ml_ElePos; }
bool operator < (const ZCNodePointN& rhs) const
{ return ml_ElePos < rhs.ml_ElePos; }
bool operator <= (const ZCNodePointN& rhs) const
{ return ml_ElePos <= rhs.ml_ElePos; }
bool operator == (TypeSize AL_Size) const
{ return ml_ElePos == AL_Size; }
bool operator != (TypeSize AL_Size) const
{ return ml_ElePos != AL_Size; }
bool operator > (TypeSize AL_Size) const
{ return ml_ElePos > AL_Size; }
bool operator >= (TypeSize AL_Size) const
{ return ml_ElePos >= AL_Size; }
bool operator < (TypeSize AL_Size) const
{ return ml_ElePos < AL_Size; }
bool operator <= (TypeSize AL_Size) const
{ return ml_ElePos <= AL_Size; }
public:
};/*
class ZCNodePointN*/
public :
/**************************************************************************/
protected:
enum{ZEAddSize=20};
protected:
@ -137,30 +342,30 @@ namespace ZNsMain
}/*
~ZtCArray()*/
ZCArray& operator=(const ZCArray& rhs)
ZtCArray& operator=(const ZtCArray& rhs)
{
if(this==&rhs) return *this ;
ReAlloc(rhs.ml_UseSize, false);
ml_UseSize=rhs.ml_UseSize;
ml_AllSize=rhs.ml_AllSize;
ml_UseSize = rhs.ml_UseSize;
ml_AllSize = rhs.ml_AllSize;
for(TypeSize i=0; i<ml_UseSize; ++i)
{
mp_TypeArr[i]=rhs.mp_TypeArr[i];
mp_TypeArr[i] = rhs.mp_TypeArr[i];
}/*
for(TypeSize i=0; i<ml_UseSize; ++i)*/
return *this;
}/*
ZCArray& operator=(const ZCArray& rhs)*/
ZtCArray& operator=(const ZtCArray& rhs)*/
ZCArray& operator()(TypeArg AR_TypeArg)
ZtCArray& operator()(TypeArg AR_TypeArg)
{
AddTail(AR_TypeArg); return *this;
}/*
ZCArray& operator()(TypeArg AR_TypeArg)*/
ZtCArray& operator()(TypeArg AR_TypeArg)*/
void Delete()
@ -185,7 +390,7 @@ namespace ZNsMain
TypeSize GetAddSize() const{return ml_AddSize;}
TypeSize size () const{return ml_UseSize;}
TypeSize capacity() const{return ml_AllSize;}
TypeSize capacity () const{return ml_AllSize;}
void SetAddSize(TypeSize AL_NewAddSize)
@ -198,7 +403,7 @@ namespace ZNsMain
{
if(AL_NewUseSize>=0 && AL_NewUseSize<=ml_AllSize)
{
ml_UseSize=AL_NewUseSize;
ml_UseSize = AL_NewUseSize;
}/*
if(AL_NewUseSize>=0 && AL_NewUseSize<=ml_AllSize)*/
}/*
@ -259,44 +464,12 @@ namespace ZNsMain
Type& operator[](TypeSize AL_Index)
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'Type& operator[](TypeSize AL_Index)"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<", "<<AL_Index<<">="<<ml_UseSize<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index] ;
}/*
Type& operator[](TypeSize AL_Index)*/
const Type& operator[](TypeSize AL_Index) const
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt", std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'const Type& operator[](TypeSize AL_Index) const"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index] ;
}/*
const Type& operator[](TypeSize AL_Index) const*/
@ -304,44 +477,12 @@ namespace ZNsMain
Type& GetData(TypeSize AL_Index)
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'Type& GetData(TypeSize AL_Index)"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index] ;
}/*
Type& GetData(TypeSize AL_Index)*/
const Type& GetData(TypeSize AL_Index) const
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'const Type& GetData(TypeSize AL_Index) const"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index];
}/*
const Type& GetData(TypeSize AL_Index) const*/
@ -354,8 +495,8 @@ namespace ZNsMain
for(TypeSize i=ml_UseSize-2; i>=0; --i)
{
mp_TypeArr[i+1]=mp_TypeArr[i] ;
}/*
for(TypeSize i=ml_UseSize-2; i>=0; --i)*/
}
/*:::::::::::::::::::::::::::::::::::*/
mp_TypeArr[0]=AR_TypeArg ;
}/*
@ -370,8 +511,8 @@ namespace ZNsMain
for(TypeSize i=ml_UseSize-2; i>=0; --i)
{
mp_TypeArr[i+1]=mp_TypeArr[i] ;
}/*
for(TypeSize i=ml_UseSize-2; i>=0; --i)*/
}
/*:::::::::::::::::::::::::::::::::::*/
return mp_TypeArr[0] ;
}/*
@ -401,11 +542,17 @@ namespace ZNsMain
void push_front(TypeArg AR_TypeArg){AddHead(AR_TypeArg);}
void push_back (TypeArg AR_TypeArg){AddTail(AR_TypeArg);}
Type& push_front(){return AddHead();}
Type& push_back (){return AddTail();}
TypeData& push_front(){return AddHead();}
TypeData& push_back (){return AddTail();}
ZCIterator begin() {return ZCIterator(*this);}
const ZCIterator begin() const{return ZCIterator(*this);}
TypeIter begin () {return ZCNodePoint (*this);}
TypeIterN begin () const{return ZCNodePointN(*this);}
iterator end () { return ZCNodePoint ::MakeTailPoint(*this); }
iteratorN end () const{ return ZCNodePointN::MakeTailPoint(*this); }
iteratorN cbegin() const{ return ZCNodePointN(*this); }
iteratorN cend () const{ return ZCNodePointN::MakeTailPoint(*this); }
template<typename TFunctor> void IterElement(TFunctor AO_Functor)
@ -418,9 +565,6 @@ namespace ZNsMain
GetObjRef(AO_Functor)( *VP_TypeArr );
++VP_TypeArr; //////////////////
/* ZtCTypeData 으로 인해서, AO_Functor 이 함수일 때뿐이 아니라,
operator() 연산자를 가진 object 포인터일 때도 사용할 수 있게 되었다. */
}/*
__for0(TypeSize, i, ml_UseSize)*/
}/*
@ -429,110 +573,6 @@ namespace ZNsMain
template<typename TFunctor, typename TTypeHelp>
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
{
/*/////////////////////////////////////////////////////////////////////////////
■ TTypeHelp 가 class 일 경우, 크기가 커서 참조로 넘어가야 한다면,
IterElement<myFunctor, myClass&>(myFunctor_obj, myClass_Obj);
의 형태로 호출할 게 아니라, ZNsMain::ZtCObjectPtr<> 을 사용하여,
myClass myClass_Obj;
ZNsMain::ZtCObjectPtr<myClass> myCObjPtr(myClass_Obj);
IterElement(myFunctor_obj,
ZNsMain::ZtCObjectPtr<myClass>(myClass_Obj));
형태를 사용하면 좋을 것 같다. -- 2014-06-16 23:11:00
ZCCheckRef::PassData() 으로 인해, 인수를 ZtCRef 클래스를 이용해 인수를 참조
로 넘길 수 있게 되었다. -- 2021-03-10 16:56
이제는 ZtCRef 과 ZCCheckRef 클래스 템플릿을 사용하면 된다. -- 2021-03-11 11:00
이제는 ZftMCR() 과 ZftMCP() 을 사용하면 된다. -- 2025-08-07 17:55
■ 예제1 -- 2025-08-07 17:35
#include <iostream>
#include "ZCppMain/ZtCArray.H"
using namespace std ;
using namespace ZNsMain;
int main()
{
ZtCArray<int> myArray;
myArray.AddTail(10);
myArray.AddTail(20);
myArray.AddTail(30);
myArray.AddTail(40);
class CHelpObj
{
public:
CHelpObj()
{
}
CHelpObj(const CHelpObj& rhs)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
public:
}; CHelpObj VO_CHelpObj; cout<<"VO_CHelpObj Ptr : "<<&VO_CHelpObj<<endl;
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
myArray.IterElement(StFunctor ::ShowElement);
myArray.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
myArray.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
myArray.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
myArray.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
myArray.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
return 0;
}
/////////////////////////////////////////////////////////////////////////////*/
typedef ZNsMain::
ZtCCheckRef<TTypeHelp> ZCCheckRef;
@ -552,33 +592,20 @@ namespace ZNsMain
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)*/
template<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2>
void IterElement(TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2)
template /*#####################################################*/
<
typename TFunctor ,
typename TTypeHelp1 ,
typename TTypeHelp2
>
void IterElement
(
TFunctor AO_Functor ,
TTypeHelp1 AO_TypeHelp1 ,
TTypeHelp2 AO_TypeHelp2
)
/*##############################################################*/
{
/*/////////////////////////////////////////////////////////////////////////////
■ TTypeHelp 가 class 일 경우, 크기가 커서 참조로 넘어가야 한다면,
IterElement<myFunctor, myClass&>(myFunctor_obj, myClass_Obj);
의 형태로 호출할 게 아니라, ZNsMain::ZtCObjectPtr<> 을 사용하여,
myClass myClass_Obj; ZNsMain::ZtCObjectPtr<myClass> myCObjPtr(myClass_Obj);
IterElement(myFunctor_obj, ZNsMain::ZtCObjectPtr<myClass>(myClass_Obj));
형태를 사용하면 좋을 것 같다. -- 2014-06-16 23:11:00
ZCCheckRef::PassData() 으로 인해, 인수를 ZtCRef 클래스를 이용해 인수를 참조
로 넘길 수 있게 되었다. -- 2021-03-10 16:56
이제는 ZtCRef 과 ZCCheckRef 클래스 템플릿을 사용하면 된다. -- 2021-03-11 11:00
/////////////////////////////////////////////////////////////////////////////*/
typedef ZNsMain::ZtCCheckRef<TTypeHelp1> ZCCheckRef1;
typedef ZNsMain::ZtCCheckRef<TTypeHelp2> ZCCheckRef2;
@ -596,8 +623,19 @@ namespace ZNsMain
}/*
__for0(TypeSize, i, ml_UseSize)*/
}/*
template<typename TFunctor, typename TTypeHelp1, typename TTypeHelp2>
void IterElement(TFunctor AO_Functor, TTypeHelp1 AO_TypeHelp1, TTypeHelp2 AO_TypeHelp2)*/
template #########################################################
<
typename TFunctor ,
typename TTypeHelp1 ,
typename TTypeHelp2
>
void IterElement
(
TFunctor AO_Functor ,
TTypeHelp1 AO_TypeHelp1 ,
TTypeHelp2 AO_TypeHelp2
)
################################################################*/
/*///////////////////////////////////////////////////////////////////////////
@ -709,103 +747,97 @@ namespace ZNsMain
-- 2011-06-12 20:42:00
GetDataInIter() 를 ItD() 로 대체. -- 2025-10-15 15:49
///////////////////////////////////////////////////////////////////////////*/
Type* GetHeadIterEasy (){return mp_TypeArr ;}
Type* GetTailIterEasy (){return mp_TypeArr+ml_UseSize-1 ;}
IterEasyID GetHeadIterEasyID(){return (IterEasyID) mp_TypeArr ;}
IterEasyID GetTailIterEasyID(){return (IterEasyID)(mp_TypeArr+ml_UseSize-1);}
TypeData * GetHeadIterEasy () {return mp_TypeArr ;}
TypeData * GetTailIterEasy () {return mp_TypeArr+ml_UseSize-1 ;}
IterEasyID GetHeadIterEasyID () {return (IterEasyID ) mp_TypeArr ;}
IterEasyID GetTailIterEasyID () {return (IterEasyID )(mp_TypeArr+ml_UseSize-1);}
const Type* GetHeadIterEasy () const{return mp_TypeArr ;}
const Type* GetTailIterEasy () const{return mp_TypeArr+ml_UseSize-1 ;}
const IterEasyID GetHeadIterEasyID() const{return (IterEasyID) mp_TypeArr ;}
const IterEasyID GetTailIterEasyID() const{return (IterEasyID)(mp_TypeArr+ml_UseSize-1);}
TypeDataC* GetHeadIterEasy () const{return mp_TypeArr ;}
TypeDataC* GetTailIterEasy () const{return mp_TypeArr+ml_UseSize-1 ;}
IterEasyIDc GetHeadIterEasyID () const{return (IterEasyIDc) mp_TypeArr ;}
IterEasyIDc GetTailIterEasyID () const{return (IterEasyIDc)(mp_TypeArr+ml_UseSize-1);}
void MoveNextIter(Type*& APR_CType ) const{++APR_CType ;}
void MoveNextIter(iterator& ARR_CIterator) const{++ARR_CIterator;}
void MoveNextIter(IterEasyID& AI_IterEasyID) const
{ MoveNextIter((Type*&)AI_IterEasyID); }
void MoveNextIter(const Type*& APR_CType ) const{++APR_CType ;}
void MoveNextIter(const iterator& ARR_CIterator) const{++ARR_CIterator;}
void MoveNextIter(const IterEasyID& AI_IterEasyID)
const{ MoveNextIter((const Type*&)AI_IterEasyID); }
IterEasyIDc GetHeadIterEasyIDc() const{return (IterEasyIDc) mp_TypeArr ;}
IterEasyIDc GetTailIterEasyIDc() const{return (IterEasyIDc)(mp_TypeArr+ml_UseSize-1);}
void MovePrevIter(Type*& APR_CType ) const{--APR_CType ;}
void MovePrevIter(iterator& ARR_CIterator) const{--ARR_CIterator;}
void MovePrevIter(IterEasyID& AI_IterEasyID) const
{ MovePrevIter((Type*&)AI_IterEasyID); }
void MovePrevIter(const Type*& APR_CType ) const{--APR_CType ;}
void MovePrevIter(const iterator& ARR_CIterator) const{--ARR_CIterator;}
void MovePrevIter(const IterEasyID& AI_IterEasyID)
const{ MovePrevIter((const Type*&)AI_IterEasyID); }
void MoveNextIter(TypeData* & APR_CType ) const{++APR_CType ;}
void MoveNextIter(iterator & ARR_CIterator) const{++ARR_CIterator;}
void MoveNextIter(IterEasyID & AI_IterEasyID) const
{ MoveNextIter((TypeData *&)AI_IterEasyID); }
void MoveNextIter(TypeDataC* & APR_CType ) const{++APR_CType ;}
void MoveNextIter(iteratorC & ARR_CIterator) const{++ARR_CIterator;}
void MoveNextIter(IterEasyIDc& AI_IterEasyID) const
{ MoveNextIter((TypeDataC*&)AI_IterEasyID); }
void MovePrevIter(TypeData* & APR_CType ) const{--APR_CType ;}
void MovePrevIter(iterator & ARR_CIterator) const{--ARR_CIterator;}
void MovePrevIter(IterEasyID & AI_IterEasyID) const
{ MovePrevIter((TypeData *&)AI_IterEasyID); }
void MovePrevIter(TypeDataC* & APR_CType ) const{--APR_CType ;}
void MovePrevIter(iteratorC & ARR_CIterator) const{--ARR_CIterator;}
void MovePrevIter(IterEasyIDc& AI_IterEasyID) const
{ MovePrevIter((TypeDataC*&)AI_IterEasyID); }
Type& GetDataInIter(Type* AP_CType ){return *AP_CType ;}
Type& GetDataInIter(iterator& ARR_CIterator){return *ARR_CIterator ;}
Type& GetDataInIter(IterEasyID AI_IterEasyID){return *(Type*)AI_IterEasyID;}
TypeData * ItHEasy() {return mp_TypeArr ;}
TypeData * ItTEasy() {return mp_TypeArr+ml_UseSize-1 ;}
IterEasyID ItHID () {return (IterEasyID ) mp_TypeArr ;}
IterEasyID ItTID () {return (IterEasyID )(mp_TypeArr+ml_UseSize-1);}
const Type& GetDataInIter(const Type* AP_CType ) const{return *AP_CType;}
const Type& GetDataInIter(const iterator& ARR_CIterator) const{return *ARR_CIterator;}
const Type& GetDataInIter(const IterEasyID AI_IterEasyID) const
{ return *(const Type*)AI_IterEasyID; }
TypeDataC* ItHEasy() const{return mp_TypeArr ;}
TypeDataC* ItTEasy() const{return mp_TypeArr+ml_UseSize-1 ;}
IterEasyIDc ItHID () const{return (IterEasyIDc) mp_TypeArr ;}
IterEasyIDc ItTID () const{return (IterEasyIDc)(mp_TypeArr+ml_UseSize-1);}
IterEasyIDc ItHIDc () const{return (IterEasyIDc) mp_TypeArr ;}
IterEasyIDc ItTIDc () const{return (IterEasyIDc)(mp_TypeArr+ml_UseSize-1);}
void ItNext(TypeData* & APR_CType ) const{++APR_CType ;}
void ItNext(iterator & ARR_CIterator) const{++ARR_CIterator;}
void ItNext(IterEasyID & AI_IterEasyID) const
{ ItNext((TypeData *&)AI_IterEasyID); }
void ItNext(TypeDataC* & APR_CType ) const{++APR_CType ;}
void ItNext(iteratorC & ARR_CIterator) const{++ARR_CIterator;}
void ItNext(IterEasyIDc & AI_IterEasyID) const
{ ItNext((TypeDataC*&)AI_IterEasyID); }
void ItPrev(TypeData* & APR_CType ) const{--APR_CType ;}
void ItPrev(iterator & ARR_CIterator) const{--ARR_CIterator;}
void ItPrev(IterEasyID & AI_IterEasyID) const
{ ItPrev((TypeData *&)AI_IterEasyID); }
void ItPrev(TypeDataC* & APR_CType ) const{--APR_CType ;}
void ItPrev(iteratorC & ARR_CIterator) const{--ARR_CIterator;}
void ItPrev(IterEasyIDc & AI_IterEasyID) const
{ ItPrev((TypeDataC*&)AI_IterEasyID); }
TypeData& ItD(TypeData * AP_CType ) {return *AP_CType ;}
TypeData& ItD(iterator & ARR_CIterator) {return *ARR_CIterator;}
TypeData& ItD(IterEasyID AI_IterEasyID)
{ return *(TypeData *)AI_IterEasyID; }
TypeDataC& ItD(TypeDataC * AP_CType ) const{return *AP_CType;}
TypeDataC& ItD(iteratorC & ARR_CIterator) const{return *ARR_CIterator;}
TypeDataC& ItD(IterEasyIDc AI_IterEasyID) const
{ return *(TypeDataC*)AI_IterEasyID; }
Type& GetDataInIter(Type* AP_Type , TypeSize AI_FarNum)
TypeData & ItD(TypeData * AP_Type , TypeSize AI_FarNum)
{ return *(AP_Type + AI_FarNum) ; }
Type& GetDataInIter(iterator& ARR_CIterator , TypeSize AI_FarNum)
TypeData & ItD(iterator & ARR_CIterator , TypeSize AI_FarNum)
{ return *(ARR_CIterator+AI_FarNum) ; }
Type& GetDataInIter(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum)
{ return GetDataInIter((Type*)ARRI_IterEasyID, AI_FarNum); }
TypeData & ItD(IterEasyID AH_IterEasyID , TypeSize AI_FarNum)
{ return ItD((TypeData*)AH_IterEasyID , AI_FarNum); }
const Type& GetDataInIter(const Type* AP_Type , TypeSize AI_FarNum) const
TypeDataC& ItD(TypeDataC * AP_Type , TypeSize AI_FarNum) const
{ return *(AP_Type + AI_FarNum); }
const Type& GetDataInIter(iterator& ARR_CIterator, TypeSize AI_FarNum) const
TypeDataC& ItD(iterator & ARR_CIterator , TypeSize AI_FarNum) const
{ return *(ARR_CIterator+AI_FarNum); }
const Type& GetDataInIter(const IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum) const
{ return GetDataInIter((const Type*)ARRI_IterEasyID, AI_FarNum); }
Type* ItHEasy(){return mp_TypeArr ;}
Type* ItTEasy(){return mp_TypeArr+ml_UseSize-1 ;}
IterEasyID ItHID (){return (IterEasyID) mp_TypeArr ;}
IterEasyID ItTID (){return (IterEasyID)(mp_TypeArr+ml_UseSize-1);}
const Type* ItHEasy () const{return mp_TypeArr ;}
const Type* ItTEasy () const{return mp_TypeArr+ml_UseSize-1 ;}
const IterEasyID ItHID() const{return (IterEasyID) mp_TypeArr ;}
const IterEasyID ItTID() const{return (IterEasyID)(mp_TypeArr+ml_UseSize-1);}
void ItNext(Type*& APR_CType ) const{++APR_CType ;}
void ItNext(iterator& ARR_CIterator) const{++ARR_CIterator;}
void ItNext(IterEasyID& AI_IterEasyID) const
{ ItNext((Type*&)AI_IterEasyID); }
void ItNext(const Type*& APR_CType ) const{++APR_CType ;}
void ItNext(const iterator& ARR_CIterator) const{++ARR_CIterator;}
void ItNext(const IterEasyID& AI_IterEasyID)
const{ ItNext((const Type*&)AI_IterEasyID); }
void ItPrev(Type*& APR_CType ) const{--APR_CType ;}
void ItPrev(iterator& ARR_CIterator) const{--ARR_CIterator;}
void ItPrev(IterEasyID& AI_IterEasyID) const
{ ItPrev((Type*&)AI_IterEasyID); }
void ItPrev(const Type*& APR_CType ) const{--APR_CType ;}
void ItPrev(const iterator& ARR_CIterator) const{--ARR_CIterator;}
void ItPrev(const IterEasyID& AI_IterEasyID)
const{ ItPrev((const Type*&)AI_IterEasyID); }
Type& ItD(Type* AP_Type ){return GetDataInIter(AP_Type );}
Type& ItD(iterator& ARR_CIterator ){return GetDataInIter(ARR_CIterator );}
Type& ItD(IterEasyID ARRI_IterEasyID ){return GetDataInIter(ARRI_IterEasyID );}
Type& ItD(Type* AP_Type , TypeSize AI_FarNum){return GetDataInIter(AP_Type , AI_FarNum );}
Type& ItD(iterator& ARR_CIterator , TypeSize AI_FarNum){return GetDataInIter(ARR_CIterator , AI_FarNum);}
Type& ItD(IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum){return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
const Type& ItD(const Type* AP_Type ) const{return GetDataInIter(AP_Type );}
const Type& ItD(const iterator& ARR_CIterator ) const{return GetDataInIter(ARR_CIterator );}
const Type& ItD(const IterEasyID ARRI_IterEasyID ) const{return GetDataInIter(ARRI_IterEasyID );}
const Type& ItD(const Type* AP_Type , TypeSize AI_FarNum) const{return GetDataInIter(AP_Type );}
const Type& ItD(const iterator& ARR_CIterator , TypeSize AI_FarNum) const{return GetDataInIter(ARR_CIterator , AI_FarNum);}
const Type& ItD(const IterEasyID ARRI_IterEasyID, TypeSize AI_FarNum) const{return GetDataInIter(ARRI_IterEasyID, AI_FarNum);}
TypeDataC& ItD(IterEasyIDc AH_IterEasyID , TypeSize AI_FarNum) const
{ return ItD((TypeDataC*)AH_IterEasyID, AI_FarNum); }
public:
};/*
@ -816,11 +848,11 @@ namespace ZNsMain
class ZtCArray /////////////////////////*/
///////////////////////////////////////////////
////////////////////////////////////////////////
////////////// end class ZCArray //////////////
////////////// end class ZtCArray //////////////
///////////////////////////////////////////////
////////////////////////////////////////////////
@ -870,44 +902,12 @@ namespace ZNsMain
Type& operator[](TSize AL_Index)
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'Type& operator[](TSize AL_Index)"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<", "<<AL_Index<<">="<<ml_UseSize<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index] ;
}/*
Type& operator[](TSize AL_Index)*/
const Type& operator[](TSize AL_Index) const
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'const Type& operator[](TSize AL_Index) const"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index] ;
}/*
const Type& operator[](TSize AL_Index) const*/
@ -915,44 +915,12 @@ namespace ZNsMain
Type& GetData(TSize AL_Index)
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'Type& GetData(TSize AL_Index)"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index] ;
}/*
Type& GetData(TSize AL_Index)*/
const Type& GetData(TSize AL_Index) const
{
#ifdef _DEBUG
if(AL_Index>=ml_UseSize)
{
std::fstream fileout("DEBUG.txt",std::ios::out | std::ios::app);
fileout<<std::endl<<"File : "<<__FILE__<<std::endl<<"Line : "<<__LINE__<<std::endl;
fileout<<"Error In 'const Type& GetData(TSize AL_Index) const"<<std::endl;
fileout<<" AL_Index>=ml_UseSize"<<std::endl;
fileout.close();
::exit(1);
}/*
if(AL_Index>=ml_UseSize)*/
#endif //_DEBUG
return mp_TypeArr[AL_Index];
}/*
const Type& GetData(TSize AL_Index) const*/

4037
ZCppMain/ZtCLinkList.H Normal file

File diff suppressed because it is too large Load Diff

View File

@ -480,7 +480,7 @@ namespace ZNsMain
(
const TypeChar* AP_CharID, ZCStringData& ARR_CStringSave
) const
/*#############################################################################*/
###############################################################################*/
ZCStringData GetElementValueByID(const ZCStringData& AR_CStringID) const
@ -4040,7 +4040,7 @@ namespace ZNsMain
const TypeChar* APC_XmlData ,
TypeLength AI_DataLen
)
/*#############################################################################*/
###############################################################################*/
template<typename TViewLoadXml, typename TMainChars>
ZERunEx Exec(TViewLoadXml& AR_CViewLoadXml, const TMainChars& AR_CMainChars)

File diff suppressed because it is too large Load Diff

View File

@ -2422,6 +2422,7 @@ namespace ZNsMain
using ZNsMain::ZtCObjAVL;
namespace ZNsTmplParam
{

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -69,39 +69,39 @@ namespace ZNsMain
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
)
/*##################################################*/
{
if(AL_FirstIndex<AL_LastIndex)
if(AL_HeadIndex<AL_TailIndex)
{
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1 ;
TypeSize i = AL_HeadIndex ;
TypeSize j = AL_TailIndex+1 ;
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
do //////
{
while(AL_LastIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_FirstIndex<j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()) );
while(AL_HeadIndex <j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()) );
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
if(i<j) SwapLinkPtr( APA_LinkPtrArr[i], APA_LinkPtrArr[j] );
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
않아서 좋다.
*/
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
APA_LinkPtrArr[AL_HeadIndex] = APA_LinkPtrArr[j];
APA_LinkPtrArr[j ] = VP_PivotLinkPtr ;
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
}/*
if(AL_FirstIndex<AL_LastIndex)*/
if(AL_HeadIndex<AL_TailIndex)*/
}/*
template
<typename TTypFuncIsMore, typename TTypFuncIsLess>
@ -110,91 +110,91 @@ namespace ZNsMain
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
)
###########################################################*/
####################################################*/
static void QuickSortAsc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
)
/*####################*/
{
if(AL_FirstIndex<AL_LastIndex)
if(AL_HeadIndex<AL_TailIndex)
{
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1 ;
TypeSize i=AL_HeadIndex ;
TypeSize j=AL_TailIndex+1 ;
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
do ////
{
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() < VP_PivotLinkPtr->GetData());
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() > VP_PivotLinkPtr->GetData());
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->GetData() < VP_PivotLinkPtr->GetData());
while(AL_HeadIndex <j && APA_LinkPtrArr[--j]->GetData() > VP_PivotLinkPtr->GetData());
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지 않아서 좋다.*/
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지 않아서 좋다.
*/
APA_LinkPtrArr[AL_HeadIndex] = APA_LinkPtrArr[j] ;
APA_LinkPtrArr[j ] = VP_PivotLinkPtr ;
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
QuickSortAsc(APA_LinkPtrArr, AL_FirstIndex, j-1 );
QuickSortAsc(APA_LinkPtrArr, j+1, AL_LastIndex);
QuickSortAsc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSortAsc(APA_LinkPtrArr, j+1, AL_TailIndex);
}/*
if(AL_FirstIndex<AL_LastIndex)*/
if(AL_HeadIndex<AL_TailIndex)*/
}/*
static void QuickSortAsc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
)
/*####################*/
static void QuickSortDesc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
)
/*#####################*/
{
if(AL_FirstIndex<AL_LastIndex)
if(AL_HeadIndex<AL_TailIndex)
{
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1;
TypeSize i= AL_HeadIndex ;
TypeSize j= AL_TailIndex+1;
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
do //////
{
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() > VP_PivotLinkPtr->GetData());
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() < VP_PivotLinkPtr->GetData());
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->GetData() > VP_PivotLinkPtr->GetData());
while(AL_HeadIndex <j && APA_LinkPtrArr[--j]->GetData() < VP_PivotLinkPtr->GetData());
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
않아서 좋다.
*/
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
QuickSortDesc(APA_LinkPtrArr, AL_FirstIndex, j-1);
QuickSortDesc(APA_LinkPtrArr, j+1, AL_LastIndex);
QuickSortDesc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSortDesc(APA_LinkPtrArr, j+1, AL_TailIndex);
}/*
if(AL_FirstIndex<AL_LastIndex)*/
if(AL_HeadIndex<AL_TailIndex)*/
}/*
static void QuickSortDesc
(
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
)
/*#####################*/
@ -239,7 +239,7 @@ namespace ZNsMain
}/*
//////////////////////////*/
ZCLink::MakeCircle
ZCLink::MakeRing
(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
ARR_CObjList.mp_HeadLink = VPP_LinkPtrArr[0];
@ -278,8 +278,8 @@ namespace ZNsMain
for(; i<VL_SortSize; ++i)
{
VPP_LinkPtrArr[i]=VP_TempLink;
VP_TempLink =VP_TempLink->GetNextPtr();
VPP_LinkPtrArr[i]= VP_TempLink;
VP_TempLink = VP_TempLink->GetNextPtr();
}/*
///////////////////////*/
@ -290,9 +290,9 @@ namespace ZNsMain
{
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
}/*
//////////////////////////*/
for(i=1; i<VL_SortSize; ++i)*/
ZCLink::MakeCircle
ZCLink::MakeRing
(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
ARR_CObjList.mp_HeadLink = VPP_LinkPtrArr[0];
@ -457,9 +457,9 @@ namespace ZNsMain
ARR_AddList.JoinBefore ////////////////////
(
ARR_CutList.CutLink(VP_TempLink,1),
VP_LhsTemp,
VL_LhsTempPos
ARR_CutList.CutLink(VP_TempLink, 1)
, VP_LhsTemp
, VL_LhsTempPos
);
///////////////////////////////////////////
@ -729,39 +729,39 @@ namespace ZNsMain
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
)
/*##################################################*/
{
if(AL_FirstIndex<AL_LastIndex)
if(AL_HeadIndex<AL_TailIndex)
{
TypeSize i=AL_FirstIndex ;
TypeSize j=AL_LastIndex+1 ;
TypeSize i=AL_HeadIndex ;
TypeSize j=AL_TailIndex+1 ;
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
do //////
{
while(AL_LastIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_FirstIndex<j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
while(AL_HeadIndex <j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
}
while(i<j);
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex],APA_LinkPtrArr[j]);
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex],APA_LinkPtrArr[j]);
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
않아서 좋다.
*/
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
}/*
if(AL_FirstIndex<AL_LastIndex)*/
if(AL_HeadIndex<AL_TailIndex)*/
}/*
template
<typename TTypFuncIsMore, typename TTypFuncIsLess>
@ -770,8 +770,8 @@ namespace ZNsMain
TTypFuncIsMore APF_IsMore ,
TTypFuncIsLess APF_IsLess ,
ZCLink* APA_LinkPtrArr[],
TypeSize AL_FirstIndex ,
TypeSize AL_LastIndex
TypeSize AL_HeadIndex ,
TypeSize AL_TailIndex
)
/*##################################################*/
@ -812,16 +812,17 @@ namespace ZNsMain
}
/////////////////////////
QuickSort(APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1);
QuickSort
(APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1);
for(i=1; i<VL_SortSize; ++i) // VL_SortSize-1 번 순환
{
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
}
////////////////////////////
/*++++++++++++++++++++++++*/
#if(_CODE_OLD_) // 아래 코드만 빠진다.
ZCLink::MakeCircle(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
ZCLink::MakeRing(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
#else
ARR_CObjList.mp_HeadLink=VPP_LinkPtrArr[0] ;
ARR_CObjList.mp_TailLink=VPP_LinkPtrArr[VL_SortSize-1];

File diff suppressed because it is too large Load Diff

657
ZCppMain/ZtCStringStd.H Normal file
View File

@ -0,0 +1,657 @@

#ifndef __ZCPPMAIIN_ZTCSTRINGSTD_H__
#define __ZCPPMAIIN_ZTCSTRINGSTD_H__
#include<string>
#include "ZCppMain/ZtCMainChars.H"
namespace ZNsMain
{
template<typename TTypString> class ZtCStringStd;
template //////////////////////////////////////////////////////////////////
<
template<typename> class ZtCStringStd, typename TTypeBaseStr
>
/*#######################################################################*/
class ZtCCharType< ZtCStringStd<TTypeBaseStr> >
{
public:
typedef ZtCStringStd<TTypeBaseStr> TypeCStr ;
typedef typename TypeCStr::traits_type::char_type TypeChar ;
typedef typename TypeCStr::traits_type::int_type TypeInt ;
typedef typename TypeCStr::size_type TypeSize ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
static const int CI_ByteSize = sizeof(TypeChar) ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public:
typedef TypeChar char_type ; // for stl string/wstring
typedef TypeInt int_type ; // for stl string/wstring
typedef TypeSize size_type ; // for stl string/wstring
public:
};/*
class ZtCCharType #######################################################*/
template
< typename TTypString = std::string >
class ZtCStringStd : public TTypString
{
public:
typedef ZtCStringStd TypeThis;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef typename TTypString::traits_type::char_type TypeChar ;
typedef typename TTypString::traits_type::int_type TypeCharInt ;
typedef typename TTypString::size_type TypeLength ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef ZNsChars::ZNsType::
ZtCTypeChars <TypeChar > ZCTypeChars ;
typedef ZNsChars::
ZtCMainChars<ZCTypeChars> ZCMainChars ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef TypeChar* TypePChar ;
typedef const TypeChar* TypeCPChar ;
typedef TTypString TypeBase ;
typedef TTypString TypeStrStd ;
typedef TypeLength TypeSize ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
typedef ZtCChars
<TypeChar, TypeLength> ZCChars ;
typedef ZtCChars
<TypeChar, TypeLength> ZCCharView ;
/*+++++++++++++++++++++++++++++++++++++++++++++++++*/
ZtCStringStd(): TypeStrStd(){}
ZtCStringStd(const ZtCStringStd& rhs): TypeStrStd(rhs){}
ZtCStringStd(TypeCPChar APC_Origin, TypeLength AL_Length):
TypeStrStd(APC_Origin, AL_Length){}
ZtCStringStd(const ZCCharView& AR_View):
TypeStrStd(AR_View.data(), AR_View.size()){}
explicit ZtCStringStd(TypeCPChar APC_Origin):
TypeStrStd(APC_Origin){}
ZtCStringStd& operator=(const ZtCStringStd& rhs)
{
if(this==&rhs){ return *this; }
this->TypeStrStd::operator=(rhs); return *this;
}/*
ZtCStringStd& operator=(const ZtCStringStd& rhs)*/
ZtCStringStd& operator=(const TypeBase& rhs)
{
if(this->data()==rhs.data()){ return *this; }
this->TypeStrStd::operator=(rhs); return *this;
}/*
ZtCStringStd& operator=(const TypeBase& rhs)*/
ZtCStringStd& operator=(const ZCCharView& AR_View)
{
if(this->data()==AR_View.data()){ return *this; }
if( 1 > AR_View.size())
{ this->resize(0); return *this; }
this->resize(AR_View.size());
const int CI_CopySize =
AR_View.size() * sizeof(TypeChar) ;
::memcpy(this->data(), AR_View.data(), CI_CopySize);
return *this; /*::::::::::::::::::::::::::::::::::*/
}/*
ZtCStringStd& operator=(const ZCCharView& AR_View)*/
ZtCStringStd& operator=(ZTypInt AI_Int )
{ this->resize(0); return (*this)(AI_Int ); }
ZtCStringStd& operator=(ZTypLong AL_Long )
{ this->resize(0); return (*this)(AL_Long ); }
ZtCStringStd& operator=(ZTypLLong AL_LLong )
{ this->resize(0); return (*this)(AL_LLong ); }
ZtCStringStd& operator=(double AD_Double)
{ this->resize(0); return (*this)(AD_Double); }
template<typename TPosList> void FindPosToList /////////////
(
TPosList& ARR_CPosList, TypeCPChar APC_SearchData,
TypeLength AL_SearchLen, TypeLength AL_Offset=0
)
/*########################################################*/
{
// TPosList : ZNsMain::ZtCBaseList<TypeLength> etc
if(0 > AL_Offset) AL_Offset=0 ;
if(this->size() <= AL_Offset) return ;
if(this->size() < 1 ) return ;
TypeCPChar VPC_OriginStart = this->data();
TypeLength VL_OriginLen = this->size();
TypeLength VL_FindPos = -1 ;
TypeLength VL_OffsetNow = AL_Offset ;
while /*::::::::::::::::::::::::::::::::::::::::::::::*/
(
( VL_FindPos = ZCMainChars::FindPos
(
VPC_OriginStart, APC_SearchData,
VL_OriginLen , AL_SearchLen , VL_OffsetNow
)
) >= 0
)
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
{
ARR_CPosList.push_back(VL_FindPos);
VL_OffsetNow = VL_FindPos + AL_SearchLen;
}
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
template<typename TPosList> void FindPosToList /////////////
(
TPosList& ARR_CPosList, TypeCPChar APC_SearchData,
TypeLength AL_SearchLen, TypeLength AL_Offset=0
)
##########################################################*/
public :
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
private:
template<typename TPosList> ZtCStringStd& ReplaceByPosList ///////////////////
(
TPosList& AR_CPosList ,
TypeCPChar APC_Replace ,
TypeLength AL_Replace ,
TypeLength AL_Searched
)
/*#########################################################################*/
{
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
■ TPosList : ZNsMain::ZtCBaseList<TypeLength> etc
AL_Replace : APC_Replace 의 길이
AL_Searched : 이전에 찾은 길이
Replace() 에서 FindPosToList() 다음에 호출한다.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
if(AR_CPosList.size()<1) return *this;
TypeLength VL_PosListSize= AR_CPosList.size() ;
TypeLength VL_ThisSize = this->size() ;
TypeLength VL_NeedSize = VL_ThisSize +
(AL_Replace-AL_Searched) * VL_PosListSize ;
TypePChar VPC_ThisStart = const_cast<TypeChar*>(this->data()) ;
IterEasyID VH_IterEasyID = AR_CPosList.ItHID();
TypeLength VL_SearchedPos= 0 ;
TypeLength VL_SearchedPre= 0 ; // VL_SearchedPos 의 이전 값
TypePChar VPC_MoveStart = 0 ;
TypePChar VPC_DestStart = 0 ;
TypeLength VL_MoveStart = 0 ;
TypeLength VL_DestStart = 0 ;
TypeLength VL_MemMoveSize= 0 ;
if(AL_Replace<=AL_Searched) // 메모리 증가 불필요
{
TypePChar VPC_MoveStart = 0 ;
TypePChar VPC_DestStart = 0 ;
TypeLength VL_MoveStart = 0 ;
TypeLength VL_DestStart = 0 ;
TypeLength VL_MemMoveSize= 0 ;
TypePChar VPC_RepalcePos= 0 ;
__for1(TypeLength, i, VL_PosListSize)
{
VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ;
VPC_RepalcePos = VPC_ThisStart + VL_SearchedPos -
( AL_Searched-AL_Replace ) * (i-1) ;
if(VL_MoveStart>VL_DestStart)
{
VL_MemMoveSize =
VL_SearchedPos - VL_SearchedPre - AL_Searched ;
VPC_MoveStart = VPC_ThisStart + VL_MoveStart ;
VPC_DestStart = VPC_ThisStart + VL_DestStart ;
::memmove /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, VPC_MoveStart, VL_MemMoveSize*sizeof(TypeChar)
);
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_MoveStart>VL_DestStart)*/
VL_SearchedPre = VL_SearchedPos ;
VL_MoveStart = VL_SearchedPos+ AL_Searched ;
VL_DestStart = VL_SearchedPos+ AL_Searched -
( AL_Searched-AL_Replace ) * i ;
::memcpy(VPC_RepalcePos, APC_Replace, AL_Replace);
AR_CPosList.ItNext(VH_IterEasyID);
}/*
__for1(TypeLength, i, VL_PosListSize)*/
if(VL_ThisSize > VL_MoveStart)
{
::memmove /*::::::::::::::::::::::::::::::*/
(
VPC_ThisStart + VL_DestStart,
VPC_ThisStart + VL_MoveStart,
(VL_ThisSize - VL_MoveStart)*sizeof(TypeChar)
);
/*::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_ThisSize > VL_MoveStart)*/
this->resize(VL_NeedSize); return *this;
}/*
if(AL_Replace<=AL_Searched) // 메모리 증가 불필요*/
/*======*/ VL_SearchedPre = this->size() ;
/*======*/ VH_IterEasyID = AR_CPosList.ItTID() ;
TypeLength VL_NowEleNo = VL_PosListSize ;
TypeLength VL_DiffLength = AL_Replace-AL_Searched;
this->resize(VL_NeedSize); VPC_ThisStart = this->data();
__for1(TypeLength, i, VL_PosListSize)
{
VL_SearchedPos = AR_CPosList.ItD(VH_IterEasyID) ;
VL_MemMoveSize = VL_SearchedPre - (VL_SearchedPos+AL_Searched);
if(VL_MemMoveSize>0)
{
VPC_MoveStart = VPC_ThisStart + VL_SearchedPos + AL_Searched ;
VPC_DestStart = VPC_ThisStart + VL_SearchedPos + AL_Searched + VL_DiffLength*VL_NowEleNo ;
::memmove /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, VPC_MoveStart, VL_MemMoveSize*sizeof(TypeChar)
);
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}/*
if(VL_MemMoveSize>0)*/
VPC_DestStart = VPC_ThisStart + VL_SearchedPos + VL_DiffLength*(VL_PosListSize - i) ;
::memcpy /*:::::::::::::::::::::::::::::::::::::::::::::::::*/
(
VPC_DestStart, APC_Replace, AL_Replace*sizeof(TypeChar)
);
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
VL_SearchedPre = VL_SearchedPos; --VL_NowEleNo;
AR_CPosList.ItPrev(VH_IterEasyID);
}/*
__for1(TypeLength, i, VL_PosListSize)*/
return *this;
}/*
template<typename TPosList> ZtCStringStd& ReplaceByPosList //////////////////
(
TPosList& AR_CPosList ,
TypeCPChar APC_Replace ,
TypeLength AL_Replace ,
TypeLength AL_Searched
)
###########################################################################*/
private:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
public :
ZtCStringStd& Replace /*///////////////////////////////////////////////////*/
(
TypeCPChar APC_Search, TypeCPChar APC_Replace,
TypeLength AL_Search , TypeLength AL_Replace , TypeLength AL_Offset=0
)
/*#########################################################################*/
{
if(0 > AL_Offset) AL_Offset=0 ;
if(this->size() <= AL_Offset) return *this;
if(this->size() < 1 ) return *this;
ZtCBaseList<TypeLength> VO_CPosCList; FindPosToList
(
RR(VO_CPosCList), APC_Search, AL_Search, AL_Offset
);
/*////////////////////////////////////////////////*/
return ReplaceByPosList /*::::::::::::::::::::::::::::*/
(
VO_CPosCList, APC_Replace, AL_Replace, AL_Search
);
/*::::::::::::::::::::::::::::::::::::::::::::::::::::*/
}
/*#########################################################################*/
ZtCStringStd& Replace /*///////////////////////////////////////////////////*/
(
TypeCPChar APC_Search, TypeCPChar APC_Replace, TypeLength AL_Offset=0
)
/*#########################################################################*/
{
return Replace(APC_Search, APC_Replace, ZftLength(APC_Search), ZftLength(APC_Replace), AL_Offset);
}
/*#########################################################################*/
ZtCStringStd& operator()(ZtCStringStd& rhs)
{
if(this==&rhs) {return *this;} this->append(rhs); return *this;
}/*
ZtCStringStd& operator()(ZtCStringStd& rhs)*/
ZtCStringStd& operator()(TypeCPChar APC_Data, TypeLength AI_Length)
{
if(this->data()==APC_Data) return *this;
this->append(APC_Data, AI_Length); return *this;
}/*
ZtCStringStd& operator()(TypeCPChar APC_Data, TypeLength AI_Length)*/
ZtCStringStd& operator()(TypeCPChar APC_Data)
{
if(this->data()==APC_Data) return *this;
this->append(APC_Data); return *this;
}/*
ZtCStringStd& operator()(TypeCPChar APC_Data)*/
ZtCStringStd& operator()(TypeLength AI_Repeat, TypeChar AC_Data)
{
this->append(AI_Repeat, AC_Data); return *this;
}/*
ZtCStringStd& operator()(TypeChar AC_Data, TypeLength AI_Repeat)*/
ZtCStringStd& operator()(TypeChar AC_Data, TypeLength AI_Repeat=1)
{
this->append(AI_Repeat, AC_Data); return *this;
}/*
ZtCStringStd& operator()(TypeChar AC_Data, TypeLength AI_Repeat=1)*/
ZtCStringStd& operator()(const ZCCharView& AR_View)
{
this->append(AR_View.data(), AR_View.size()); return *this;
}/*
ZtCStringStd& operator()(const ZCCharView& AR_View)*/
ZtCStringStd& operator()(bool AB_Bool)
{
typedef typename TypeThis::TypeChar TypeChar ;
typedef typename TypeThis::TypeSize TypeSize ;
typedef ZtCBoolStr
<TypeChar, TypeSize> ZCBoolStr;
return (*this)( ZCBoolStr::GetMark(AB_Bool) );
}/*
ZtCStringStd& operator()(bool AB_Bool)*/
ZtCStringStd& operator()(int AI_IntParam)
{
const int CI_BuffSize= 21; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*+++++++*/ "%d", AI_IntParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%d", AI_IntParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(int AI_IntParam)*/
ZtCStringStd& operator()(ZTypUInt AUI_UIntParam)
{
const int CI_BuffSize= 21; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%u", AUI_UIntParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%u", AUI_UIntParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypUInt AUI_UIntParam)*/
ZtCStringStd& operator()(long AL_LongParam)
{
const int CI_BuffSize= 31; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%ld", AL_LongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%ld", AL_LongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(long AL_LongParam)*/
ZtCStringStd& operator()(ZTypULong AUL_ULongParam)
{
const int CI_BuffSize= 31; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%lu", AUL_ULongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%lu", AUL_ULongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypULong AUL_ULongParam)*/
ZtCStringStd& operator()(ZTypLLong ALL_LLongParam)
{
const int CI_BuffSize= 41; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%lld" , ALL_LLongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%lld" , ALL_LLongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypLLong ALL_LLongParam)*/
ZtCStringStd& operator()(ZTypULLong AULL_LLongParam)
{
const int CI_BuffSize= 41; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%llu" , AULL_LLongParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%llu" , AULL_LLongParam)
);
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(ZTypULLong AULL_LLongParam)*/
ZtCStringStd& operator()(double AD_DoubleParam)
{
const int CI_BuffSize= 51; TypeChar VCA_BuffParam[CI_BuffSize] ;
int VI_ResultSize = /*::::::::::::::::::::::::::::::::::::::::*/
(
sizeof(TypeChar)<=1
? ::sprintf ((char* )VCA_BuffParam, /*++++++++*/ "%f", AD_DoubleParam)
: ::swprintf((wchar_t*)VCA_BuffParam, CI_BuffSize, L"%f", AD_DoubleParam)
);
ZNsMain::ZftTrimDecimalZero(VCA_BuffParam, RR(VI_ResultSize));
return (*this)(VCA_BuffParam, VI_ResultSize); /*::::::::::::::*/
}/*
ZtCStringStd& operator()(double AD_DoubleParam)*/
int GetInt () const{return ZNsMain::ZftAtoI (this->data());}
ZTypLong GetLong () const{return ZNsMain::ZftAtoL (this->data());}
ZTypLLong GetLongLong() const{return ZNsMain::ZftAtoLL(this->data());}
ZTypLLong GetLLong () const{return ZNsMain::ZftAtoLL(this->data());}
double GetDouble () const{return ZNsMain::ZftAtoD (this->data());}
public:
};/*
template //////////////////////////////////////////////////////////
< typename TTypString = std::string >
class ZtCStringStd
#################################################################*/
typedef ZtCStringStd<std::string > ZCStringStd ;
typedef ZtCStringStd<std::wstring> ZCStringStdW;
#define _ZCSTRINGSTD_ ZtCStringStd< TTypString >
#define _ZCSTRINGSTD_ARG_ template< typename TTypString >
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, const _ZCSTRINGSTD_& AR_DataCStr)
{ return ARR_SaveCStr(AR_DataCStr ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, const typename
_ZCSTRINGSTD_::ZCChars& AR_DataCStr )
{ return ARR_SaveCStr(AR_DataCStr ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, typename
_ZCSTRINGSTD_::TypeChar AC_Char )
{ return ARR_SaveCStr(AC_Char ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypInt AI_IntI )
{ return ARR_SaveCStr(AI_IntI ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntL AL_Long )
{ return ARR_SaveCStr(AL_Long ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntUI AUI_Int )
{ return ARR_SaveCStr(AUI_Int ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntUL AUL_Long )
{ return ARR_SaveCStr(AUL_Long ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, ZTypIntULL AULL_Long )
{ return ARR_SaveCStr(AULL_Long ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, double AD_Double )
{ return ARR_SaveCStr(AD_Double ); }
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, bool AB_Bool )
{
typedef typename _ZCSTRINGSTD_::TypeChar TypeChar;
typedef typename _ZCSTRINGSTD_::TypeSize TypeSize;
typedef ZtCBoolStr<TypeChar, TypeSize> ZCBoolStr ;
return ARR_SaveCStr(ZCBoolStr::GetMark(AB_Bool)) ;
}/*
_ZCSTRINGSTD_ARG_ _ZCSTRINGSTD_& ZftMakeStr
( _ZCSTRINGSTD_& ARR_SaveCStr, bool AB_Bool ) */
#undef _ZCSTRINGSTD_
#undef _ZCSTRINGSTD_ARG_
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd<TTypString>& AR_DataCStr)
{
typedef typename ZtCStringStd
<TTypString>::TypeBase TypeBaseCStr ;
AR_COStream<< static_cast
<const TypeBaseCStr&>(AR_DataCStr);
return AR_COStream; ///////////////////////////
}/*
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd& AR_DataCStr)*/
std::ostream& operator<<
(std::ostream& AR_COStream, const ZCStringStd& AR_DataCStr)
{
typedef ZCStringStd::TypeBase TypeBaseCStr;
AR_COStream<< static_cast
<const TypeBaseCStr&>( AR_DataCStr );
return AR_COStream; /*********************/
}/*
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd& AR_DataCStr)*/
std::ostream& operator<<
(std::ostream& AR_COStream, const ZCStringStdW& AR_DataCStr)
{
// ascii 코드 범위에서만 출력한다.
typedef ZCStringStdW::TypeSize TypeLength ;
typedef ZCStringStdW::TypeCharInt TypeCharInt;
ZTypCCharW* VP_Data = AR_DataCStr.data();
TypeLength VI_Size = AR_DataCStr.size();
const int CI_AsciiMax = 127 ;
__for0(TypeLength, i, VI_Size)
{
TypeCharInt VI_Code = TypeCharInt(*VP_Data++);
if(VI_Code>0 && VI_Code<=CI_AsciiMax)
{ AR_COStream.put( char(VI_Code) ); }
}/*
__for0(TypeLength, i, VI_Size)*/
return AR_COStream; /*********************/
}/*
template<typename TTypString> std::ostream& operator<<
(std::ostream& AR_COStream, const ZtCStringStd& AR_DataCStr)*/
}/*
namespace ZNsMain*/
#endif //__ZCPPMAIIN_ZTCSTRINGSTD_H__

View File

@ -123,7 +123,6 @@ namespace ZNsMain
template< typename TType ,
typename TTypeInit =ZNsMain::ZtCInit<TType>,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
class ZtCTreeData /*###########################################*/
@ -132,8 +131,7 @@ namespace ZNsMain
class ZCNode1; class ZCNode2; class ZCNodeInfo;
public:
typedef TType TypeData ;
typedef TTypeInit ZCTypeInit ;
typedef TTypeTreeData ZCTypeTreeData;
typedef TTypeTreeData TypeTreeData;
public:
typedef typename TTypeTreeData::TypeSize TypeSize ;
typedef typename TTypeTreeData::template
@ -148,7 +146,8 @@ namespace ZNsMain
typedef typename ZCNodeList::iterator IterOfNode;
public:
class ZCNode1 : public ZCTypeInit
class ZCNode1
{
public :
friend class ZCNodeInfo;
@ -160,13 +159,13 @@ namespace ZNsMain
ZCNode1()
{
mp_HighNode=0; this->ZCTypeInit::OnInit(mo_TypeData);
mp_HighNode=0;
}/*
ZCNode1()*/
~ZCNode1()
{
mp_HighNode=0; this->ZCTypeInit::OnFini(mo_TypeData);
mp_HighNode=0;
}/*
~ZCNode1()*/
@ -184,7 +183,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef());
ZCNode* VP_CNode=(ZCNode*)&(*mo_CNodeList.AddTailDef());
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ;
}/*
@ -265,7 +264,7 @@ namespace ZNsMain
}/*
template<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPreOrder
(TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0)
/*##############################################################*/
################################################################*/
template<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPostOrder
( TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0 )
@ -319,13 +318,14 @@ namespace ZNsMain
}/*
template<typename TViewClass> ZNsMain::ZNsEnum::ZERun IterPostOrder
(TViewClass& AR_CViewClass, TypeSize AI_StartDepth=0, TypeSize AI_NodeIndex=0)
/*###############################################################*/
#################################################################*/
public:
};/*
class ZCNode1*/
class ZCNode2 : public ZCTypeInit
class ZCNode2
{
public :
friend class ZCNodeInfo;
@ -337,12 +337,12 @@ namespace ZNsMain
ZCNode2()
{
mp_HighNode=0; this->ZCTypeInit::OnInit(mo_TypeData);
mp_HighNode=0;
}/*
ZCNode2()*/
~ZCNode2()
{
mp_HighNode=0; this->ZCTypeInit::OnFini(mo_TypeData);
mp_HighNode=0;
}/*
~ZCNode2()*/
@ -360,7 +360,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef());
ZCNode* VP_CNode=(ZCNode*)&(*mo_CNodeList.AddTailDef());
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ;
}/*
@ -459,7 +459,6 @@ namespace ZNsMain
public:
};/*
template< typename TType ,
typename TTypeInit =ZNsMain::ZtCInit<TType>,
typename TTypeTreeData=ZNsType::ZtCTypeTreeData<long>
>
class ZtCTreeData #############################################*/
@ -471,6 +470,7 @@ namespace ZNsMain
■ class ZtCTreeData 예제 -- 2015-08-14 14:00
#include <iostream>
#include "ZCppMain/ZtCStringEx.H"
#include "ZCppMain/ZtCTreeData.H"
using namespace std ;
@ -636,7 +636,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&(**mo_CNodeList.AddTailDef());
ZCNode* VP_CNode=(ZCNode*)&(*mo_CNodeList.AddTailDef());
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode ;
}/*
@ -675,7 +675,7 @@ namespace ZNsMain
TypeSize VL_DataCnt= mo_CDataList .size();
TypeSize VL_NodeCnt=((ZCNodeList&)mo_CNodeList).size();
IterOfData VO_iter_Data( mo_CDataList.begin());
IterOfData VO_iter_Data( mo_CDataList .begin());
IterOfNode VO_iter_Node(((ZCNodeList&)mo_CNodeList).begin());
if(AR_CViewClass.OnDataStart(AI_StartDepth)==ZNsMain::ZNsEnum::ZERun_NO)
@ -859,7 +859,7 @@ namespace ZNsMain
ZCNode& AddSubNode()
{
ZCNode* VP_CNode=(ZCNode*)&
( **mo_CNodeList.AddTailDef() );
( *mo_CNodeList.AddTailDef() );
VP_CNode->mp_HighNode=(ZCNode*)this; return *VP_CNode;
}/*

View File

@ -1,4 +1,4 @@

#include "ZCppMain/ZMainCGI.H"
@ -59,12 +59,12 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> cigwin <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cygwin 컴파일
// g++ -mno-cygwin -o ZMainCGI_000_EnvSet.exe ZMainCGI_000_EnvSet.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZMainCGI_000_EnvSet_D.exe ZMainCGI_000_EnvSet.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
<EFBFBD><EFBFBD> mingw <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mingw 컴파일
g++.exe -o ZMainCGI_000_EnvSet_mw.exe ZMainCGI_000_EnvSet.cpp -I../ -lWs2_32
g++.exe -o ZMainCGI_000_EnvSet_mw_D.exe ZMainCGI_000_EnvSet.cpp -I../ -lWs2_32 -D_DEBUG
@ -87,10 +87,10 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
<EFBFBD><EFBFBD> Linux <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Linux 컴파일
g++ -std=c++98 -o ZMainCGI_000_EnvSet.exe ZMainCGI_000_EnvSet.cpp -I../
g++ -std=c++98 -o ZMainCGI_000_EnvSet_D.exe ZMainCGI_000_EnvSet.cpp -I../ -D_DEBUG
g++ -std=c++98 -o ZMainCGI_000_EnvSet.exe ZMainCGI_000_EnvSet.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZMainCGI_000_EnvSet_D.exe ZMainCGI_000_EnvSet.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
@ -125,7 +125,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
■ 실행
./ZMainCGI_000_EnvSet.exe
./ZMainCGI_000_EnvSet_D.exe

View File

@ -23,11 +23,14 @@ namespace ZNsMain
ZCStringStd VO_BuffCStr("myBuff") ;
ZTypInt VI_NowCnt = 0 ;
cout<<"# __cplusplus : "<<__cplusplus<<endl;
#ifdef __CPP_1998__
#if defined(__CPLUSPLUS_VER__) && __CPLUSPLUS_VER__<=199800
cout<<"# Use C++ 98 Spec"<<endl;
ZtStTuple<>
myt0 = ZftMakeTuple();
ZtStTuple<int>
myt1 = ZftMakeTuple(1);
ZtStTuple<int, int>
@ -48,13 +51,14 @@ namespace ZNsMain
myt9 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr));
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&>
myt10= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt));
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&, int>
myt11= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), 20250906);
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&, int, wchar_t>
myt12= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), 20250906, wchar_t(0));
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&, long>
myt11= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906);
ZtStTuple<int, int, char, ZCStringStd&, bool, const char*, double, float, ZCStringStd&, int&, long, wchar_t>
myt12= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906, wchar_t(0));
#else
cout<<"# Use auto keyword for ZtStTuple<> variable"<<endl;
auto myt0 = ZftMakeTuple();
auto myt1 = ZftMakeTuple(1);
auto myt2 = ZftMakeTuple(1, 34);
auto myt3 = ZftMakeTuple(1, 34, 'C');
@ -65,8 +69,8 @@ namespace ZNsMain
auto myt8 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43));
auto myt9 = ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr));
auto myt10= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt));
auto myt11= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), 20250906);
auto myt12= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), 20250906, wchar_t(0));
auto myt11= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906);
auto myt12= ZftMakeTuple(1, 34, 'C', ZftMCP(VO_BuffCStr), true, "AB", double(0.34), float(24.43), ZftMCP(VO_BuffCStr), ZftMCP(VI_NowCnt), (long)20250906, wchar_t(0));
#endif
myt10._10 = 1200;
@ -77,17 +81,29 @@ namespace ZNsMain
cout<<VI_NowCnt<<endl;
cout<<"_1 type : "<<typeid(myt12._1 ).name()<<endl;
cout<<" value: "<< myt12._1 <<endl;
cout<<"_2 type : "<<typeid(myt12._2 ).name()<<endl;
cout<<" value: "<< myt12._2 <<endl;
cout<<"_3 type : "<<typeid(myt12._3 ).name()<<endl;
cout<<" value: "<< myt12._3 <<endl;
cout<<"_4 type : "<<typeid(myt12._4 ).name()<<endl;
cout<<" value: "<< myt12._4 <<endl;
cout<<"_5 type : "<<typeid(myt12._5 ).name()<<endl;
cout<<" value: "<< myt12._5 <<endl;
cout<<"_6 type : "<<typeid(myt12._6 ).name()<<endl;
cout<<" value: "<< myt12._6 <<endl;
cout<<"_7 type : "<<typeid(myt12._7 ).name()<<endl;
cout<<" value: "<< myt12._7 <<endl;
cout<<"_8 type : "<<typeid(myt12._8 ).name()<<endl;
cout<<" value: "<< myt12._8 <<endl;
cout<<"_9 type : "<<typeid(myt12._9 ).name()<<endl;
cout<<" value: "<< myt12._9 <<endl;
cout<<"_10 type : "<<typeid(myt12._10).name()<<endl;
cout<<" value: "<< myt12._10 <<endl;
cout<<"_11 type : "<<typeid(myt12._11).name()<<endl;
cout<<" value: "<< myt12._11 <<endl;
cout<<"_12 type : "<<typeid(myt12._12).name()<<endl;
cout<<" value: "<< myt12._12 <<endl;
return 0;
}/*
@ -116,15 +132,15 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZftMakeTuple_000.exe ZftMakeTuple_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZftMakeTuple_000_D.exe ZftMakeTuple_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -std=c++98 -o ZftMakeTuple_000_mw_98.exe ZftMakeTuple_000.cpp -I../ -D__CPP_1998__
g++.exe -std=c++98 -o ZftMakeTuple_000_mw_98_D.exe ZftMakeTuple_000.cpp -I../ -D__CPP_1998__ -D_DEBUG
g++.exe -std=c++98 -o ZftMakeTuple_000_mw_98.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800
g++.exe -std=c++98 -o ZftMakeTuple_000_mw_98_D.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800 -D_DEBUG
g++.exe -o ZftMakeTuple_000_mw.exe ZftMakeTuple_000.cpp -I../
g++.exe -o ZftMakeTuple_000_mw_D.exe ZftMakeTuple_000.cpp -I../ -D_DEBUG
@ -156,8 +172,8 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
g++ -o ZftMakeTuple_000.exe ZftMakeTuple_000.cpp -I../
g++ -o ZftMakeTuple_000_D.exe ZftMakeTuple_000.cpp -I../ -D_DEBUG
g++ -o ZftMakeTuple_000_98.exe ZftMakeTuple_000.cpp -I../ -D__CPP_1998__
g++ -o ZftMakeTuple_000_98_D.exe ZftMakeTuple_000.cpp -I../ -D__CPP_1998__ -D_DEBUG
g++ -o ZftMakeTuple_000_98.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800
g++ -o ZftMakeTuple_000_98_D.exe ZftMakeTuple_000.cpp -I../ -D__CPLUSPLUS_VER__=199800 -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

View File

@ -190,7 +190,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCArray_000.exe ZtCArray_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCArray_000_D.exe ZtCArray_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
@ -218,8 +218,8 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
■ Linux 컴파일
g++ -std=c++98 -o ZtCArray_000.exe ZtCArray_000.cpp -I../
g++ -std=c++98 -o ZtCArray_000_D.exe ZtCArray_000.cpp -I../ -D_DEBUG
g++ -std=c++98 -o ZtCArray_000.exe ZtCArray_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCArray_000_D.exe ZtCArray_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

View File

@ -0,0 +1,969 @@

#include <iostream>
#include "ZCppMain/ZtCStringEx.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCList
{
public:
class CHelpObj
{
public:
CHelpObj()
{
cout<<"* CHelpObj()"<<endl;
}
CHelpObj(const CHelpObj& rhs)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
public:
};/*
class CHelpObj*/
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
public:
typedef ZtCStringBase<char> CStringBase ;
typedef const CStringBase CStringBaseC;
/* 아래 자료형에 대해, CStringBase::Fetch() 호출 여부 실험.
ZtCBaseList<CStringBase&, CStringBase &>
ZtCBaseList<CStringBase&, CStringBaseC&>
*/
typedef ZtCBaseList
<CStringBase, CStringBase &> CStringList1 ;
typedef ZtCBaseList
<CStringBase, CStringBaseC&> CStringList2 ;
public:
class ZCBaseListEx10 : public ZtCBaseList
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx10, true>
>
{
public :
typedef ZtCBaseList ///////////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx10, true>
>
ZCBaseList; ///////////////////////////////////////////////////////////////
friend class ZtCBaseList //////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx10, true>
>;
///////////////////////////////////////////////////////////////////////////
/*****************************************************************************/
typedef typename ZCBaseList::ZCLink ZCLink ;
/*****************************************************************************/
typedef typename ZCBaseList::iterator iterator ;
typedef typename ZCBaseList::const_iterator const_iterator;
/*****************************************************************************/
public :
_VT_ ZTypLong capacity() const
{
cout<<"[ZCBaseListEx10 : capacity()]"; return 0;
}/*
_VT_ ZTypLong capacity() const*/
_VT_ ZTypLong size_free() const
{
cout<<"[ZCBaseListEx10 : size_free()]"; return 0;
}/*
_VT_ ZTypLong size_free() const*/
private:
_VT_ ZCLink* SendFreeOut() const
{
cout<<"** ZCBaseListEx10 : SendFreeOut()"<<endl;
return this->ZCBaseList::NewLink();
}/*
_VT_ ZCLink* SendFreeOut() const*/
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData) const
{
cout<<"** ZCBaseListEx10 : SendFreeOut(TypeArg)"<<endl;
return this->ZCBaseList::NewLink(AO_ArgData);
}/*
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData) const*/
_VT_ void SendFreeOut
(ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink) const
{
cout<<"** ZCBaseListEx10 : SendFreeOut("<<AL_NeedCnt<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink);
}
_VT_ void SendFreeOutCopy /*///////////////////////*/
(
ZCLink* AP_LinkOrgin, ZTypLong AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
) const
/////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx10 : SendFreeOut(ZCLink*, "<<AL_FarNum<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy);
}
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)
{
cout<<"** ZCBaseListEx10 : RecvFreeIn(AP_DelLink)"<<endl;
this->ZCBaseList::DelLink(AP_DelLink);
}/*
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)*/
_VT_ void RecvFreeIn //////////////////////////////////
(
ZTypLong AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx10 : RecvFreeIn("<<AL_CutCnt<<", AP_CutHead, AP_CutTail)"<<endl;
this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail);
}
private:
};/*
class ZCBaseListEx10 : public ZtCBaseList*/
class ZCBaseListEx11 : public ZtCBaseList
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx11, false>
>
{
public :
typedef ZtCBaseList ///////////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx11, false>
>
ZCBaseList; ///////////////////////////////////////////////////////////////
friend class ZtCBaseList //////////////////////////////////////////////////
<
CStringBase, CStringBase&, ZCAllocator, ZTypLong
, ZNsMain::ZtCMoveObj <CStringBase, CStringBase&, true>
, ZNsType::ZtCTypeCRTP<ZCBaseListEx11, false>
>;
///////////////////////////////////////////////////////////////////////////
/*****************************************************************************/
typedef typename ZCBaseList::ZCLink ZCLink ;
/*****************************************************************************/
typedef typename ZCBaseList::iterator iterator ;
typedef typename ZCBaseList::const_iterator const_iterator;
/*****************************************************************************/
public :
_VT_ ZTypLong capacity() const
{
cout<<"[ZCBaseListEx11 : capacity()]"; return 0;
}/*
_VT_ ZTypLong capacity() const*/
_VT_ ZTypLong size_free() const
{
cout<<"[ZCBaseListEx11 : size_free()]"; return 0;
}/*
_VT_ ZTypLong size_free() const*/
private:
_VT_ ZCLink* SendFreeOut()
{
cout<<"** ZCBaseListEx11 : SendFreeOut()"<<endl;
return this->ZCBaseList::NewLink();
}/*
_VT_ ZCLink* SendFreeOut()*/
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData)
{
cout<<"** ZCBaseListEx11 : SendFreeOut(CStringBase&)"<<endl;
return this->ZCBaseList::NewLink(AO_ArgData);
}/*
_VT_ ZCLink* SendFreeOut(CStringBase& AO_ArgData)*/
_VT_ void SendFreeOut
(ZTypLong AL_NeedCnt, ZCLink*& APR_HeadLink, ZCLink*& APR_TailLink)
{
cout<<"** ZCBaseListEx11 : SendFreeOut("<<AL_NeedCnt<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLink(AL_NeedCnt, APR_HeadLink, APR_TailLink);
}
_VT_ void SendFreeOutCopy /*///////////////////////*/
(
ZCLink* AP_LinkOrgin, ZTypLong AL_FarNum ,
ZCLink*& APR_HeadCopy, ZCLink*& APR_TailCopy
)
/////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx11 : SendFreeOut(ZCLink*, "<<AL_FarNum<<", ZCLink*&, ZCLink*&)"<<endl;
this->ZCBaseList::NewLinkCopy(AP_LinkOrgin, AL_FarNum, APR_HeadCopy, APR_TailCopy);
}
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)
{
cout<<"** ZCBaseListEx11 : RecvFreeIn(AP_DelLink)"<<endl;
this->ZCBaseList::DelLink(AP_DelLink);
}/*
_VT_ void RecvFreeIn(ZCLink* AP_DelLink)*/
_VT_ void RecvFreeIn //////////////////////////////////
(
ZTypLong AL_CutCnt ,
ZCLink* AP_CutHead,
ZCLink* AP_CutTail
)
///////////////////////////////////////////////////////
{
cout<<"** ZCBaseListEx11: RecvFreeIn("<<AL_CutCnt<<", AP_CutHead, AP_CutTail)"<<endl;
this->ZCBaseList::DelLink(AL_CutCnt, AP_CutHead, AP_CutTail);
}
private:
};/*
class ZCBaseListEx11 : public ZtCBaseList*/
typedef typename ZCBaseListEx10::ZCLink ZCLink10;
typedef typename ZCBaseListEx11::ZCLink ZCLink11;
static void ShowDataInNode(const CStringBase& AR_Data, ZTypLong& ARRI_CallCnt)
{
cout<<++ARRI_CallCnt<<"* Data : "<<AR_Data<<endl;
}/*
static void ShowDataInNode(const CStringBase& AR_Data, ZTypLong& ARRI_CallCnt)*/
static void Append10(ZCLink10& AR_CLink)
{
(*AR_CLink).append("__");
}/*
static void Append10(ZCLink10& AR_CLink)*/
static void ShowNode10(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node10 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node10 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node10 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode10(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode11(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node11 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node11 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node11 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode11(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node10_2 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node10_2 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node10_2 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode10_2(ZCLink10& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)*/
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node11_2 Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node11_2 Curr : " <<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node11_2 Prev : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode11_2(ZCLink11& AR_CLink, ostream& AR_OS, ZTypLong& ARRI_CallCnt)*/
static void ShowNode10_3(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)
{
cout<<++ARRI_CallCnt<<" * Node10 Curr : " <<*(AR_CLink )<<endl;
}/*
static void ShowNode10_3(ZCLink10& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode11_3(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)
{
cout<<++ARRI_CallCnt<<" * Node11 Curr : " <<*(AR_CLink )<<endl;
}/*
static void ShowNode11_3(ZCLink11& AR_CLink, ZTypLong& ARRI_CallCnt)*/
class ZCTypeView
{
public:
template<typename TTypChain> void OnMeetType()
{
cout<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetType(int& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : "<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
};/*
class ZCTypeView*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
typedef ZtCTypeChain
<
double , ZtCTypeChain<
int , ZtCTypeChain<
wchar_t, ZtCTypeChain<
char ,
ZCEmpty > > >
> ZCTypeChain; ZCTypeView VO_ZCTypeView;
int VI_CallNo = 0;
cout<<"*** tmpl chain size = "<<ZCTypeChain::Size()<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView);
ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::
IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::
IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
ZTypLong VI_CallCnt=0;
CStringBase VO_CStringBase;
CStringList1 VO_ListOfStr1 ;
CStringList2 VO_ListOfStr2 ;
VO_ListOfStr1.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 1th IterElement ####" <<endl;
{
VO_ListOfStr1.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
}
/*///////////////////////////////////*/
cout<<endl;
VO_ListOfStr2.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 2th IterElement ####" <<endl;
{
VO_ListOfStr2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
}
/*///////////////////////////////////*/
typedef ZtCBaseList<int> CIntList;
CHelpObj VO_CHelpObj;
CIntList VO_CIntList;
VO_CIntList.AddTail(10);
VO_CIntList.AddTail(20);
VO_CIntList.AddTail(30);
VO_CIntList.AddTail(40);
cout<<endl<<"#### Show CIntList Element ####"<<endl<<endl;
VO_CIntList.IterElement(StFunctor ::ShowElement);
VO_CIntList.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
VO_CIntList.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
cout<<endl<<"#### ZCBaseListEx10 and ZCBaseListEx11 ####"<<endl<<endl;
ZCBaseListEx10 VO_ZCBaseListEx10 ;
ZCBaseListEx10 VO_ZCBaseListEx10_2;
ZCBaseListEx11 VO_ZCBaseListEx11 ;
VO_CStringBase="";
VO_ZCBaseListEx10.AddTail(VO_CStringBase("data ex 10-1"));
VO_ZCBaseListEx10.AddTail(VO_CStringBase("data ex 10-2"));
VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-1"));
VO_ZCBaseListEx11.AddTail(VO_CStringBase("data ex 11-2"));
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10"<<endl<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-3"));
VO_ZCBaseListEx10.AddTail().Fetch(VO_CStringBase("data ex 10-4"));
cout<<endl<<"# VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 after VO_ZCBaseListEx10.AddTail() 2 times"<<endl<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10)"<<endl<<endl;
VO_ZCBaseListEx10_2.AddHead(VO_ZCBaseListEx10) ;
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2 : DeleteTail(2)"<<endl<<endl;
VO_ZCBaseListEx10_2.DeleteTail(2);
VO_ZCBaseListEx10_2.IterElemRev(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2 : DeleteHead(1)"<<endl<<endl;
VO_ZCBaseListEx10_2.DeleteHead(1);
VO_ZCBaseListEx10_2.IterElement(&ShowDataInNode, ZftMCP(VI_CallCnt=0));
cout<<"# VO_ZCBaseListEx10 : capacity()="<<VO_ZCBaseListEx10 .capacity()<<endl;
cout<<"# VO_ZCBaseListEx10_2 : capacity()="<<VO_ZCBaseListEx10_2.capacity()<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10 , ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout), ZftMCP(VI_CallCnt=0));
cout<<endl<<"# show VO_ZCBaseListEx10 element"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10, ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10_2.SendOutTail
(*VO_ZCBaseListEx10_2.GetLinkPtr(2), VO_ZCBaseListEx10);
cout<<endl<<"# after VO_ZCBaseListEx10_2's 2th link to VO_ZCBaseListEx10's tail"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10 , ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_2, ZftMCP(cout), ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10.IterElemLink(&Append10);
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
VO_ZCBaseListEx10.SendRangeOutAfter
(
*VO_ZCBaseListEx10.GetLinkPtr(2)
, *VO_ZCBaseListEx10.GetLinkPtr(3)
, 2
, VO_ZCBaseListEx10_2
, VO_ZCBaseListEx10_2.GetLinkOpt(2)
);
cout<<endl<<"# after VO_ZCBaseListEx10's 2~3th link to VO_ZCBaseListEx10_2's 2th link after"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10"<<endl;
VO_ZCBaseListEx10_2 = VO_ZCBaseListEx10 ;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10.SendRangeOutBefore(1th, 2th, 2, rhs, 1th)"<<endl;
VO_ZCBaseListEx10.SendRangeOutBefore
(
*VO_ZCBaseListEx10.GetLinkPtr(1)
, *VO_ZCBaseListEx10.GetLinkPtr(2)
, 2
, VO_ZCBaseListEx10_2
, VO_ZCBaseListEx10_2.GetLinkOpt(1)
);
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10.CopyThis(RR(VO_ZCBaseListEx10_2))"<<endl;
VO_ZCBaseListEx10.CopyThis(RR(VO_ZCBaseListEx10_2));
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCBaseListEx10 .IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(1th)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.HeadRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(last)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.TailRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkNext(last-1)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkNext(VO_ZCBaseListEx10_2.TailRef(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2 : Iter Rev"<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLinkRev(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkPrev(2th)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkPrev(VO_ZCBaseListEx10_2.HeadRef(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLinkPrev(last)"<<endl;
VO_ZCBaseListEx10_2.SwapLinkPrev(VO_ZCBaseListEx10_2.TailRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(1th, 4th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(), VO_ZCBaseListEx10_2.HeadRef(3) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(2th, 1th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(1), VO_ZCBaseListEx10_2.HeadRef() );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(2th, 5th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(1), VO_ZCBaseListEx10_2.HeadRef(4) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(4th, 5th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(3), VO_ZCBaseListEx10_2.HeadRef(4) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(6th, 2th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(5), VO_ZCBaseListEx10_2.HeadRef(1) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(6th, 5th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(5), VO_ZCBaseListEx10_2.HeadRef(4) );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.SwapLink(6th, 1th)"<<endl;
VO_ZCBaseListEx10_2.SwapLink
( VO_ZCBaseListEx10_2.HeadRef(5), VO_ZCBaseListEx10_2.HeadRef() );
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkHead(2th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkHead( VO_ZCBaseListEx10_2.HeadRef(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkTail(1th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkTail( VO_ZCBaseListEx10_2.HeadRef());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkAfter(1th, 6th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkAfter
( VO_ZCBaseListEx10_2.HeadRef(), VO_ZCBaseListEx10_2.HeadOpt(5));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkBefore(5th, 1th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkBefore
( VO_ZCBaseListEx10_2.HeadRef(4), VO_ZCBaseListEx10_2.HeadOpt());
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkAfter(1th, 2th)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkAfter
( VO_ZCBaseListEx10_2.HeadRef(), VO_ZCBaseListEx10_2.HeadOpt(1));
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeInAfter(1th~3th => 6th)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeInAfter
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadOpt(5)
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeInBefore(4th~6th => 1th)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeInBefore
(
VO_ZCBaseListEx10_2.HeadRef(3),
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadOpt( )
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# VO_ZCBaseListEx10_2 for_it() show "<<endl;
__for_it(ZCBaseListEx10, VO_ZCBaseListEx10_2, VO_Iter)
{
cout<<VO_Iter.GetPos()<<" : "<<*VO_Iter<<endl;
}
cout<<endl<<"# VO_ZCBaseListEx10_2 for_it_r() show "<<endl;
__for_it_r(ZCBaseListEx10, VO_ZCBaseListEx10_2, VO_Iter)
{
cout<<VO_Iter.GetPos()<<" : "<<*VO_Iter<<endl;
}
cout<<endl<<"# VO_ZCBaseListEx10_2 for_itc() show "<<endl;
__for_itc(ZCBaseListEx10, VO_ZCBaseListEx10_2, VO_Iter)
{
cout<<VO_Iter.GetPos()<<" : "<<*VO_Iter<<endl;
}
cout<<"*****************************************************"<<endl;
_FOR_ITER_EASY_START0_C (VO_ZCBaseListEx10_2, VH_NowIter, i)
{
cout<<"# list10_2 const: "<<(i+1)<<" "<<VO_ZCBaseListEx10_2.ItD(VH_NowIter)<<endl;
}
_FOR_ITER_EASY_CLOSE0_C (VO_ZCBaseListEx10_2, VH_NowIter, i)
cout<<"*****************************************************"<<endl;
_FOR_ITER_EASY_START0_RC(VO_ZCBaseListEx10_2, VH_NowIter, i)
{
cout<<"# list10_2 rev const: "<<(i+1)<<" "<<VO_ZCBaseListEx10_2.ItD(VH_NowIter)<<endl;
}
_FOR_ITER_EASY_CLOSE0_RC(VO_ZCBaseListEx10_2, VH_NowIter, i)
cout<<"*****************************************************"<<endl;
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(1th, 3th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(3th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(6th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(1th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 3th after)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 3th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveLinkIn(2th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveLinkIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(1th, 3th, 6th after)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef( ),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(5),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(5th, 6th, 1th before)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef(4),
VO_ZCBaseListEx10_2.HeadRef(5),
VO_ZCBaseListEx10_2.HeadRef( ),
false
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
cout<<endl<<"# after VO_ZCBaseListEx10_2.MoveRangeIn(2th, 3th, 4th after)"<<endl;
VO_ZCBaseListEx10_2.MoveRangeIn
(
VO_ZCBaseListEx10_2.HeadRef(1),
VO_ZCBaseListEx10_2.HeadRef(2),
VO_ZCBaseListEx10_2.HeadRef(3),
true
);
cout<<"*****************************************************"<<endl;
VO_ZCBaseListEx10_2.IterElemLink(&ShowNode10_3, ZftMCP(VI_CallCnt=0));
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCList*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCBaseList_000.exe ZtCBaseList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCBaseList_000_D.exe ZtCBaseList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCBaseList_000_mw.exe ZtCBaseList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation
g++.exe -o ZtCBaseList_000_mw_D.exe ZtCBaseList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
./ZtCBaseList_000_mw.exe
./ZtCBaseList_000_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ Linux 컴파일
g++ -std=c++98 -o ZtCBaseList_000.exe ZtCBaseList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCBaseList_000_D.exe ZtCBaseList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ 실행
./ZtCBaseList_000.exe
./ZtCBaseList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -0,0 +1,256 @@
#include <iostream>
#include <string>
#include "ZCppMain/ZtCLinkList.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCLinkList
{
public:
typedef ZNsIFaceEx::ZtCLink<string, ZCEmpty> ZCLinkCStr ;
typedef ZtCLinkList<ZCLinkCStr> ZCLinkStrList;
typedef ZCLinkStrList::ZCLinkOpt ZCStrLinkOpt ;
public:
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Curr : "<<(AR_CLink)()<<endl;
}/*
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<(AR_CLink-1)()<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : " <<(AR_CLink )()<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<(AR_CLink+1)()<<endl;
}/*
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void AppendEach(ZCLinkCStr& AR_CLink)
{
AR_CLink().append("_");
}/*
static void AppendEach(ZCLinkCStr& AR_CLink)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZTypLong VI_CallCnt = 0 ;
ZCLinkStrList VO_ZCLinkStrLis1;
ZCLinkStrList VO_ZCLinkStrLis2;
ZCStrLinkOpt VO_StrLinkOpt = VO_ZCLinkStrLis1.GetObjOpt(1);
cout<<"# VO_StrLinkOpt.has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.bool() ="<<bool(VO_StrLinkOpt) <<endl;
VO_ZCLinkStrLis1.AddTail()()=string("123");
VO_ZCLinkStrLis1.AddTail()()=string("ABC");
VO_ZCLinkStrLis1.AddTail()()=string("xyz");
VO_ZCLinkStrLis2.AddTail()()=string("Z01");
VO_ZCLinkStrLis2.AddTail()()=string("Z02");
VO_ZCLinkStrLis2.AddTail()()=string("Z03");
VO_StrLinkOpt = VO_ZCLinkStrLis1.GetObjOpt(1);
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : bool ()="<<bool(VO_StrLinkOpt) <<endl;
if(VO_StrLinkOpt.has_value())
{
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() <<endl;
}/*
if(VO_StrLinkOpt.has_value())*/
VO_StrLinkOpt = VO_ZCLinkStrLis1.GetTailOpt();
cout<<"# VO_StrLinkOpt.GetTailOpt() : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.GetTailOpt() : bool ()="<<bool(VO_StrLinkOpt) <<endl;
if(VO_StrLinkOpt.has_value())
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
VO_ZCLinkStrLis1.JoinHead(VO_ZCLinkStrLis2);
cout<<"# after VO_ZCLinkStrLis1.JoinHead(VO_ZCLinkStrLis2)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
VO_ZCLinkStrLis2 = VO_ZCLinkStrLis1 ;
cout<<"# after VO_ZCLinkStrLis2 = VO_ZCLinkStrLis1"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&AppendEach);
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.SendRangeOutAfter
(
VO_ZCLinkStrLis1.GetObjOpt(1).value()
, VO_ZCLinkStrLis1.GetObjOpt(2).value()
, 2
, VO_ZCLinkStrLis2
, VO_ZCLinkStrLis2.GetObjOpt(1)
) ;
cout<<"# after VO_ZCLinkStrLis1.SendRangeOutAfter(1th, 2th, 2, rhs, rhs's 1th)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis2.SendRangeOutBefore
(
VO_ZCLinkStrLis2.GetObjOpt(7).value()
, VO_ZCLinkStrLis2.GetObjOpt(8).value()
, 2
, VO_ZCLinkStrLis1
, VO_ZCLinkStrLis1.GetObjOpt(1)
) ;
cout<<"# after VO_ZCLinkStrLis2.SendRangeOutAfter(7th, 8th, 2, rhs, rhs's 1th)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCLinkList*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCLinkList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> cygwin <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g++ -mno-cygwin -o ZtCLinkList_000.exe ZtCLinkList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLinkList_000_D.exe ZtCLinkList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
<EFBFBD><EFBFBD> mingw <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g++.exe -o ZtCLinkList_000_mw.exe ZtCLinkList_000.cpp -I../ -lWs2_32
g++.exe -o ZtCLinkList_000_mw_D.exe ZtCLinkList_000.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCLinkList_000_mw.exe
./ZtCLinkList_000_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
<EFBFBD><EFBFBD> Linux <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g++ -std=c++98 -o ZtCLinkList_000.exe ZtCLinkList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCLinkList_000_D.exe ZtCLinkList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
./ZtCLinkList_000.exe
./ZtCLinkList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -0,0 +1,431 @@

#include <iostream>
#include <string>
#include "ZCppMain/ZtCLinkList.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCLinkList
{
public:
class ZCLinkData : public ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData>
{
private:
string mo_DataCStr;
private:
static int SI_CallCnt;
public :
typedef ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData> TypeBase;
public :
ZCLinkData() : ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData>()
{
cout<<"* ZCLinkData() : "<<++ZCLinkData::SI_CallCnt<<endl;
}
ZCLinkData(const ZCLinkData& rhs) :
ZNsIFaceEx::
ZtCLink<ZCEmpty, ZCLinkData>(),
mo_DataCStr(rhs.mo_DataCStr)
{cout<<"* ZCLinkData(const ZCLinkData& rhs) : "<<++ZCLinkData::SI_CallCnt<<endl;}
ZCLinkData(const TypeBase& rhs) :
ZNsIFaceEx::
ZtCLink<ZCEmpty, ZCLinkData>(),
mo_DataCStr
(
(*static_cast<const ZCLinkData*>(&rhs)).mo_DataCStr
)
{cout<<"* ZCLinkData(const TypeBase& rhs) : "<<++ZCLinkData::SI_CallCnt<<endl;}
~ZCLinkData()
{
cout<<"* ~ZCLinkData() : "<<ZCLinkData::SI_CallCnt--<<endl;
}
ZCLinkData& operator=(const ZCLinkData& rhs)
{
mo_DataCStr = rhs.mo_DataCStr; return *this;
}/*
ZCLinkData& operator=(const ZCLinkData& rhs)*/
/***/ string& GetData() {return mo_DataCStr;}
const string& GetData() const{return mo_DataCStr;}
public :
};/*
class ZCLinkData : public ZNsIFaceEx::ZtCLink<ZCEmpty, ZCLinkData>*/
typedef ZNsIFaceEx::ZtCLink
<ZCEmpty, ZCLinkData> ZCLinkBase;
typedef ZNsIFaceEx::ZtCLink
<string , ZCEmpty > ZCLinkStr ;
public:
typedef ZtCLinkList<ZCLinkBase> ZCLinkDataList;
typedef ZtCLinkList<ZCLinkStr > ZCLinkStrList ;
typedef typename
ZCLinkDataList::ZCLinkOpt ZCStrLinkOpt ;
public:
static void ShowNode0(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Curr : "<<(AR_CLink)().GetData()<<endl;
}/*
static void ShowNode0(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode1(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<(AR_CLink-1)().GetData()<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : " <<(AR_CLink )().GetData()<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<(AR_CLink+1)().GetData()<<endl;
}/*
static void ShowNode1(ZCLinkBase& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void AppendEach(ZCLinkBase& AR_CLink)
{
AR_CLink().GetData().append("_");
}/*
static void AppendEach(ZCLinkBase& AR_CLink)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZTypLong VI_CallCnt =0 ;
ZCLinkDataList VO_CDataList1;
ZCLinkDataList VO_CDataList2;
ZCLinkStrList VO_CStrLis20 ;
ZCStrLinkOpt VO_StrLinkOpt = VO_CDataList1.GetObjOpt(1);
cout<<"# VO_StrLinkOpt.has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.bool() ="<<bool(VO_StrLinkOpt) <<endl;
VO_CDataList1.AddTail()().GetData()=string("123");
VO_CDataList1.AddTail()().GetData()=string("ABC");
VO_CDataList1.AddTail()().GetData()=string("xyz");
VO_CDataList2.AddTail()().GetData()=string("Z01");
VO_CDataList2.AddTail()().GetData()=string("Z02");
VO_CDataList2.AddTail()().GetData()=string("Z03");
VO_CStrLis20.AddTail()()=string("__1");
VO_CStrLis20.AddTail()()=string("__2");
VO_CStrLis20.AddTail()()=string("__3");
VO_StrLinkOpt = VO_CDataList1.GetObjOpt(1);
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : bool ()="<<bool(VO_StrLinkOpt) <<endl;
if(VO_StrLinkOpt.has_value())
{
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()().GetData()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() ().GetData()<<endl;
}/*
if(VO_StrLinkOpt.has_value())*/
VO_StrLinkOpt = VO_CDataList1.GetTailOpt();
cout<<"# VO_StrLinkOpt.GetTailOpt() : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.GetTailOpt() : bool ()="<<bool(VO_StrLinkOpt) <<endl;
if(VO_StrLinkOpt.has_value())
{
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()().GetData()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() ().GetData()<<endl;
}/*
if(VO_StrLinkOpt.has_value())*/
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
VO_CDataList1.JoinHead(VO_CDataList2);
cout<<"# after VO_CDataList1.JoinHead(VO_CDataList2)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
VO_CDataList2 = VO_CDataList1 ;
cout<<"# after VO_CDataList2 = VO_CDataList1"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&AppendEach);
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.SendRangeOutAfter
(
VO_CDataList1.GetObjOpt(1).value()
, VO_CDataList1.GetObjOpt(2).value()
, 2
, VO_CDataList2
, VO_CDataList2.GetObjOpt(1)
) ;
cout<<"# after VO_CDataList1.SendRangeOutAfter(1th, 2th, 2, rhs, rhs's 1th)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList2.SendRangeOutBefore
(
VO_CDataList2.GetObjOpt(7).value()
, VO_CDataList2.GetObjOpt(8).value()
, 2
, VO_CDataList1
, VO_CDataList1.GetObjOpt(1)
) ;
cout<<"# after VO_CDataList2.SendRangeOutAfter(7th, 8th, 2, rhs, rhs's 1th)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList2.CopyThis( RR(VO_CDataList1) );
cout<<"# after VO_CDataList2.CopyThis( RR(VO_CDataList1) )"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_CDataList2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.SwapLink
(VO_CDataList1.HeadRef(), VO_CDataList1.HeadRef(1));
cout<<"# after VO_CDataList1.SwapLink(1th, 2th)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.SwapLink
(VO_CDataList1.HeadRef(), VO_CDataList1.HeadRef(11));
cout<<"# after VO_CDataList1.SwapLink(1th, 12th)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.SwapLink
(VO_CDataList1.HeadRef(11), VO_CDataList1.HeadRef(10));
cout<<"# after VO_CDataList1.SwapLink(12th, 11th)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.MoveLinkTail
(VO_CDataList1.HeadRef());
cout<<"# after VO_CDataList1.MoveLinkTail(1th)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
_FOR_ITER_EASY_START0_C (VO_CDataList1, VH_NowIter, i)
{
cout<<"# list1 const: "<<(i+1)<<" "<<VO_CDataList1.ItD(VH_NowIter).GetData()<<endl;
}
_FOR_ITER_EASY_CLOSE0_C (VO_CDataList1, VH_NowIter, i)
cout<<"***********************************************"<<endl;
_FOR_ITER_EASY_START0_RC(VO_CDataList1, VH_NowIter, i)
{
cout<<"# list1 rev const: "<<(i+1)<<" "<<VO_CDataList1.ItD(VH_NowIter).GetData()<<endl;
}
_FOR_ITER_EASY_CLOSE0_RC(VO_CDataList1, VH_NowIter, i)
cout<<"***********************************************"<<endl;
__for_it(ZCLinkDataList, VO_CDataList1, VH_NowIter)
{
cout<<"# list1 __for_it : "<<VH_NowIter.GetPos()<<" "<<(*VH_NowIter).GetData()<<endl;
}
cout<<"***********************************************"<<endl;
__for_it(ZCLinkStrList , VO_CStrLis20, VH_NowIter)
{
cout<<"# list20 __for_it : "<<VH_NowIter.GetPos()<<" "<<(*VH_NowIter)<<endl;
}
_FOR_ITER_EASY_START0_C(VO_CStrLis20, VH_NowIter, i)
{
cout<<"# list20 const: "<<(i+1)<<" "<<VO_CStrLis20.ItD(VH_NowIter)<<endl;
}
_FOR_ITER_EASY_CLOSE0_C(VO_CStrLis20, VH_NowIter, i)
cout<<"***********************************************"<<endl;
VO_CDataList1.MoveRangeIn
(
VO_CDataList1.HeadRef( ),
VO_CDataList1.HeadRef(1 ),
VO_CDataList1.HeadRef(11),
true
);
cout<<"# after VO_CDataList1.MoveRangeIn(1th, 2th, 12th, after)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.MoveRangeIn
(
VO_CDataList1.HeadRef(1 ),
VO_CDataList1.HeadRef(11),
VO_CDataList1.HeadRef( ),
false
);
cout<<"# after VO_CDataList1.MoveRangeIn(2th, 12th, 1th, before)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_CDataList1.MoveRangeIn
(
VO_CDataList1.HeadRef( ),
VO_CDataList1.HeadRef(1),
VO_CDataList1.HeadRef(2),
false
);
cout<<"# after VO_CDataList1.MoveRangeIn(1th, 2th, 3th, before)"<<endl;
VO_CDataList1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCLinkList*/
template<typename TDummy> int
ZtCExamCLinkList<TDummy>::ZCLinkData::SI_CallCnt(0) ;
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCLinkList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCLinkList_001.exe ZtCLinkList_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLinkList_001_D.exe ZtCLinkList_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCLinkList_001_mw.exe ZtCLinkList_001.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation
g++.exe -o ZtCLinkList_001_mw_D.exe ZtCLinkList_001.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
./ZtCLinkList_001_mw.exe
./ZtCLinkList_001_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ Linux 컴파일
g++ -std=c++98 -o ZtCLinkList_001.exe ZtCLinkList_001.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCLinkList_001_D.exe ZtCLinkList_001.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ 실행
./ZtCLinkList_001.exe
./ZtCLinkList_001_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -0,0 +1,268 @@
#include <iostream>
#include <string>
#include "ZCppMain/ZtCLinkList.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCLinkList
{
public:
typedef ZNsIFaceEx::ZtCLink<string, ZCEmpty> ZCLinkCStr ;
typedef ZtCLinkMoveList<ZCLinkCStr> ZCLinkStrList;
typedef ZCLinkStrList::ZCLinkOpt ZCStrLinkOpt ;
public:
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt; cout<<ARRI_CallCnt<<" * Node Curr : "<<(AR_CLink)()<<endl;
}/*
static void ShowNode0(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<(AR_CLink-1)()<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : " <<(AR_CLink )()<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<(AR_CLink+1)()<<endl;
}/*
static void ShowNode1(ZCLinkCStr& AR_CLink, ZTypLong& ARRI_CallCnt)*/
static void AppendEach(ZCLinkCStr& AR_CLink)
{
AR_CLink().append("_");
}/*
static void AppendEach(ZCLinkCStr& AR_CLink)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZTypLong VI_CallCnt = 0 ;
ZCLinkStrList VO_ZCLinkStrLis1;
ZCLinkStrList VO_ZCLinkStrLis2;
ZCStrLinkOpt VO_StrLinkOpt = VO_ZCLinkStrLis1.GetObjOpt(1);
cout<<"# VO_StrLinkOpt.has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.bool() ="<<bool(VO_StrLinkOpt) <<endl;
VO_ZCLinkStrLis1.AddTail()()=string("123");
VO_ZCLinkStrLis1.AddTail()()=string("ABC");
VO_ZCLinkStrLis1.AddTail()()=string("xyz");
VO_ZCLinkStrLis2.AddTail()()=string("Z01");
VO_ZCLinkStrLis2.AddTail()()=string("Z02");
VO_ZCLinkStrLis2.AddTail()()=string("Z03");
VO_StrLinkOpt = VO_ZCLinkStrLis1.GetObjOpt(1);
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.GetObjOpt(1) : bool ()="<<bool(VO_StrLinkOpt) <<endl;
if(VO_StrLinkOpt.has_value())
{
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() <<endl;
cout<<"# value by VO_StrLinkOpt()(): "<<VO_StrLinkOpt() <<endl;
}
VO_StrLinkOpt = VO_ZCLinkStrLis1.GetTailOpt();
cout<<"# VO_StrLinkOpt.GetTailOpt() : has_value()="<<VO_StrLinkOpt.has_value()<<endl;
cout<<"# VO_StrLinkOpt.GetTailOpt() : bool ()="<<bool(VO_StrLinkOpt) <<endl;
if(VO_StrLinkOpt.has_value())
{
cout<<"# value by VO_StrLinkOpt : "<<VO_StrLinkOpt.value()<<endl;
cout<<"# value by VO_StrLinkOpt() : "<<VO_StrLinkOpt() <<endl;
cout<<"# value by VO_StrLinkOpt()(): "<<VO_StrLinkOpt()() <<endl;
}
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
VO_ZCLinkStrLis1.JoinHead(VO_ZCLinkStrLis2);
cout<<"# after VO_ZCLinkStrLis1.JoinHead(VO_ZCLinkStrLis2)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode1, ZftMCP(VI_CallCnt=0));
VO_ZCLinkStrLis2 = VO_ZCLinkStrLis1 ;
cout<<"# after VO_ZCLinkStrLis2 = VO_ZCLinkStrLis1"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&AppendEach);
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.SendRangeOutAfter
(
VO_ZCLinkStrLis1.GetObjOpt(1).value()
, VO_ZCLinkStrLis1.GetObjOpt(2).value()
, 2
, VO_ZCLinkStrLis2
, VO_ZCLinkStrLis2.GetObjOpt(1)
) ;
cout<<"# after VO_ZCLinkStrLis1.SendRangeOutAfter(1th, 2th, 2, rhs, rhs's 1th)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis2.SendRangeOutBefore
(
VO_ZCLinkStrLis2.GetObjOpt(2).value()
, VO_ZCLinkStrLis2.GetObjOpt(3).value()
, 2
, VO_ZCLinkStrLis1
, VO_ZCLinkStrLis1.GetObjOpt(1)
) ;
cout<<"# after VO_ZCLinkStrLis2.SendRangeOutBefore(VO_ZCLinkStrLis2 2th, 3th, 2, rhs, rhs's 1th)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis2.CopyThis(VO_ZCLinkStrLis1);
cout<<"# after VO_ZCLinkStrLis2.CopyThis(VO_ZCLinkStrLis1)"<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
VO_ZCLinkStrLis2.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
VO_ZCLinkStrLis1.IterElement(&ShowNode0, ZftMCP(VI_CallCnt=0));
cout<<"***********************************************"<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCLinkList*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCLinkList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> cygwin <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// g++ -mno-cygwin -o ZtCLinkMoveList_000.exe ZtCLinkMoveList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLinkMoveList_000_D.exe ZtCLinkMoveList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
<EFBFBD><EFBFBD> mingw <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g++.exe -o ZtCLinkMoveList_000_mw.exe ZtCLinkMoveList_000.cpp -I../ -lWs2_32
g++.exe -o ZtCLinkMoveList_000_mw_D.exe ZtCLinkMoveList_000.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCLinkMoveList_000_mw.exe
./ZtCLinkMoveList_000_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
<EFBFBD><EFBFBD> Linux <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g++ -std=c++98 -o ZtCLinkMoveList_000.exe ZtCLinkMoveList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCLinkMoveList_000_D.exe ZtCLinkMoveList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
./ZtCLinkMoveList_000.exe
./ZtCLinkMoveList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -0,0 +1,140 @@
#include <string>
#include <iostream>
#include "ZCppMain/ZtCLinkList.H"
using namespace std;
namespace ZNsMain
{
namespace ZNsExam
{
class ZCLinkEx :
public ZtCLink<ZCEmpty, ZCLinkEx>
{
};
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
typedef ZtCLink<ZCEmpty, ZCEmpty> ZCLink1;
typedef ZtCLink<string , ZCEmpty> ZCLink2;
typedef ZtCLink<ZCEmpty, string > ZCLink3;
typedef ZtCLink<string , string > ZCLink4;
typedef ZCLinkEx ZCLink5;
cout<<"# ZCLink1::TypeThis -> "<<typeid(ZCLink1::TypeThis ).name()<<endl;
cout<<"# ZCLink1::TypeBase -> "<<typeid(ZCLink1::TypeBase ).name()<<endl;
cout<<"# ZCLink1::TypeChild-> "<<typeid(ZCLink1::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink2::TypeThis -> "<<typeid(ZCLink2::TypeThis ).name()<<endl;
cout<<"# ZCLink2::TypeBase -> "<<typeid(ZCLink2::TypeBase ).name()<<endl;
cout<<"# ZCLink2::TypeChild-> "<<typeid(ZCLink2::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink3::TypeThis -> "<<typeid(ZCLink3::TypeThis ).name()<<endl;
cout<<"# ZCLink3::TypeBase -> "<<typeid(ZCLink3::TypeBase ).name()<<endl;
cout<<"# ZCLink3::TypeChild-> "<<typeid(ZCLink3::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink4::TypeThis -> "<<typeid(ZCLink4::TypeThis ).name()<<endl;
cout<<"# ZCLink4::TypeBase -> "<<typeid(ZCLink4::TypeBase ).name()<<endl;
cout<<"# ZCLink4::TypeChild-> "<<typeid(ZCLink4::TypeChild).name()<<endl;
cout<<"**********************************************************"<<endl;
cout<<"# ZCLink5::TypeThis -> "<<typeid(ZCLink5::TypeThis ).name()<<endl;
cout<<"# ZCLink5::TypeBase -> "<<typeid(ZCLink5::TypeBase ).name()<<endl;
cout<<"# ZCLink5::TypeChild-> "<<typeid(ZCLink5::TypeChild).name()<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCLink_001.exe ZtCLink_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLink_001_D.exe ZtCLink_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCLink_001_mw.exe ZtCLink_001.cpp -I../
g++.exe -o ZtCLink_001_mw_D.exe ZtCLink_001.cpp -I../ -D_DEBUG
./ZtCLink_001_mw.exe
./ZtCLink_001_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ Linux 컴파일
g++ -std=c++98 -o ZtCLink_001.exe ZtCLink_001.cpp -I../
g++ -std=c++98 -o ZtCLink_001_D.exe ZtCLink_001.cpp -I../ -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ 실행
./ZtCLink_001.exe
./ZtCLink_001_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -195,7 +195,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCLoadXml_000.exe ZtCLoadXml_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCLoadXml_000_D.exe ZtCLoadXml_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG

View File

@ -67,7 +67,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCObjAVL_000.exe ZtCObjAVL_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCObjAVL_000_D.exe ZtCObjAVL_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG

View File

@ -33,6 +33,15 @@ namespace ZNsMain
typedef ZtCObjList
<CStringBase, CCStringBase&> CStringList2 ;
typedef CStringList1::ZCLink ZCLink1;
typedef CStringList2::ZCLink ZCLink2;
typedef CStringList1::ZCLinkOpt ZCLinkOpt1;
typedef CStringList2::ZCLinkOpt ZCLinkOpt2;
typedef CStringList1::ZCDataOpt ZCDataOpt1;
typedef CStringList2::ZCDataOpt ZCDataOpt2;
static void ShowDataInNode(const CStringBase& AR_Data)
{
@ -40,23 +49,111 @@ namespace ZNsMain
}/*
static void ShowDataInNode(const CStringBase& AR_Data)*/
static void ShowNode1(ZCLink1& AR_CLink)
{
cout<<"* Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<"* Node Curr : "<<*(AR_CLink )<<endl;
cout<<"* Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode1(ZCLink1& AR_CLink)*/
static void ShowNode2(ZCLink2& AR_CLink)
{
cout<<"* Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<"* Node Curr : "<<*(AR_CLink )<<endl;
cout<<"* Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode2(ZCLink2& AR_CLink)*/
static void Append1(ZCLink1& AR_CLink)
{
(*AR_CLink).append("__");
}/*
static void Append1(ZCLink1& AR_CLink)*/
static void ShowNode1_2(ZCLink1& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode1(ZCLink1& AR_CLink, int& ARRI_CallCnt)*/
static void ShowNode2_2(ZCLink2& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Prev : "<<*(AR_CLink-1)<<endl;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
cout<<ARRI_CallCnt<<" * Node Next : "<<*(AR_CLink+1)<<endl;
}/*
static void ShowNode2(ZCLink2& AR_CLink, int& ARRI_CallCnt)*/
static void ShowNode1_3(ZCLink1& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
}/*
static void ShowNode1(ZCLink1& AR_CLink, int& ARRI_CallCnt)*/
static void ShowNode2_3(ZCLink2& AR_CLink, int& ARRI_CallCnt)
{
++ARRI_CallCnt;
cout<<ARRI_CallCnt<<" * Node Curr : "<<*(AR_CLink )<<endl;
}/*
static void ShowNode2(ZCLink2& AR_CLink, int& ARRI_CallCnt)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
CStringBase VO_CStringBase;
CStringList1 VO_ListOfStr1 ;
CStringList2 VO_ListOfStr2 ;
CStringBase VO_CStringBase ;
CStringList1 VO_ListOfStr10 ;
CStringList2 VO_ListOfStr20 ;
VO_ListOfStr1.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr1.AddTail(VO_CStringBase("data 04"));
ZCDataOpt1 VO_ZCDataOpt1 = VO_ListOfStr10.HeadOptD() ;
ZCLinkOpt1 VO_ZCLinkOpt1 = VO_ListOfStr10.TailOpt() ;
if(bool(VO_ZCDataOpt1))
cout<<"# VO_ListOfStr10's head data : " <<*VO_ZCDataOpt1<<endl;
else cout<<"# VO_ListOfStr10's head data none "<<endl;
if(bool(VO_ZCLinkOpt1))
cout<<"# VO_ListOfStr10's tail link data : " <<**VO_ZCLinkOpt1<<endl;
else cout<<"# VO_ListOfStr10's tail link data none "<<endl;
VO_ListOfStr10.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
VO_ZCDataOpt1 = VO_ListOfStr10.HeadOptD() ;
VO_ZCLinkOpt1 = VO_ListOfStr10.TailOpt() ;
if(bool(VO_ZCDataOpt1))
cout<<"# VO_ListOfStr10's head data : " <<*VO_ZCDataOpt1<<endl;
else cout<<"# VO_ListOfStr10's head data none "<<endl;
if(bool(VO_ZCLinkOpt1))
cout<<"# VO_ListOfStr10's tail link data : " <<**VO_ZCLinkOpt1<<endl;
else cout<<"# VO_ListOfStr10's tail link data none "<<endl;
cout<<"# 1th IterElement ####" <<endl;
{
VO_ListOfStr1.IterElement(&ShowDataInNode);
VO_ListOfStr10.IterElement(&ShowDataInNode);
}
cout<<"# 1th IterElemRev ####" <<endl;
{
VO_ListOfStr10.IterElemRev(&ShowDataInNode);
}
/*///////////////////////////////////*/
@ -64,21 +161,275 @@ namespace ZNsMain
cout<<endl;
VO_ListOfStr2.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr2.AddTail(VO_CStringBase("data 04"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 2th IterElement ####" <<endl;
{
VO_ListOfStr2.IterElement(&ShowDataInNode);
VO_ListOfStr20.IterElement(&ShowDataInNode);
}
cout<<"# 2th IterElemRev ####" <<endl;
{
VO_ListOfStr20.IterElemRev(&ShowDataInNode);
}
/*///////////////////////////////////*/
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list20 size : " <<VO_ListOfStr20.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list20 free size: " <<VO_ListOfStr20.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list20 capacity : " <<VO_ListOfStr20.capacity ()<<endl;
VO_ListOfStr10.clear(); VO_ListOfStr20.clear();
VO_ListOfStr10.GetCFreeHeap().AddHeap(3);
VO_ListOfStr20.GetCFreeHeap().AddHeap(3);
cout<<"# After clear() & AddHeap(3)"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list20 size : " <<VO_ListOfStr20.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list20 free size: " <<VO_ListOfStr20.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list20 capacity : " <<VO_ListOfStr20.capacity ()<<endl;
CStringList1 VO_ListOfStr11 ;
cout<<"# add 2 elements and clear in VO_ListOfStr11"<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 01"));
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 02"));
VO_ListOfStr11.clear();
cout<<"# After list10 Fetch from list11"<<endl;
VO_ListOfStr10.GetCFreeHeap().Fetch( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# After list11 Fetch 3 from list10"<<endl;
VO_ListOfStr11.GetCFreeHeap().
Fetch( VO_ListOfStr10.GetCFreeHeap(), 3);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add1"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add2"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add3"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add4"));
cout<<"# After add 4 in list11"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# After MakeEqual() : list10 and list11"<<endl;
VO_ListOfStr10.GetCFreeHeap().MakeEqual( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# list11 IterElemRev ####" <<endl;
{
VO_ListOfStr11.IterElemRev(&ShowDataInNode);
}/*
cout<<"# list11 IterElemRev ####" <<endl;*/
VO_ListOfStr11.RotateBack();
cout<<"# list11 IterElemRev after RotateBack"<<endl;
cout<<"# list11 IterElemRev ####" <<endl;
{
VO_ListOfStr11.IterElemRev(&ShowDataInNode);
}/*
cout<<"# list11 IterElemRev ####" <<endl;*/
VO_ListOfStr10 = VO_ListOfStr11 ;
cout<<"# list10 IterElement after list10 = list11"<<endl;
VO_ListOfStr10.IterElement(&ShowDataInNode);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.AddHead(VO_CStringBase("list11 add99"));
VO_ListOfStr10 = VO_ListOfStr11 ;
cout<<"# list10 IterElement after list11.addhead, list10 = list11"<<endl;
VO_ListOfStr10.IterElement(&ShowDataInNode);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
int VI_CallCnt=0;
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list10 2th link to list11 tail"<<endl;
VO_ListOfStr10.SendOutTail(*VO_ListOfStr10.GetLinkPtr(2), VO_ListOfStr11);
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_2, ZftMCP(VI_CallCnt=0));
cout<<"# list10 1th link to list10 head"<<endl;
VO_ListOfStr10.SendOutHead(*VO_ListOfStr10.GetLinkPtr(1), VO_ListOfStr11);
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.IterElemLink(&Append1);
VO_ListOfStr11.SendRangeOutAfter
(
*VO_ListOfStr11.GetLinkPtr(2)
, *VO_ListOfStr11.GetLinkPtr(3)
, 2
, RR(VO_ListOfStr10)
, VO_ListOfStr10.GetLinkOpt(2)
);
cout<<"# list11's 2th ~ 3th link to list10's 2th link after"<<endl;
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr10.SendRangeOutBefore
(
*VO_ListOfStr10.GetLinkPtr(3)
, *VO_ListOfStr10.GetLinkPtr(4)
, 2
, RR(VO_ListOfStr11)
, VO_ListOfStr11.GetLinkOpt(1)
);
cout<<"# list10's 3th ~ 4th link to list11's 1th link before"<<endl;
cout<<"# list10 IterElemLink ################"<<endl;
VO_ListOfStr10.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.Rotate();
cout<<"# list11 Rotate() ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
cout<<"# list11 IterElemLinkRev() ################"<<endl;
VO_ListOfStr11.IterElemLinkRev(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
cout<<"*****************************************************"<<endl;
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(1)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveLinkIn(1th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(5)
, *VO_ListOfStr11.GetLinkPtr(1)
, false
);
cout<<"# list11 MoveLinkIn(5th, 1th, before)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveLinkIn
(
*VO_ListOfStr11.GetLinkPtr(6)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveLinkIn(6th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
VO_ListOfStr11.MoveRangeIn
(
*VO_ListOfStr11.GetLinkPtr(1)
, *VO_ListOfStr11.GetLinkPtr(2)
, *VO_ListOfStr11.GetLinkPtr(7)
, true
);
cout<<"# list11 MoveRangeIn(1th, 2th, 7th, after)"<<endl;
cout<<"# list11 IterElemLink ################"<<endl;
VO_ListOfStr11.IterElemLink(&ShowNode1_3, ZftMCP(VI_CallCnt=0));
typedef CStringList1::iterator iterator1 ;
//typedef CStringList1::ZCLinkPointEx iteratorEx1;
typedef CStringList1::ZCNodePointN iteratorN1 ;
iterator1 VO_Iter1 = VO_ListOfStr11.end();
//iteratorEx1 VO_IterEx1 = VO_ListOfStr11.end();
iteratorN1 VO_IterN1(VO_Iter1);
__for_itc (CStringList1, VO_ListOfStr11, VO_NowIter)
{
cout<<"(by for_itc ) "<<VO_NowIter.GetPos()<<" : "<<*VO_NowIter<<endl;
}
__for_it_r(CStringList1, VO_ListOfStr11, VO_NowIter)
{
cout<<"(by for_it_r) "<<VO_NowIter.GetPos()<<" : "<<*VO_NowIter<<endl;
}
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
@ -106,15 +457,15 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCObjList_000.exe ZtCObjList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCObjList_000_D.exe ZtCObjList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCObjList_000_mw.exe ZtCObjList_000.cpp -I../ -lWs2_32
g++.exe -o ZtCObjList_000_mw_D.exe ZtCObjList_000.cpp -I../ -lWs2_32 -D_DEBUG
g++.exe -o ZtCObjList_000_mw.exe ZtCObjList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder -Wno-unknown-pragmas
g++.exe -o ZtCObjList_000_mw_D.exe ZtCObjList_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder -Wno-unknown-pragmas -D_DEBUG
./ZtCObjList_000_mw.exe
./ZtCObjList_000_mw_D.exe
@ -134,8 +485,8 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
■ Linux 컴파일
g++ -std=c++98 -o ZtCObjList_000.exe ZtCObjList_000.cpp -I../
g++ -std=c++98 -o ZtCObjList_000_D.exe ZtCObjList_000.cpp -I../ -D_DEBUG
g++ -std=c++98 -o ZtCObjList_000.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder
g++ -std=c++98 -o ZtCObjList_000_D.exe ZtCObjList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -Wno-reorder -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

View File

@ -0,0 +1,337 @@

#include <iostream>
#include "ZCppMain/ZtCSimList.H"
#include "ZCppMain/ZtCStringEx.H"
using namespace std ;
using namespace ZNsMain ;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TDummy=void*> class ZtCExamCSimList
{
public:
typedef ZtCStringBase<char> CStringBase ;
typedef const CStringBase CCStringBase;
/* 아래 자료형에 대해, CStringBase::Fetch() 호출 여부 실험.
ZtCSimList<CStringBase&, CCStringBase&>
ZtCSimList<CStringBase&, CCCStringBase&>
*/
typedef ZtCSimList
<CStringBase, CStringBase&> CStringList1 ;
typedef ZtCSimList
<CStringBase, CCStringBase&> CStringList2 ;
class CHelpObj
{
public:
int mi_CallNo;
public:
CHelpObj() : mi_CallNo(0)
{
cout<<"* CHelpObj()"<<endl;
}
CHelpObj(const CHelpObj& rhs) : mi_CallNo(0)
{
cout<<"* CHelpObj(const CHelpObj& rhs)"<<endl;
}
void operator()( CStringBase& AR_DataCStr)
{ cout<<"# CallNo="<<++mi_CallNo<<" : "<<AR_DataCStr<<endl; }
void operator()(CCStringBase& AR_DataCStr)
{ cout<<"# CallNo="<<++mi_CallNo<<" : "<<AR_DataCStr<<endl; }
public:
};/*
class CHelpObj*/
struct StFunctor
{
static void ShowElement(int ArgiValue){cout<<"#1 Value="<<ArgiValue<<endl;}
};
struct StFunctor2
{
static void ShowElement(int ArgiValue, CHelpObj)
{cout<<"#2 Value="<<ArgiValue<<", CHelpObj Addr=None"<<" With CHelpObj"<<endl;}
};
struct StFunctor3
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#3 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref"<<endl;}
};
struct StFunctor4
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj)
{cout<<"#4 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj in Ptr"<<endl;}
};
struct StFunctor5
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj& AR_CHelpObj2)
{cout<<"#5 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Ref 2"<<endl;}
};
struct StFunctor6
{
static void ShowElement(int ArgiValue, CHelpObj& AR_CHelpObj, CHelpObj AO_CHelpObj2)
{cout<<"#6 Value="<<ArgiValue<<", HelpObj Ptr="<<&AR_CHelpObj<<" With CHelpObj Half Ref"<<endl;}
};
public:
static void ShowDataInNode(const CStringBase& AR_Data)
{
cout<<"* Data : "<<AR_Data<<endl;
}/*
static void ShowDataInNode(const CStringBase& AR_Data)*/
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
CStringBase VO_CStringBase;
CStringList1 VO_ListOfStr10 ;
CStringList2 VO_ListOfStr20 ;
VO_ListOfStr10.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr10.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 1th IterElement ####" <<endl;
{
VO_ListOfStr10.IterElement(&ShowDataInNode);
}
/*///////////////////////////////////*/
cout<<endl;
VO_ListOfStr20.AddTail(VO_CStringBase("data 10"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 20"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 40"));
VO_ListOfStr20.AddTail(VO_CStringBase("data 04"));
cout<<"# VO_CStringBase data : " <<VO_CStringBase<<endl;
cout<<"# 2th IterElement ####" <<endl;
{
VO_ListOfStr20.IterElement(&ShowDataInNode);
}
/*///////////////////////////////////*/
typedef ZtCSimList<int> CIntList;
CHelpObj VO_CHelpObj;
CIntList VO_CIntList;
VO_CIntList.AddTail(10);
VO_CIntList.AddTail(20);
VO_CIntList.AddTail(30);
VO_CIntList.AddTail(40);
cout<<endl<<"#### Show CIntList Element ####"<<endl<<endl;
VO_CIntList.IterElement(StFunctor ::ShowElement);
VO_CIntList.IterElement(StFunctor2::ShowElement, VO_CHelpObj );
VO_CIntList.IterElement(StFunctor3::ShowElement, ZftMCR(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor4::ShowElement, ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor5::ShowElement, ZftMCP(VO_CHelpObj), ZftMCP(VO_CHelpObj) );
VO_CIntList.IterElement(StFunctor6::ShowElement, ZftMCP(VO_CHelpObj), VO_CHelpObj );
CStringList1 VO_ListOfStr11 ;
cout<<"# add 2 elements and clear in VO_ListOfStr11"<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 01"));
VO_ListOfStr11.AddTail(VO_CStringBase("lsit 11 data 02"));
VO_ListOfStr11.clear();
cout<<"# After list10 Fetch from list11"<<endl;
VO_ListOfStr10.GetCFreeHeap().Fetch( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# After list11 Fetch 3 from list10"<<endl;
VO_ListOfStr11.GetCFreeHeap().
Fetch( VO_ListOfStr10.GetCFreeHeap(), 3);
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add1"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add2"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add3"));
VO_ListOfStr11.AddTail(VO_CStringBase("list11 add4"));
cout<<"# After add 4 in list11"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
VO_ListOfStr11.GetCFreeHeap().AddHeap(2);
VO_ListOfStr10.GetCFreeHeap().MakeEqual( VO_ListOfStr11.GetCFreeHeap() );
cout<<"# After adding free 2 in list11 and MakeEqual() : list10 and list11"<<endl;
cout<<"# list10 size : " <<VO_ListOfStr10.size ()<<endl;
cout<<"# list11 size : " <<VO_ListOfStr11.size ()<<endl;
cout<<"# list10 free size: " <<VO_ListOfStr10.GetFreeSize ()<<endl;
cout<<"# list11 free size: " <<VO_ListOfStr11.GetFreeSize ()<<endl;
cout<<"# list10 capacity : " <<VO_ListOfStr10.capacity ()<<endl;
cout<<"# list11 capacity : " <<VO_ListOfStr11.capacity ()<<endl;
cout<<"# list11 IterElement ####" <<endl;
{
VO_ListOfStr11.IterElement(&ShowDataInNode);
}/*
cout<<"# list11 IterElement ####" <<endl;*/
cout<<"# list11 IterElement : ZftMCR(CHelpObj)" <<endl;
VO_ListOfStr11.IterElement(ZftMCR(VO_CHelpObj));
cout<<"# list11 IterElement : ZftMCP(CHelpObj)" <<endl;
VO_ListOfStr11.IterElement(ZftMCP(VO_CHelpObj));
VO_ListOfStr11 = VO_ListOfStr10 ;
cout<<"# list11 IterElement : after list11=list10" <<endl;
VO_ListOfStr11.IterElement(ZftMCP(VO_CHelpObj));
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCSimList*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCSimList<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCSimList_000.exe ZtCSimList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCSimList_000_D.exe ZtCSimList_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCSimList_000_mw.exe ZtCSimList_000.cpp -I../ -lWs2_32
g++.exe -o ZtCSimList_000_mw_D.exe ZtCSimList_000.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCSimList_000_mw.exe
./ZtCSimList_000_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ Linux 컴파일
g++ -std=c++98 -o ZtCSimList_000.exe ZtCSimList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCSimList_000_D.exe ZtCSimList_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ 실행
./ZtCSimList_000.exe
./ZtCSimList_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -0,0 +1,308 @@
#include <string>
#include <iostream>
#include "ZCppMain/ZtCStringEx.H"
#include "ZCppMain/ZtCStringStd.H"
using namespace std;
namespace ZNsMain
{
namespace ZNsExam
{
typedef ZtCStringStd<string> ZCStringStd ;
typedef ZtCStringStd<wstring> ZCStringStdW ;
typedef ZtCStringBase<char> ZCStringBase ;
typedef ZtCStringBase<wchar_t> ZCStringBaseW ;
typedef ZCStringBase ::ZCCharView ZCCharView ;
typedef ZCStringBaseW::ZCCharView ZCCharViewW ;
typedef ZCStringStd ::ZCCharView ZCCharViewS ;
typedef ZCStringStdW ::ZCCharView ZCCharViewSW ;
typedef ZtCCharType<ZCStringBase> ZCCharType ;
typedef ZtCCharType<ZCStringBaseW> ZCCharTypeW ;
typedef ZtCCharType<ZCStringStd > ZCCharTypeS ;
typedef ZtCCharType<ZCStringStdW> ZCCharTypeSW ;
typedef ZCCharType ::TypeChar TypeChar ;
typedef ZCCharTypeW ::TypeChar TypeCharW ;
typedef ZCCharType ::TypeInt TypeCharInt ;
typedef ZCCharTypeW ::TypeInt TypeCharIntW ;
typedef ZCCharTypeS ::TypeChar TypeCharS ;
typedef ZCCharTypeSW::TypeChar TypeCharSW ;
typedef ZCCharTypeS ::TypeInt TypeCharIntS ;
typedef ZCCharTypeSW::TypeInt TypeCharIntSW ;
const int CI_ByteSize = ZCCharType ::CI_ByteSize;
const int CI_ByteSizeW = ZCCharTypeW ::CI_ByteSize;
const int CI_ByteSizeS = ZCCharTypeS ::CI_ByteSize;
const int CI_ByteSizeSW = ZCCharTypeSW::CI_ByteSize;
template<typename TDummy=void*> class ZtCExamCStringBase_000
{
public:
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
cout<<"# TypeChar ="<<typeid(TypeChar ).name()<<endl;
cout<<"# TypeCharW ="<<typeid(TypeCharW ).name()<<endl;
cout<<"# TypeCharInt ="<<typeid(TypeCharInt ).name()<<endl;
cout<<"# TypeCharIntW ="<<typeid(TypeCharIntW ).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# TypeCharS ="<<typeid(TypeCharS ).name()<<endl;
cout<<"# TypeCharSW ="<<typeid(TypeCharSW ).name()<<endl;
cout<<"# TypeCharIntS ="<<typeid(TypeCharIntS ).name()<<endl;
cout<<"# TypeCharIntSW="<<typeid(TypeCharIntSW).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# CI_ByteSize ="<<CI_ByteSize <<endl;
cout<<"# CI_ByteSizeW ="<<CI_ByteSizeW <<endl;
cout<<"# CI_ByteSizeS ="<<CI_ByteSizeS <<endl;
cout<<"# CI_ByteSizeSW="<<CI_ByteSizeSW <<endl;
cout<<"*****************************************************"<<endl;
cout<<"# ZCStringBase ::TypeCharInt="<<typeid(ZCStringBase ::TypeCharInt).name()<<endl;
cout<<"# ZCStringBaseW::TypeCharInt="<<typeid(ZCStringBaseW::TypeCharInt).name()<<endl;
cout<<"# ZCStringBase ::size_type ="<<typeid(ZCStringBase ::size_type ).name()<<endl;
cout<<"# ZCStringBaseW::size_type ="<<typeid(ZCStringBaseW::size_type ).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# ZCStringStd ::TypeCharInt="<<typeid(ZCStringStd ::TypeCharInt).name()<<endl;
cout<<"# ZCStringStdW ::TypeCharInt="<<typeid(ZCStringStdW ::TypeCharInt).name()<<endl;
cout<<"# ZCStringStd ::size_type ="<<typeid(ZCStringStd ::size_type ).name()<<endl;
cout<<"# ZCStringStdW ::size_type ="<<typeid(ZCStringStdW ::size_type ).name()<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# ZCStringBase ::traits_type::char_type="<<typeid(ZCStringBase ::traits_type::char_type).name()<<endl;
cout<<"# ZCStringBaseW::traits_type::char_type="<<typeid(ZCStringBaseW::traits_type::char_type).name()<<endl;
cout<<"# ZCStringBase ::traits_type::int_type ="<<typeid(ZCStringBase ::traits_type::int_type ).name()<<endl;
cout<<"# ZCStringBaseW::traits_type::int_type ="<<typeid(ZCStringBaseW::traits_type::int_type ).name()<<endl;
cout<<"# ZCStringBase ::traits_type="<<typeid(ZCStringBase ::traits_type).name()<<endl;
cout<<"# ZCStringBaseW::traits_type="<<typeid(ZCStringBaseW::traits_type).name()<<endl;
cout<<"*****************************************************"<<endl;
ZCStringBaseW VO_ZCStringBaseW;
ZCStringStdW VO_ZCStringStdW ;
cout<<"# '.' ascii code ="<<int('.')<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringBaseW=123;
cout<<"* after VO_ZCStringBaseW=123"<<endl;
cout<<"# VO_ZCStringBaseW[0]="<<int(VO_ZCStringBaseW[0])<<endl;
cout<<"# VO_ZCStringBaseW[1]="<<int(VO_ZCStringBaseW[1])<<endl;
cout<<"# VO_ZCStringBaseW[2]="<<int(VO_ZCStringBaseW[2])<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringBaseW.GetLong()="<<VO_ZCStringBaseW.GetLong()<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringBaseW=2.3;
cout<<"* after VO_ZCStringBaseW=2.3"<<endl;
cout<<"# VO_ZCStringBaseW[0]="<<int(VO_ZCStringBaseW[0])<<endl;
cout<<"# VO_ZCStringBaseW[1]="<<int(VO_ZCStringBaseW[1])<<endl;
cout<<"# VO_ZCStringBaseW[2]="<<int(VO_ZCStringBaseW[2])<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringBaseW.GetDouble()="<<VO_ZCStringBaseW.GetDouble()<<endl;
cout<<"*****************************************************"<<endl;
VO_ZCStringStdW=1.2;
cout<<"* after VO_ZCStringStdW=1.2"<<endl;
cout<<"# VO_ZCStringStdW [0]="<<int(VO_ZCStringStdW[0])<<endl;
cout<<"# VO_ZCStringStdW [1]="<<int(VO_ZCStringStdW[1])<<endl;
cout<<"# VO_ZCStringStdW [2]="<<int(VO_ZCStringStdW[2])<<endl;
cout<<"*****************************************************"<<endl;
cout<<"# VO_ZCStringStdW.GetDouble()="<<VO_ZCStringStdW.GetDouble()<<endl;
cout<<"*****************************************************"<<endl;
const ZCCharView CO_ZCCharView("1234AA5678AA90abcAAss");
ZCStringBase VO_ZCStringStd(CO_ZCCharView);
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"* after VO_ZCStringStd.Replace('12', '***')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("12"), ZCCharView("***"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after VO_ZCStringStd=CO_ZCCharView"<<endl;
VO_ZCStringStd=CO_ZCCharView;
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('AA', '___')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("AA"), ZCCharView("___"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('12', '###')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("12"), ZCCharView("###"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('##', 'T')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("##"), ZCCharView("T"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('ss', '')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("ss"), ZCCharView(""));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
ZftMakeStr(VO_ZCStringStd , ZTypIntULL(1234));
ZftMakeStr(VO_ZCStringStd , ZCCharView("--"));
ZftMakeStr(VO_ZCStringStd , double(10.01));
ZftMakeStr(VO_ZCStringStd , true);
ZftMakeStr(VO_ZCStringStd , 'Z');
ZftMakeStr(VO_ZCStringStd , ZCCharView("_Z_"));
ZftMakeStr(VO_ZCStringStdW, ZTypIntULL(1234));
ZftMakeStr(VO_ZCStringStdW, ZCCharViewSW(L"--"));
ZftMakeStr(VO_ZCStringStdW, double(10.01));
ZftMakeStr(VO_ZCStringStdW, true);
ZftMakeStr(VO_ZCStringStdW, L'Z');
ZftMakeStr(VO_ZCStringStdW, ZCCharViewSW(L"_Z_"));
VO_ZCStringStdW(false);
cout<<"* after ZftMakeStr(VO_ZCStringStd, ~)"<<endl;
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after ZftMakeStr(VO_ZCStringStdW, ~)"<<endl;
cout<<"# "<<VO_ZCStringStdW<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after VO_ZCStringStd.Replace('T#', '')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("T#"), ZCCharView(""));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('Z_', 'Z@%')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("Z_"), ZCCharView("Z@%"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('true', '_TRUE_')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("true"), ZCCharView("_TRUE_"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after Replace('_', '~&')"<<endl;
VO_ZCStringStd.Replace(ZCCharView("_"), ZCCharView("~&"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
cout<<"* after ()(ZCCharViewW('_AZ'))"<<endl;
VO_ZCStringStd(ZCCharView("_AZ"));
cout<<"# "<<VO_ZCStringStd<<endl;
cout<<"*****************************************************"<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
public:
};/*
template<typename TDummy=void*> class ZtCExamCStringBase_000*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::
ZtCExamCStringBase_000<>::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCStringBase_000.exe ZtCStringBase_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCStringBase_000_D.exe ZtCStringBase_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o ZtCStringBase_000_mw.exe ZtCStringBase_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation
g++.exe -o ZtCStringBase_000_mw_D.exe ZtCStringBase_000.cpp -I../ -lWs2_32 -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
./ZtCStringBase_000_mw.exe
./ZtCStringBase_000_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ Linux 컴파일
g++ -std=c++98 -o ZtCStringBase_000.exe ZtCStringBase_000.cpp -I../
g++ -std=c++98 -o ZtCStringBase_000_D.exe ZtCStringBase_000.cpp -I../ -D_DEBUG
g++ -std=c++98 -o ZtCStringBase_000.exe ZtCStringBase_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCStringBase_000_D.exe ZtCStringBase_000.cpp -I../ -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ 실행
./ZtCStringBase_000.exe
./ZtCStringBase_000_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/

View File

@ -160,7 +160,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCThreadEx_000.exe ZtCThreadEx_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCThreadEx_000_D.exe ZtCThreadEx_000.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG

View File

@ -159,7 +159,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCThreadEx_001.exe ZtCThreadEx_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCThreadEx_001_D.exe ZtCThreadEx_001.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG

View File

@ -162,7 +162,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o ZtCThreadEx_002_MutexCond.exe ZtCThreadEx_002_MutexCond.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o ZtCThreadEx_002_MutexCond_D.exe ZtCThreadEx_002_MutexCond.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
@ -172,6 +172,9 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw_D.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32 -D_DEBUG
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32
g++.exe -std=c++98 -o ZtCThreadEx_002_MutexCond_mw_D.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lWs2_32 -D_DEBUG
./ZtCThreadEx_002_MutexCond_mw.exe
./ZtCThreadEx_002_MutexCond_mw_D.exe
@ -190,8 +193,8 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
■ Linux 컴파일
g++ -std=c++98 -o ZtCThreadEx_002_MutexCond.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lpthread
g++ -std=c++98 -o ZtCThreadEx_002_MutexCond_D.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lpthread -D_DEBUG
g++ -std=c++98 -o ZtCThreadEx_002_MutexCond.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lpthread -Wall -Wno-unused-function -Wno-misleading-indentation
g++ -std=c++98 -o ZtCThreadEx_002_MutexCond_D.exe ZtCThreadEx_002_MutexCond.cpp -I../ -lpthread -Wall -Wno-unused-function -Wno-misleading-indentation -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

View File

@ -62,7 +62,7 @@ int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cigwin 컴파일
■ cygwin 컴파일
// g++ -mno-cygwin -o c++_test_005.exe c++_test_005.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o c++_test_005_D.exe c++_test_005.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG

View File

@ -0,0 +1,351 @@
#include <iostream>
#include <string>
#include "ZCppMain/ZMainHead.H"
using namespace std ;
using namespace ZNsMain;
namespace ZNsMain
{
namespace ZNsExam
{
template<typename TType> class ZtCTest
{
public:
template<TType TTypeVar> class ZCTypeVar
{
public:
TType MO_TypeVar;
public:
ZCTypeVar()
{
MO_TypeVar=TTypeVar;
}
public:
};/*
template<TType TTypeVar> class ZCTypeVar*/
public:
};/*
template<typename TType> class ZtCTest*/
template<typename TType, TType TTypeVar> class ZtCTest2
{
public:
TType MO_TypeVar;
public:
ZtCTest2()
{
MO_TypeVar=TTypeVar;
}
public:
};/*
template<typename TType, TType TTypeVar> class ZtCTest2*/
class ZCTypeView
{
public:
ZCTypeView()
{
cout<<"# ZCTypeView()"<<endl;
}
ZCTypeView(const ZCTypeView& rhs)
{
cout<<"ZCTypeView(const ZCTypeView& rhs)"<<endl;
}
~ZCTypeView()
{
cout<<"# ~ZCTypeView()"<<endl;
}
template<typename TTypChain> void OnMeetType()
{
cout<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetType(TTypHelp& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : "<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain> void OnMeetTypeVal()
{
cout<<"* Val="<<TTypChain::GetData()<<", ETypeNo="<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TTypChain, typename TTypHelp> void OnMeetTypeVal(TTypHelp& AR_CallNo)
{
cout<<"* Call No="<<++AR_CallNo<<" : Val="<<TTypChain::GetData()<<", ETypeNo="<<TTypChain::ZETypeNo<<" : "<<typeid(typename TTypChain::TypeData).name()<<endl;
}
template<typename TObjtChain> void OnMeetData(TObjtChain& AR_NowChain)
{
cout<<"* Type No="<<AR_NowChain.GetNo()<<" : "<<AR_NowChain.GetData()<<endl;
}
template<typename TObjtChain> void OnMeetData(TObjtChain& AR_NowChain, int& ARI_CallNo)
{
cout<<"# CallNo="<<++ARI_CallNo<<" : Type No="<<AR_NowChain.GetNo()<<" : "<<AR_NowChain.GetData()<<endl;
}
};/*
class ZCTypeView*/
template<typename TType> class ZCShowType
{
public:
ZCShowType()
{
cout<<"# TType typename="<<typeid(TType).name()<<endl;
}
};
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)
{
ZCShowType<int> myShowType1;
ZCShowType<double> myShowType2;
ZCShowType<ZTypLLong> myShowType3;
//ZCShowType<"abc"> myShowType4; //error
const int CI_Var1=10;
const int CI_Var2=20;
const int CI_Var3=30;
ZtCTest<int>::ZCTypeVar<CI_Var1> myintvar1 ;
ZtCTest2<int, CI_Var2> myintvar2 ;
ZtCTest2<ZTypLLong, CI_Var3> myintvar3 ;
cout<<myintvar1.MO_TypeVar<<endl;
cout<<myintvar2.MO_TypeVar<<endl;
cout<<myintvar3.MO_TypeVar<<endl;
typedef ZtCMiniValChain
<
char , 'a' , ZtCMiniValChain<
char , 'b' , ZtCMiniValChain<
char , 'c' , ZtCMiniValChain<
//double, 10.2 , ZtCMiniValChain< // error in linux
//string, string("123") , ZtCMiniValChain< // error
long , 10 , ZtCMiniValChain<
int , 19 ,
ZCEmpty > > > >
> ZCMiniValChain; ZCTypeView VO_ZCTypeView; int VI_CallNo = 0;
cout<<"# ZCMiniValChain.size()="<<ZCMiniValChain::size()<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView);
cout<<"************************************"<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl;
ZCMiniValChain::ZtCIterChain<ZCTypeView&>::IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo = 0));
cout<<"************************************"<<endl;
typedef ZtCTypeChain
<
double , ZtCTypeChain<
int , ZtCTypeChain<
wchar_t, ZtCTypeChain<
char ,
ZCEmpty > > >
> ZCTypeChain;
cout<<"tmpl chain size = "<<ZCTypeChain::Size()<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&>(VO_ZCTypeView);
cout<<"@** call start : ZCTypeView(rhs) **********@"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterHead(VO_ZCTypeView);
cout<<"@******************************************@"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView>::IterTail(VO_ZCTypeView);
cout<<"@*** call close : ZCTypeView(rhs) *********@"<<endl;
ZftIterTypeChainHead<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZftIterTypeChainTail<ZCTypeChain, ZCTypeView&, int&>
( VO_ZCTypeView, (VI_CallNo = 0) );
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView&>::
IterHead(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
cout<<"************************************"<<endl;
ZCTypeChain::ZtCIterChain<ZCTypeView&>::
IterTail(VO_ZCTypeView, ZftMCP(VI_CallNo=0));
cout<<"************************************"<<endl;
typedef ZtCObjtChain
<
char , ZtCObjtChain<
string, ZtCObjtChain<
double, ZtCObjtChain<
int ,
ZCEmpty > > >
> ZCObjtChain; ZCObjtChain VO_ZCObjtChain;
VO_ZCObjtChain.GetChainNext().GetData()="abc";
*VO_ZCObjtChain ='Z' ;
*VO_ZCObjtChain() ="New Str";
*VO_ZCObjtChain()() =0.8 ;
*VO_ZCObjtChain()()() =1234 ;
VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl;
VO_ZCObjtChain.GetData<ZCObjtChain>()='X';
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext>()="New2 Str";
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext>()=0.9;
VO_ZCObjtChain.GetData<ZCObjtChain::TypeChainNext::TypeChainNext::TypeChainNext>()=4321;
VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl;
VO_ZCObjtChain="New3 Str";
VO_ZCObjtChain='B';
VO_ZCObjtChain.SetDataRecur<4>('D');
VO_ZCObjtChain.SetDataRecur<3>(string("New3 Str"));
VO_ZCObjtChain.SetDataRecur<2>(0.8);
VO_ZCObjtChain.SetDataRecur<1>(9999);
VO_ZCObjtChain.IterHead(ZftMCP(VO_ZCTypeView));
cout<<"************************************"<<endl;
typedef ZtCDataRing<std::string> ZCDataRing;
ZCDataRing VO_CDataRing = string("123");
VO_CDataRing.AddTail(string("ABC"));
VO_CDataRing.AddTail(string("XYZ"));
cout<<"# VO_CDataRing Size = "<<VO_CDataRing.size()<<endl;
cout<<"# VO_CDataRing Data = "<<VO_CDataRing <<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterThis = "<<endl;
VO_CDataRing.IterThis(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterHead = "<<endl;
VO_CDataRing.IterHead(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterTail = "<<endl;
VO_CDataRing.IterTail(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterThisRev = "<<endl;
VO_CDataRing.IterThisRev(&ZftPrint<string>); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterThisRev(HelpType char(',')) = "<<endl;
VO_CDataRing.IterThisRev(&ZftPrint<string, char>, char(',')); cout<<endl;
cout<<"************************************"<<endl;
cout<<"# VO_CDataRing IterTail(HelpType char(',')) = "<<endl;
VO_CDataRing.IterTail (&ZftPrint<string, char>, char(',')); cout<<endl;
cout<<"************************************"<<endl;
typedef ZtCDataRing<ZCTypeView> ZCViewRing;
ZCViewRing VO_ZCViewRing;
VO_ZCViewRing.AddTail();
VO_ZCViewRing.AddTail();
VO_ZCViewRing.DeleteAll();
cout<<"************************************"<<endl;
return 0;
}/*
static int Main(int AI_ArgCnt=0, char* APP_ArgVal[]=0)*/
}/*
namespace ZNsExam*/
}/*
namespace ZNsMain*/
int main(int AI_ArgCnt, char* APP_ArgVal[])
{
return ZNsMain::ZNsExam::Main(AI_ArgCnt, APP_ArgVal);
}/*
int main(int AI_ArgCnt, char* APP_ArgVal[])*/
/*////////////////////////////////////////////////////////////////////////////////////////
■ cygwin 컴파일
// g++ -mno-cygwin -o c++_test_006.exe c++_test_006.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300
// g++ -mno-cygwin -o c++_test_006_D.exe c++_test_006.cpp -I../../my_CPP/CPP_Main/ -I../../my_CPP/CPP_Std/ -D__CYGWIN32__ -D__VISUAL_CPP_VER__=200300 -D_DEBUG
■ mingw 컴파일
g++.exe -o c++_test_006_mw.exe c++_test_006.cpp -I../
g++.exe -o c++_test_006_mw_D.exe c++_test_006.cpp -I../ -D_DEBUG
./c++_test_006_mw.exe
./c++_test_006_mw_D.exe
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# date
Sun Aug 24 10:47:09 KST 2025
Administrator@q381-2673 UCRT64 /e/my_CPP/ZCpp/ZCppMainTest
# g++ --version
g++.exe (Rev2, Built by MSYS2 project) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ Linux 컴파일
g++ -std=c++98 -o c++_test_006.exe c++_test_006.cpp -I../
g++ -std=c++98 -o c++_test_006_D.exe c++_test_006.cpp -I../ -D_DEBUG
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ date
Sun Aug 24 00:05:51 DST 2025
sauron@q381-2673:/mnt/e/my_CPP/ZCpp/ZCppMainTest$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[sauron@q381-2657 ZCppMainTest]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[sauron@q381-2657 ZCppMainTest]$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
■ 실행
./c++_test_006.exe
./c++_test_006_D.exe
////////////////////////////////////////////////////////////////////////////////////////*/