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

基於陣列的集合容器實作 更多...

#include <PArraySet.h>

類別ufm::util::PArraySet的繼承圖:
ufm::lang::Object ufm::util::Set< E > ufm::lang::Interface ufm::util::Collection< void * > ufm::lang::Iterable< void * > ufm::util::Container

公開方法(Public Methods)

 PArraySet (ufm::lang::Memory memory) noexcept
 使用指定記憶體建構 PArraySet 物件
 
 PArraySet (int length)
 使用指定長度建構 PArraySet 物件
 
 PArraySet (PArraySet &other) noexcept=default
 複製建構子
 
 PArraySet (PArraySet &&other) noexcept=default
 移動建構子
 
virtual ~PArraySet (void) override
 析構函數
 
template<typename E >
 operator const Set< E > & (void) const
 轉換操作符,將 PArraySet 轉換為指定類型的常量引用陣列
 
template<typename E >
 operator Set< E > & (void)
 轉換操作符,將 PArraySet 轉換為指定類型的陣列引用
 
virtual bool add (void *v) override
 將元素添加到集合中
 
virtual bool remove (void *v) override
 從集合中移除指定元素
 
virtual bool replace (void *oldValue, void *newValue) override
 替換集合中的指定元素
 
virtual bool contains (void *v) const override
 檢查集合是否包含指定元素
 
virtual void clear (void) override
 清除集合中的所有元素
 
virtual bool isEmpty (void) const override
 檢查集合是否為空
 
virtual int size (void) const override
 返回集合中的元素數量
 
virtual void forEach (ufm::func::Consumer< void *& > &action) override
 遍歷集合中的所有元素,對每個元素執行指定操作
 
virtual void ** elementAt (int index) const override
 獲取集合中指定索引處的元素指標
 
virtual int nextIndex (int index) const override
 返回當前索引的下一個有效索引
 
virtual ufm::util::Iterator< void * > begin (void) override
 返回指向集合開始位置的迭代器
 
virtual ufm::util::Iterator< void * > end (void) override
 返回指向集合結束位置的迭代器
 
