mFrame
載入中...
搜尋中...
無符合項目
ufm::util::LineReader 類別 參考文件

行資料讀取器,提供從緩衝區解析字串、數值、布林等多種型態的資料。 更多...

#include <LineReader.h>

類別ufm::util::LineReader的繼承圖:
ufm::lang::Object ufm::lang::NonCopyable ufm::lang::Iterable< const char > ufm::lang::Interface ufm::util::Scanner

公開方法(Public Methods)

 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
 取得緩衝區可讀取的位元組數。
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Object
void * operator new (size_t n)
 使用運算子 new 分配記憶體
 
void * operator new (size_t n, void *p)
 在指定記憶體上調用運算子 new
 
virtual ufm::lang::ObjectgetObject (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::ThreadcurrentThread (void) const
 取得當前執行緒指標
 
virtual int hashcode (void) const
 返回對象的哈希碼值。支持這種方法是為了散列表,如HashMap提供的那樣。
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Interface
virtual ~Interface (void)=default
 虛擬析構函式
 
- 公開方法(Public Methods) 繼承自 ufm::lang::NonCopyable
 NonCopyable (void)=default
 建構一個新的 NonCopyable 物件
 
 NonCopyable (const NonCopyable &other)=delete
 禁止複製建構子
 
NonCopyableoperator= (const NonCopyable &other)=delete
 禁止複製賦值運算子
 

保護屬性

ufm::lang::Memory vBuffer
 
int vHead
 當前讀取位置索引
 
int vTail
 緩衝區尾部索引
 

詳細描述

行資料讀取器,提供從緩衝區解析字串、數值、布林等多種型態的資料。

LineReader 主要設計用於逐行解析資料流,支援多種型態的資料判斷與讀取, 包含字串、整數、浮點數、布林值等。可自訂緩衝區大小或使用外部緩衝區, 並提供多種跳躍與查找方法,方便處理各種格式的資料。

典型用途:

  • 逐行解析 UART、檔案、網路等資料流
  • 依據分隔符號或格式讀取資料
  • 快速判斷緩衝區是否有可讀資料

主要功能:

  • hasNextXxx:判斷是否有下一個型態的資料
  • nextXxx:讀取並移除下一個型態的資料
  • skipXxx:跳過指定型態的資料
  • 支援自訂緩衝區或指定大小
作者
ZxyKira

建構子與解構子說明文件

◆ LineReader() [1/3]

ufm::util::LineReader::LineReader ( ufm::lang::Memory buffer)
noexcept

使用現有緩衝區構造 LineReader 物件

參數
buffer指定要讀取的緩衝區

◆ LineReader() [2/3]

ufm::util::LineReader::LineReader ( int bufferSize = 128)
inlinenoexcept

使用指定緩衝區大小構造 LineReader 物件

參數
bufferSize緩衝區大小,預設 128 bytes

◆ LineReader() [3/3]

ufm::util::LineReader::LineReader ( LineReader && other)
inlinenoexcept

移動建構子

參數
other來源 LineReader 物件

函式成員說明文件

◆ avariable()

int ufm::util::LineReader::avariable ( void ) const
inline

取得緩衝區可讀取的位元組數。

傳回值
int 可讀取的位元組數

◆ begin()

virtual ufm::util::Iterator< const char > ufm::util::LineReader::begin ( void )
overridevirtual

取得目前插入位置。

此方法回傳下次插入資料的索引位置。

傳回值
int 目前插入位置

實作 ufm::lang::Iterable< const char >.

◆ elementAt()

virtual const char * ufm::util::LineReader::elementAt ( int index) const
overridevirtual

獲取集合中指定索引處的元素。

參數
index要獲取的元素索引
傳回值
E* 指向集合中指定索引處元素的指針

實作 ufm::lang::Iterable< const char >.

◆ end()

virtual ufm::util::Iterator< const char > ufm::util::LineReader::end ( void )
overridevirtual

取得 Scanner 結尾迭代器。

此方法回傳一個代表 Scanner 緩衝區結尾的迭代器, 可用於遍歷至資料結束。

傳回值
Scanner::Iterator 指向結尾的迭代器

實作 ufm::lang::Iterable< const char >.

◆ forEach()

virtual void ufm::util::LineReader::forEach ( ufm::func::Consumer< const char & > & action)
overridevirtual

遍歷集合中所有元素,對每個元素執行指定操作。 若所有元素處理完畢或操作中發生異常則停止。

當操作導致底層資料源發生變動時(未同步處理),其行為未定義。

參數
action對每個元素執行的操作

實作 ufm::lang::Iterable< const char >.

◆ hasNext()

bool ufm::util::LineReader::hasNext ( void ) const

判斷緩衝區是否有下一個字元。

此函式會檢查緩衝區是否有可讀的字元。

傳回值
bool true: 有下一個字元, false: 無

◆ hasNextBoolean()

bool ufm::util::LineReader::hasNextBoolean ( void )

判斷緩衝區是否有可解析的布林值(true/false)。

傳回值
bool true: 有布林值, false: 無

◆ hasNextChar()

bool ufm::util::LineReader::hasNextChar ( char ch)

判斷緩衝區是否有指定字元。

參數
ch指定要查找的字元
傳回值
bool true: 有指定字元, false: 無

◆ hasNextFloat()

bool ufm::util::LineReader::hasNextFloat ( int limit = 0)

判斷緩衝區是否有可解析的浮點數。

參數
limit查找最大長度上限,<=0 自動, >0 指定長度
傳回值
bool true: 有浮點數, false: 無

◆ hasNextInteger()

bool ufm::util::LineReader::hasNextInteger ( int limit = 0)

判斷緩衝區是否有可解析的整數。

參數
limit搜尋最大長度上限,<=0 自動, >0 指定長度
傳回值
bool true: 有整數, false: 無

◆ hasNextLine()

int ufm::util::LineReader::hasNextLine ( int limit = 0)

判斷緩衝區是否有完整的一行(遇到換行符)。

參數
limit查找最大長度上限,<=0 自動, >0 指定長度
傳回值
int >=0: 一行字串長度, -1: 不滿足一行

◆ hasNextToken()

bool ufm::util::LineReader::hasNextToken ( int limit = 0)
inline

判斷緩衝區是否有下一個 token。

此函式會搜尋下一個分割符號,最多搜尋 limit 個字元。 若未找到分割符號則回傳 false,否則回傳 true。

參數
limit最多搜尋的字元數,0 表示不限制。
傳回值
bool true: 有下一個 token, false: 無

◆ next()

int ufm::util::LineReader::next ( ufm::lang::Appendable & appendable,
int limit = 0 )

讀取下一個字串,並寫入指定 appendable。

參數
appendable寫入目標
limit查找最大長度上限,<=0 自動, >0 指定長度
傳回值
int >0: 寫入成功, <=0: 失敗(空間不足或緩衝區不滿足字串條件)

◆ nextBoolean()

bool ufm::util::LineReader::nextBoolean ( bool & result)

讀取下一個布林值(true/false),並移除。

參數
result讀取結果
傳回值
bool true: 取出成功, false: 失敗(緩衝區為空或格式錯誤)

◆ nextChar()

bool ufm::util::LineReader::nextChar ( char & result)

讀取下一個字元,並移除。

參數
result讀取結果
傳回值
bool true: 取出成功, false: 失敗(緩衝區為空)

◆ nextFloat()

bool ufm::util::LineReader::nextFloat ( float & result,
int limit = 0 )

讀取下一個浮點數,並移除。

參數
result讀取結果
limit查找最大長度上限,<=0 自動, >0 指定長度
傳回值
bool true: 取出成功, false: 失敗(緩衝區為空或格式錯誤)

◆ nextIndex()

virtual int ufm::util::LineReader::nextIndex ( int index) const
overridevirtual

返回當前索引的下一個有效索引。

參數
index當前索引
傳回值
int 下一個有效索引

如果當前索引已經是最後一個元素,則返回 -1。 如果當前索引無效(如 -1),則返回 0

實作 ufm::lang::Iterable< const char >.

◆ nextInteger()

bool ufm::util::LineReader::nextInteger ( int & result,
int limit = 0 )

讀取下一個整數,並移除。

參數
result讀取結果
limit查找最大長度上限,<=0 自動, >0 指定長度
傳回值
bool true: 取出成功, false: 失敗(緩衝區為空或格式錯誤)

◆ nextLine() [1/2]

int ufm::util::LineReader::nextLine ( ufm::lang::Appendable & appendable,
int limit = 0 )

讀取下一行字串,並寫入指定 appendable。

參數
appendable寫入目標
limit查找最大長度上限,<=0 自動, >0 指定長度
傳回值
int >0: 寫入字元數, -1: 緩衝區不滿足一行

◆ nextLine() [2/2]

int ufm::util::LineReader::nextLine ( void * pointer,
int length )
inline

讀取下一行字串,寫入指定記憶體區。

參數
pointer目標記憶體指標
length可寫入長度
傳回值
int >0: 寫入字元數, <=0: 失敗(緩衝區不滿足一行)

◆ nextTokenLength()

int ufm::util::LineReader::nextTokenLength ( int limit = 0)

取得下一個 token 的長度。

此函式會搜尋下一個分割符號,最多搜尋 limit 個字元。 若未找到分割符號則回傳 -1,否則回傳下個 token 的長度。

參數
limit最多搜尋的字元數,0 表示不限制。
傳回值
int 下個 token 的長度,若未找到分割符號則回傳 -1。

◆ skip()

int ufm::util::LineReader::skip ( char pattern,
int limit = 0 )

跳過直到遇到指定字元或達到限制。

參數
pattern指定字元,0x00 表示直接跳過 limit 數量
limit最大搜尋長度,>0 指定, <=0 不指定
傳回值
int >0: 跳過字元數, <=0: 未找到 pattern

◆ skipAll()

int ufm::util::LineReader::skipAll ( void )
inline

跳過指定長度的字元。

參數
length跳過的字元數,0 表示跳過所有可讀字元
傳回值
int >=0: 跳過字元數, <0: 不滿足條件

◆ skipNextLine()

int ufm::util::LineReader::skipNextLine ( int limit = 0)

跳過當前行直到下一行(遇到換行符)。

參數
limit最大搜尋長度,>0 指定, <=0 不指定
傳回值
int >0: 跳過字元數, -1: 不滿足一行

◆ skipNextToken()

int ufm::util::LineReader::skipNextToken ( int limit = 0)

跳過當前字串直到分隔符。

參數
limit最大搜尋長度,>0 指定, <=0 不指定
傳回值
int >=0: 跳過字元數, <0: 不滿足字串條件

此類別(class) 文件是由下列檔案中產生: