2015年10月28日 星期三

Smart_Ptr 的注意事項

Smart_Ptr 對包裹的對象採取隱性轉型的方式,使用有它的方便性,但也有它的危險性,用一個例子來說:

class A:public cxxlObject;
void f(const Smart_Ptr<A> &A_Arg);

A *pA = new A;
f(pA);

Smart_Ptr<A> 的建構子會隱性的接收 pA,而自動產生 Smart_Ptr<A> 實例傳給 f(),若 f() 的實作並未使用 Smart_Ptr<A> 保存,由 f() 返回時就會把 pA 刪掉。解決的辦法就是儘早先將 pA 先放入 Smart_Ptr:

多國語言插件

適用於 CxxlMan2 程式庫的插件,可輕鬆為你開發的程式擁有多國語言的能力。
內含使用說明及範例,下載點:

cxxlMutiLang_Src_20221014.zip (支援 CMRegSelf)



2015年10月10日 星期六

CxxlMan 程式庫 停止維護

因已發佈 CxxlMan2 程式庫,即日起不再對 CxxlMan 程式庫 進行更新和修改


CxxlMan2 程式庫 開放下載

這函數庫能讓 C++ 擁有垃圾回收的能力,並提供相關的配套支援,以 C++11 的標準編寫,可以很容易跨平台。

以源碼的形式發佈,允許任何方式的應用,包括用於開發商用軟體,但不淮增、刪、改,以維持標準的一致性,有發現錯誤或建議,請留言,謝謝!!

下載點:
CxxlMan2_Src_r230.zip
  1. 修改過 UTF8_String 整個程式庫可用於 c++17 和 c++20 標準。內部仍採用 std::string,使用 STL 不會有額外開銷
  2. 通過 ubuntu-22.04.1-desktop-amd64 測試
CxxlMan2_Src_r225.zip
  1. 在 Win10 下可支援 c++17 標準,須在 CMake 的 CMAKE_CXX_FLAGS 設置 c++17 標準,其他作業系統未測試。
  2. 在 Win10 可適用於 x86 / x64,其他平台未測試
  3. 更改 cxxlAVL_Tree 的 Delete***() 成員函數回傳值,改為被刪除的子節點,不用取得和刪除分兩次執行
  4. 修正 Semaphore 一個 Bug
CxxlMan2_Src_r222.zip
  1. 更改 Regex_MultipleReplace 的 fmt 參數形態
  2. 更改 UniqueTxtCompositeImport() 和 NonUniqueTxtCompositeImport() 的 defName 參數形態
  3. UTF8STRING.HPP fix bug
  4. SLIST.HPP fix bug
  5. cxxlAVL_Tree 新增一個 isExist() 成員函數
  6. 修正 UTF8_String 對右值 std::string 的處理,效能得到提升
CxxlMan2_Src_r214.zip
  1.  cxxlAVL_Tree 的建構函數增加 OnDelObj_arg 參數
  2.  提供 cxxlCM_GetElementP()
  3. 修訂 DELEGATE.HPP 及 DELEGATE2.HPP 一個 BUG
  4. 修正 SList
  5. 經 mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev1 編譯器除錯
CxxlMan2_Src_r199.zip
  1. 為 UTF8_String 提供 Compare() 比較函數,UTF8_String 也可以處理 NULL 資料源的包裹
  2. 更改 cxxlList 的 Sort() 及 For_each() 的參數用法
  3. cxxlComposite 的 Export() 參數改用 std::function
  4. 將處理比較的 virtual cxxlAVL_Tree::Comp() 改成採用 std::function 的方式,並提供一個 GetComp() 成員函數
  5. cxxlAVL_Tree::cxxlList_Create() 增加一個 std::function 的參數作為過瀘用,原先的 cxxlList_CreateFilter() 虛擬函數已移除
  6. 將 Delegate<T> 和 Delegate2<T> 的 struct DelegateErr_NoBind 移出,放在 DELEGATE.HPP
  7. 因使用方法做了一些修改,和舊版有些不相容
  8. 增加一個 FixSlash() 函數