- 公開方法(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::util::Set< E >
virtual bool add (E *v) override
 將指定元素添加到此集合中(可選操作)。
 
virtual bool remove (E *v) override
 從此集合中刪除指定元素(可選操作)。
 
virtual bool replace (E *oldValue, E *newValue) override
 替換此集合中的指定元素。
 
virtual bool contains (E *v) const override
 檢查此集合是否包含指定元素。
 

公開屬性

int const vLength
 陣列長度
 

詳細描述

基於陣列的集合容器實作

PArraySet 是一個基於固定大小陣列的集合實作,使用 ufm::lang::Memory 來管理記憶體, 實作了 Set 介面提供添加、移除、查找等集合操作,確保集合中不會有重複元素。

適用於嵌入式環境,使用預先分配的記憶體避免動態分配,提供可預測的記憶體使用模式, 集合的最大容量在建構時確定且不可更改。

特色功能:

  • 固定大小的陣列容器
  • 不允許重複元素
  • 使用預先分配的記憶體
  • 提供迭代器支援
  • 支援模板類型轉換
// 在 I/O 操作中管理連接 ID 的範例
#include "ufm/util/PArraySet.h"
#include "ufm/io/SimpleOutputStream.h"
// 管理活躍的輸出流連接
ufm::util::PArraySet activeStreams(10); // 最多 10 個活躍連接
// 添加新的輸出流連接
SimpleOutputStream* stream1 = new SimpleOutputStream();
SimpleOutputStream* stream2 = new SimpleOutputStream();
if (activeStreams.add(stream1)) {
System::out().println("成功添加輸出流連接 1");
}
if (activeStreams.add(stream2)) {
System::out().println("成功添加輸出流連接 2");
}
// 檢查連接是否存在
if (activeStreams.contains(stream1)) {
System::out().println("連接 1 仍然活躍");
// 可以安全地使用這個流進行寫入
PFuture future;
ByteArrayReadable data("status update");
stream1->write(data, future);
}
// 移除已完成的連接
activeStreams.remove(stream1);
System::out().print("剩餘活躍連接數: ").println(activeStreams.size());
基於陣列的集合容器實作
Definition PArraySet.h:155
1.0.0
// 替換元素
char newChar = 'Z';
bool replaced = operationSet.replace(&chars[1], &newChar); // 將 'B' 替換為 'Z'
if (replaced) {
ufm::lang::System::out().println("成功替換元素");
}
// 移除元素
bool removed = operationSet.remove(&chars[0]); // 移除 'A'
if (removed) {
ufm::lang::System::out().print("移除後大小: ");
ufm::lang::System::out().println(operationSet.size()); // 3
}
// 檢查是否為空
if (!operationSet.isEmpty()) {
ufm::lang::System::out().println("集合不為空");
}
// 清空集合
operationSet.clear();
ufm::lang::System::out().print("清空後是否為空: ");
ufm::lang::System::out().println(operationSet.isEmpty() ? "是" : "否");
PrintStream & println(void)
印出換行字元。
PrintStream & print(bool b, bool newLine=false)
印出布林值,可選擇是否換行。
static ufm::io::PrintStream & out(void)
獲取系統輸出緩衝區
Definition System.h:127
// 迭代器使用範例
ufm::util::PArraySet iteratorSet(6);
// 添加一些元素
int numbers[] = {10, 20, 30};
for (int i = 0; i < 3; ++i) {
iteratorSet.add(&numbers[i]);
}
// 使用迭代器遍歷
ufm::lang::System::out().println("使用迭代器遍歷:");
auto it = iteratorSet.begin();
auto endIt = iteratorSet.end();
while (it != endIt) {
void* element = it.next();
if (element != nullptr) {
int* numPtr = static_cast<int*>(element);
}
}
// 使用索引訪問
ufm::lang::System::out().println("使用索引訪問:");
for (int i = 0; i < iteratorSet.size(); ++i) {
void** elementPtr = iteratorSet.elementAt(i);
if (elementPtr != nullptr && *elementPtr != nullptr) {
int* numPtr = static_cast<int*>(*elementPtr);
}
}
此集合不會自動管理所指向物件的生命週期,僅儲存指標
集合大小固定,超出容量的添加操作會失敗
在多執行緒環境中使用時需要外部同步
1.0.0

建構子與解構子說明文件

◆ PArraySet() [1/4]

ufm::util::PArraySet::PArraySet ( ufm::lang::Memory memory)
noexcept

使用指定記憶體建構 PArraySet 物件

使用提供的記憶體物件建立一個 PArraySet,記憶體大小決定了集合的最大容量。 容量計算為記憶體大小除以指標大小。

參數
memory用於儲存集合元素的記憶體物件
記憶體大小應該是 sizeof(void*) 的倍數
記憶體物件的生命週期應該超過 PArraySet 物件
// 建立一個可容納 10 個元素的集合
ufm::lang::Memory memory(10 * sizeof(void*));
動態記憶體管理類別
Definition Memory.h:38

◆ PArraySet() [2/4]

ufm::util::PArraySet::PArraySet ( int length)
inline

使用指定長度建構 PArraySet 物件

建立一個可容納指定數量元素的 PArraySet,自動分配所需的記憶體。 這是最常用的建構方式,提供了簡潔的介面。

參數
length集合的最大容量(元素個數)
length 必須大於 0
// 建立一個可容納 5 個元素的集合

◆ PArraySet() [3/4]

ufm::util::PArraySet::PArraySet ( PArraySet & other)
defaultnoexcept

複製建構子

從另一個 PArraySet 建立新的物件。使用預設的複製行為。

參數
other要複製的 PArraySet 物件
複製後的物件會共享相同的記憶體,需注意生命週期管理

◆ PArraySet() [4/4]

ufm::util::PArraySet::PArraySet ( PArraySet && other)
defaultnoexcept

移動建構子

從另一個 PArraySet 移動建立新的物件。使用預設的移動行為。

參數
other要移動的 PArraySet 物件
移動後原物件不應再被使用

◆ ~PArraySet()

virtual ufm::util::PArraySet::~PArraySet ( void )
overridevirtual

析構函數

銷毀 PArraySet 物件並釋放相關資源。

不會釋放集合中指標所指向的物件,僅清理集合本身

函式成員說明文件

◆ add()

virtual bool ufm::util::PArraySet::add ( void * v)
overridevirtual

將元素添加到集合中

如果集合中尚未包含指定的元素,則將其添加到集合中。 由於這是一個集合(Set),不允許重複元素。

參數
v要添加的元素指標
傳回值
true 如果元素成功添加(元素不存在且有足夠空間)
false 如果元素已存在、集合已滿或添加失敗
此方法不會檢查指標指向的物件內容,僅比較指標值
添加 nullptr 是允許的,但只能添加一次
int value = 42;
bool success = set.add(&value); // 添加成功
bool duplicate = set.add(&value); // 重複添加,返回 false

◆ begin()

virtual ufm::util::Iterator< void * > ufm::util::PArraySet::begin ( void )
overridevirtual

返回指向集合開始位置的迭代器

建立並返回一個指向集合第一個元素的迭代器。 迭代器可用於遍歷集合中的所有元素。

傳回值
ufm::util::Iterator<void*> 指向集合開始的迭代器
// ... 添加元素 ...
auto it = set.begin();
while (it.hasNext()) {
void* element = it.next();
// 處理元素
}

實作 ufm::lang::Iterable< void * >.

◆ clear()

virtual void ufm::util::PArraySet::clear ( void )
overridevirtual

清除集合中的所有元素

此方法將集合中的所有元素設置為 nullptr,並重置大小。

實作 ufm::util::Container.

◆ contains()

virtual bool ufm::util::PArraySet::contains ( void * v) const
overridevirtual

檢查集合是否包含指定元素

檢查集合中是否存在與指定指標相等的元素。

參數
v要檢查的元素指標
傳回值
true 如果集合包含該元素
false 如果集合不包含該元素
int value = 42;
set.add(&value);
bool exists = set.contains(&value); // 返回 true

◆ elementAt()

virtual void ** ufm::util::PArraySet::elementAt ( int index) const
overridevirtual

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

返回指向集合內部陣列中指定索引位置元素的指標。 這允許直接訪問和修改集合中的元素。

參數
index要獲取的元素索引(0 到 size()-1)
傳回值
void** 指向指定索引處元素的指標的指標,如果索引無效則為 nullptr
返回的是指向指標的指標(void**),可用於讀取或修改元素
索引範圍檢查由實作決定
int value = 42;
set.add(&value);
void** elementPtr = set.elementAt(0);
if (elementPtr != nullptr) {
int* intPtr = static_cast<int*>(*elementPtr);
ufm::lang::System::out().println(*intPtr); // 輸出 42
}

實作 ufm::lang::Iterable< void * >.

◆ end()

virtual ufm::util::Iterator< void * > ufm::util::PArraySet::end ( void )
overridevirtual

返回指向集合結束位置的迭代器

建立並返回一個指向集合末尾的迭代器。 此迭代器用於標識遍歷的結束點。

傳回值
ufm::util::Iterator<void*> 指向集合結束的迭代器
// ... 添加元素 ...
auto it = set.begin();
auto endIt = set.end();
while (it != endIt) {
void* element = it.next();
// 處理元素
}

實作 ufm::lang::Iterable< void * >.

◆ forEach()

virtual void ufm::util::PArraySet::forEach ( ufm::func::Consumer< void *& > & action)
overridevirtual

遍歷集合中的所有元素,對每個元素執行指定操作

對集合中的每個非空元素調用提供的 Consumer 函數。 遍歷順序與元素在內部陣列中的順序相同。

參數
action對每個元素執行的操作,必須實作 Consumer<void*&> 介面
在遍歷過程中修改集合可能導致未定義行為
nullptr 元素會被跳過,不會調用 action
class PrintConsumer : public ufm::func::Consumer<void*&> {
public:
void accept(void*& element) override {
int* intPtr = static_cast<int*>(element);
}
};
// ... 添加元素 ...
PrintConsumer consumer;
set.forEach(consumer);
[Interface] 消費者函數式介面模板
Definition Consumer.h:43

實作 ufm::lang::Iterable< void * >.

◆ isEmpty()

virtual bool ufm::util::PArraySet::isEmpty ( void ) const
overridevirtual

檢查集合是否為空

傳回值
true 如果集合中沒有元素
false 如果集合中有元素

實作 ufm::util::Container.

◆ nextIndex()

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

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

從給定索引開始尋找下一個包含非空元素的索引位置。 用於實作迭代器模式和跳過空槽。

參數
index當前索引
傳回值
int 下一個有效索引,如果沒有更多元素則返回 -1
  • 如果當前索引為 -1(初始狀態),返回第一個有效索引
  • 如果當前索引已經是最後一個元素,返回 -1
  • 跳過所有 nullptr 元素
// ... 添加一些元素 ...
int currentIndex = -1;
while ((currentIndex = set.nextIndex(currentIndex)) != -1) {
void** elementPtr = set.elementAt(currentIndex);
// 處理元素
}

實作 ufm::lang::Iterable< void * >.

◆ operator const Set< E > &()

template<typename E >
ufm::util::PArraySet::operator const Set< E > & ( void ) const
inline

轉換操作符,將 PArraySet 轉換為指定類型的常量引用陣列

樣版參數
E目標陣列元素類型
傳回值
轉換後的常量陣列引用

◆ operator Set< E > &()

template<typename E >
ufm::util::PArraySet::operator Set< E > & ( void )
inline

轉換操作符,將 PArraySet 轉換為指定類型的陣列引用

樣版參數
E目標陣列元素類型
傳回值
轉換後的陣列引用

◆ remove()

virtual bool ufm::util::PArraySet::remove ( void * v)
overridevirtual

從集合中移除指定元素

如果集合包含指定的元素,則將其從集合中移除。 移除操作會保持其他元素的相對順序。

參數
v要移除的元素指標
傳回值
true 如果元素存在並成功移除
false 如果元素不存在或移除失敗
int value = 42;
set.add(&value);
bool removed = set.remove(&value); // 移除成功,返回 true
bool notFound = set.remove(&value); // 元素不存在,返回 false

◆ replace()

virtual bool ufm::util::PArraySet::replace ( void * oldValue,
void * newValue )
overridevirtual

替換集合中的指定元素

如果集合包含指定的舊元素,則將其替換為新元素。 如果新元素已經存在於集合中(除了要替換的位置),操作會失敗。

參數
oldValue要被替換的舊元素指標
newValue用於替換的新元素指標
傳回值
true 如果替換成功
false 如果舊元素不存在或新元素已存在
int oldVal = 10, newVal = 20;
set.add(&oldVal);
bool replaced = set.replace(&oldVal, &newVal); // 替換成功

◆ size()

virtual int ufm::util::PArraySet::size ( void ) const
overridevirtual

返回集合中的元素數量

傳回值
int 集合中的元素數量 如果集合包含超過 Integer.MAX_VALUE 個元素,則返回 Integer.MAX_VALUE。

實作 ufm::util::Container.


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