![]() |
mFrame
|
高階緩衝區資料解析器,支援多型態資料讀取、標記、插入與迭代。 更多...
#include <Scanner.h>
公開方法(Public Methods) | |
Scanner (ufm::lang::Memory buffer) noexcept | |
使用現有緩衝區構造 Scanner 物件。 | |
Scanner (int bufferSize=128) | |
使用指定緩衝區大小構造 Scanner 物件。 | |
Scanner (Scanner &&other) noexcept | |
移動建構子。 | |
virtual | ~Scanner (void) override |
解構子,釋放資源。 | |
virtual int | remaining (void) const override |
取得緩衝區剩餘空閒字節數。 | |
virtual int | putByte (const char data) override |
輸入單一字節至緩衝區 | |
virtual int | put (ufm::lang::Readable &readable) override |
從 Readable 物件附加資料至緩衝區 | |
virtual int | put (const void *pointer, int length) override |
從記憶體指標附加資料至緩衝區 | |
virtual void | mark (void) override |
設定流標記位置。 | |
virtual void | reset (void) override |
重置流位置至上次標記點。 | |
void | compact (void) |
將未讀取資料移至緩衝區開頭,釋放已消耗空間。 | |
void | clear (void) |
清除 Scanner 緩衝區並重置狀態。 | |
int | setCursor (int insert) |
設定下次寫入資料的插入位置。 | |
int | getCursor (void) |
取得目前的插入位置。 | |
bool | cursorRight (void) |
將游標向右移動一個位置。 | |
bool | cursorLeft (void) |
將游標向左移動一個位置。 | |
bool | backspace (void) |
回退指定字元數。 | |
bool | deleteChar (void) |
刪除當前游標位置的字元。 | |
![]() | |
LineReader (ufm::lang::Memory buffer) noexcept | |
使用現有緩衝區構造 LineReader 物件 | |
LineReader (int bufferSize=128) noexcept | |
使用指定緩衝區大小構造 LineReader 物件 | |
LineReader (LineReader &&other) noexcept | |
移動建構子 | |
virtual | ~LineReader (void) override |
解構子,釋放資源 | |
virtual void | forEach (ufm::func::Consumer< const char & > &action) override |
遍歷集合中所有元素,對每個元素執行指定操作。 若所有元素處理完畢或操作中發生異常則停止。 | |
virtual const char * | elementAt (int index) const override |
獲取集合中指定索引處的元素。 | |
virtual int | nextIndex (int index) const override |
返回當前索引的下一個有效索引。 | |
virtual ufm::util::Iterator< const char > | begin (void) override |
取得目前插入位置。 | |
virtual ufm::util::Iterator< const char > | end (void) override |
取得 Scanner 結尾迭代器。 | |
int | nextTokenLength (int limit=0) |
取得下一個 token 的長度。 | |
bool | hasNextToken (int limit=0) |
判斷緩衝區是否有下一個 token。 | |
bool | hasNext (void) const |
判斷緩衝區是否有下一個字元。 | |
bool | hasNextChar (char ch) |
判斷緩衝區是否有指定字元。 | |
bool | hasNextBoolean (void) |
判斷緩衝區是否有可解析的布林值(true/false)。 | |
bool | hasNextInteger (int limit=0) |
判斷緩衝區是否有可解析的整數。 | |
bool | hasNextFloat (int limit=0) |
判斷緩衝區是否有可解析的浮點數。 | |
int | hasNextLine (int limit=0) |
判斷緩衝區是否有完整的一行(遇到換行符)。 | |
bool | nextBoolean (bool &result) |
讀取下一個布林值(true/false),並移除。 | |
int | nextLine (ufm::lang::Appendable &appendable, int limit=0) |
讀取下一行字串,並寫入指定 appendable。 | |
int | nextLine (void *pointer, int length) |
讀取下一行字串,寫入指定記憶體區。 | |
bool | nextInteger (int &result, int limit=0) |
讀取下一個整數,並移除。 | |
bool | nextFloat (float &result, int limit=0) |
讀取下一個浮點數,並移除。 | |
bool | nextChar (char &result) |
讀取下一個字元,並移除。 | |
int | next (ufm::lang::Appendable &appendable, int limit=0) |
讀取下一個字串,並寫入指定 appendable。 | |
int | skip (char pattern, int limit=0) |
跳過直到遇到指定字元或達到限制。 | |
int | skipAll (void) |
跳過指定長度的字元。 | |
int | skipNextToken (int limit=0) |
跳過當前字串直到分隔符。 | |
int | skipNextLine (int limit=0) |
跳過當前行直到下一行(遇到換行符)。 | |
int | avariable (void) const |
取得緩衝區可讀取的位元組數。 | |
![]() | |
void * | operator new (size_t n) |
使用運算子 new 分配記憶體 | |
void * | operator new (size_t n, void *p) |
在指定記憶體上調用運算子 new | |
virtual ufm::lang::Object & | getObject (void) override |
取得對應的 Object 物件 | |
void | delay (int milliseconds) const |
延遲指定的毫秒數進行執行緒等待 | |
bool | equals (Object *object) const |
判斷與另一物件是否為相同參照(指標型態比較) | |
bool | equals (Object &object) const |
判斷與另一物件是否為相同參照(參照型態比較) | |
void | wait (void) const |
使當前線程等待直到被通知 | |
bool | wait (int timeout) const |
等待通知或超時 | |
bool | yield (void) const |
讓執行緒讓渡控制權給同優先權的下一個執行緒 | |
int | lock (void) const |
核心鎖定,鎖定期間禁止線程切換 | |
int | unlock (void) const |
核心解鎖 | |
ufm::sys::Thread * | currentThread (void) const |
取得當前執行緒指標 | |
virtual int | hashcode (void) const |
返回對象的哈希碼值。支持這種方法是為了散列表,如HashMap提供的那樣。 | |
![]() | |
virtual | ~Interface (void)=default |
虛擬析構函式 | |
![]() | |
NonCopyable (void)=default | |
建構一個新的 NonCopyable 物件 | |
NonCopyable (const NonCopyable &other)=delete | |
禁止複製建構子 | |
NonCopyable & | operator= (const NonCopyable &other)=delete |
禁止複製賦值運算子 | |
![]() | |
int | put (ufm::lang::Readable &&readable) |
從右值 Readable 附加資料 | |
bool | isFull (void) const |
檢查緩衝區是否已滿 | |
保護屬性 | |
int | vInsert |
下次插入資料的緩衝區索引位置 | |
int | vMark |
標記位置,用於重置操作 | |
![]() | |
ufm::lang::Memory | vBuffer |
int | vHead |
當前讀取位置索引 | |
int | vTail |
緩衝區尾部索引 | |
高階緩衝區資料解析器,支援多型態資料讀取、標記、插入與迭代。
Scanner 提供從緩衝區讀取、解析、插入、標記、回溯等多種功能, 可處理字元、字串、數值、布林等型態,並支援資料流的標記與重置。 其設計適合用於 UART、檔案、網路等資料流的高效解析, 並可搭配 Iterator 進行區段遍歷。
主要特色:
典型用途:
|
noexcept |
|
inline |
|
inlinenoexcept |
|
overridevirtual |
解構子,釋放資源。
清理 Scanner 物件並釋放相關資源, 確保記憶體緩衝區得到適當的清理。
bool ufm::util::Scanner::backspace | ( | void | ) |
回退指定字元數。
此方法會將讀取指標(head)往回移動指定字元數, 等同於"未讀取"這些字元,使它們可以再次被讀取。 常用於解析過程中需要退回某些已讀取字元的場景。
count | 要回退的字元數,必須為正數且不超過已讀取的字元數 |
void ufm::util::Scanner::clear | ( | void | ) |
void ufm::util::Scanner::compact | ( | void | ) |
將未讀取資料移至緩衝區開頭,釋放已消耗空間。
此方法會將尚未讀取的有效資料搬移到緩衝區最前面(索引0), 以回收已讀取或消耗的空間,並更新指標(如 head、tail)。
範例: [x x x a b c - - -] (head=3, tail=6) ↓ compact() [a b c - - - - - -] (head=0, tail=3)
通常在部分資料已消耗後呼叫,以最大化可用空間。
|
inline |
將游標向左移動一個位置。
此方法會嘗試將插入位置向左移動一個字元位置, 如果移動成功則返回 true,否則返回 false。 通常用於編輯器或文字處理功能中的游標控制。
|
inline |
將游標向右移動一個位置。
此方法會嘗試將插入位置向右移動一個字元位置, 如果移動成功則返回 true,否則返回 false。 通常用於編輯器或文字處理功能中的游標控制。
bool ufm::util::Scanner::deleteChar | ( | void | ) |
刪除當前游標位置的字元。
此方法會刪除游標所在位置的字元,並將後續字元向左移動, 以填補被刪除的位置。若游標已在緩衝區末尾則無操作。
|
inline |
取得目前的插入位置。
此方法返回下次寫入資料的索引位置, 可用於確認目前緩衝區的寫入狀態。
|
overridevirtual |
設定流標記位置。
此方法用於設定當前讀取位置的標記點,之後可以使用 reset() 方法 重置到此標記位置。標記功能對於需要回溯讀取的解析場景非常有用, 例如在嘗試解析失敗後回到原始位置重新嘗試。
|
overridevirtual |
從記憶體指標附加資料至緩衝區
根據指定長度,將 pointer 指向的資料寫入緩衝區
pointer | 資料來源位址 |
length | 要寫入的字節數 |
|
overridevirtual |
從 Readable 物件附加資料至緩衝區
迴圈從 readable 讀取並寫入緩衝區,直到耗盡或空間不足
readable | 可讀資料來源 |
|
overridevirtual |
|
overridevirtual |
|
overridevirtual |
int ufm::util::Scanner::setCursor | ( | int | insert | ) |
設定下次寫入資料的插入位置。
此方法僅設定緩衝區下次插入資料的索引位置, 不會實際寫入資料,僅做準備。
insert | 下次插入資料的索引位置 |