CxxlMan2_Src_r179.zip
  1. 重新調整永續儲存處理程式碼架構,配合 介面繼承+組合代替繼承,ref() 可不必在呼叫父類別的 ref()
  2. UTF8_String 建構函數增加  const char 單一字元參數
  3. 永續儲存修正對 UTF8_String 處理的 bug
CxxlMan2_Src_r174.zip
增加一個 BM_SEARCH.HPP
CxxlMan2_Src_r168.zip 優化 THREADMGR.HPP
修改 Delegate 和 Delegate2 的 IBind::Function() 宣告的 bug
ThreadLimit 和 ThreadPool 增加 Clear() 清除尚未處理的任務
修改一些小 bug 能通過 MinGW 編譯
CxxlMan2_Src_r162.zip
  1. 修改 Semaphore 建構函數多了一個 ThreadMaxNum 參數,並內定參數值為 {0,0}
  2. 增加 THREADMGR.HPP
  3. 修改 cxxlAVL_Tree<>::Comp() 不再為純虛擬函數,所以可不繼承直接使用
  4. 修改多處的 bug
CxxlMan2_Src_r160.zip 修改核心中的 _YanLuoWang 建構方式為 &_YanLuoWang = *new YanLuoWang,原本為變數形態,應用程式結束時,有時會出現 mutex 還在 busy 的例外錯誤,更改後 _YanLuoWang 沒有解構的機會
CxxlMan2_Src_r159.zip 增加一個 EventSender 元件,以及修改一些 bug
CxxlMan2_Src_r157.zip
  1. 為 cxxlAVL_Tree 增加 GetKeyList()
  2. 把 cxxlList_t::PT_PS_TYPE 獨立出來,比較方便使用
  3. 為 Semaphore 增加一個多載函數 Semaphore<F>::Wait(F WaitEvent),進入等待,會先呼叫 WaitEvent()
  4. 為垃圾處理核心增加一個函數 Wait_cxxlObjectDeathQueue_Emptied()
CxxlMan2_Src_r152.zip
Carry_TLC 及 Carry_MDC 的 GroupReplace,修改其 Key 為 GroupReplace_Key
CxxlMan2_Src_r151.zip
  1. Carry_TLC 及 Carry_MDC 增加 GroupReplace 選項
  2. ElementRegDelegate 增加 Import()
  3. SaveFilter 及 LoadFilter 增加 Stream()
CxxlMan2_Src_r141.zip 主要在修改 CMakeLists.txt、版本選擇... 以適應 linux
CxxlMan2_Src_r137.zip 增加 cxxlCM_GetFullDllName() CM 的轉助函數、ICM::Get_ElementRegDelegate(),修改一些 bug
CxxlMan2_Src_r129.zip 修改以下這些智能指標的組成方式,提升執行效率:
Smart_Ptr、UTF8_String、PSmart_Ptr、PSmart_Set、P2Smart_Ptr 、P2Smart_Set
CxxlMan2_Src_r127.zip

參考手冊下載:
CxxlMan2_Help_20220716.zip

另外在 Linux 須用到 uuid 函數庫,若不存在須安裝套件,比如在 Ubuntu 用以下命令安裝:
sudo apt-get install uuid-dev






2015年5月28日 星期四

如何取得最新版的 MinGW

首先要取得 MSYS2,再更新軟體倉庫,請參考下面兩個連結
http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
http://msys2.github.io/

為了預防以後失連,把重點摘錄於下:

2015年3月28日 星期六

排列組合產生器

整理來自 http://www.programmer-club.com.tw/ShowSameTitleN/c/46015.html 的討論,討論結果大致可分為遞迴法、計算法及量子演算法三種。但遞迴法有 stack overflow 的隱憂,所以改寫成模擬遞迴法;而計算法則因須要使用大數才能完整,所以加入了 goost 的 multiprecision;量子演算法要有量子電腦才能真正發揮實力,這裡使用 thread 去模擬,過這些做法象徵意義大於實質意義。

2015年2月24日 星期二

杜林機-STATE 設計模式

今天早上看了電影 模仿遊戲(The Imitation Game),其中提到「 圖靈機」讓我想起以前有寫過這樣的程式碼,原來發明人是二戰悲劇英雄,以下是我先前寫的