![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |


スタック ( SFXStack クラスのインスタンス ) の要素は 4 バイト以下のデータでなければいけません。 5 バイト以上の UInt64 型データ や Double 型データ、クラスのインスタンスをスタックの要素として処理するにはポインターを使います。
// 5 バイト以上のデータやクラスのインスタンスは // スタック ( SFXStack クラスのインスタンス ) の要素にできない // SFXStack<SInt64> st64; NG // SFXStack<SFXAnsiString> ststr; NG // しかし、5 バイト以上のデータやクラスのインスタンスへのポインターはスタックの要素にできる SFXStack<SInt64Ptr> st64; // OK SFXStack<SFXAnsiStringPtr> ststr;// OK
| コンストラクタ/デストラクタ |
|---|
|
SFXStack( Void ) SFXStack( UInt16 threshold , UInt16 cluster ) SFXStack クラスのコンストラクタです。
|
| パブリック関数 | |
|---|---|
| SFCError |
Append(
SFXStack< V > const & collection
) Append( V value ) 要素を追加します。
|
| Void |
Clear( Void ) スタックを空にします。
|
| Bool |
Contains(
V value
) 指定した値と同じ要素が含まれるか判定します。
|
| static SFXStack< V > const & |
EmptyInstance( Void ) 空のスタックを取得します。
|
| Bool |
Equals(
SFXStack< V > const & collection
) スタックが等しいか比較します。
|
| SInt32 |
FirstIndexOf(
V value
, SInt32 index = SINT32_MINIMUM
) 先頭から検索して、指定した値と一致する最初の要素のインデックスを取得します。
|
| V |
Get(
SInt32 index
) 要素を取得します。
|
| UInt16 |
GetCluster( Void ) 内部バッファ メモリのクラスタ サイズを取得します。
|
| Enumerator |
GetEnumerator(
SInt32 index
) 列挙子を取得します。
|
| V |
GetFirst( Void ) 最初の要素を取得します。
|
| Enumerator |
GetFirstEnumerator( Void ) 最初の要素に対応する列挙子を取得します。
|
| Iterator |
GetFirstIterator( Void ) 最初の要素に対応する反復子を取得します。
|
| Iterator |
GetIterator(
SInt32 index
) 反復子を取得します。
|
| V |
GetLast( Void ) 最後の要素を取得します。
|
| Enumerator |
GetLastEnumerator( Void ) 最後の要素に対応する列挙子を取得します。
|
| Iterator |
GetLastIterator( Void ) 最後の要素に対応する反復子を取得します。
|
| SInt32 |
GetSize( Void ) サイズ(要素数)を取得します。
|
| UInt16 |
GetThreshold( Void ) 内部バッファ サイズの最小値を取得します。
|
| SFCError |
Insert(
SInt32 index
, SFXStack< V > const & collection
) Insert( SInt32 index , V value ) 要素を挿入します。
|
| SFCError |
InsertFirst(
SFXStack< V > const & collection
) InsertFirst( V value ) スタックの最初に要素を挿入します。
|
| SFCError |
InsertLast(
SFXStack< V > const & collection
) InsertLast( V value ) スタックの最後に要素を挿入します。
|
| Bool |
IsEmpty( Void ) スタックが空であるか判定します。
|
| SInt32 |
LastIndexOf(
V value
, SInt32 index = SINT32_MAXIMUM
) 末尾から検索して、指定した値と一致する最後の要素のインデックスを取得します。
|
| V |
Peek( Void ) スタックの先頭要素を取得する
|
| V |
Pop( Void ) スタックの先頭要素を取り出します。
|
| SFCError |
Push(
V value
) スタックに要素を追加します。
|
| Void |
Remove(
SInt32 index
) Remove( SInt32 begin , SInt32 end ) 指定した位置または範囲の要素を消去します。
|
| Void |
RemoveFirst( Void ) 最初の要素を消去します。
|
| Void |
RemoveLast( Void ) 最後の要素を消去します。
|
| SInt32 |
Search(
V value
) 要素をスタックの先頭から検索してインデックスを取得します。
|
| SFCError |
Set(
SFXStack< V > const & collection
) Set( SInt32 index , V value ) 要素に値を設定します。またはスタックを設定します。
|
| Void |
SetCluster(
UInt16 size
) 内部バッファ メモリのクラスタ サイズを設定します。
|
| SFCError |
SetFirst(
V value
) 最初の要素に値を設定します。
|
| SFCError |
SetLast(
V value
) 最後の要素に値を設定します。
|
| SFCError |
SetSize(
SInt32 size
) 要素数を設定します。
|
| Void |
SetThreshold(
UInt16 size
) 内部バッファ サイズの最小値を設定します。
|
| V & |
operator[](
SInt32 index
) 指定した位置の要素を取得します。
|
| V const & |
operator[](
SInt32 index
) 指定した位置の要素を取得します。
|
| 型 |
|---|
|
DefaultEnum
内部で使うヒープ サイズの閾値とクラスタ サイズの既定値を表します。
|
|
Enumerator
列挙子を保持するクラスです。
|
|
Iterator
反復子を保持するクラスです。
|
[ public, explicit ] SFXStack(Void);
[ public, explicit ]
SFXStack(
UInt16 threshold // バッファ サイズの最小値
UInt16 cluster // クラスタ サイズ
);
[ public ] SFCError Append( SFXStack< V > const & collection // 追加するスタック );
[ public ] SFCError Append( V value // 追加する要素 );
スタックの最後に要素を追加します。
SFXStack<SInt08> stack; SInt16 i; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // インデックスを元に要素を列挙する for (i = 0; i < stack.GetSize(); ++i) { TRACE("%d", stack[i]); // 2 5 } } }
SFXStack::Insert | SFXStack::InsertLast | SFXStack::Get | SFXStack::Push | SFXStack::Remove | SFXStack::Set
[ public ] Void Clear(Void);
格納されている要素がクラスのインスタンスへのポインターの場合、そのインスタンスは自動的に解放されません。
SFXStack<SInt08> stack;
...
stack.Clear(); // すべてのデータと管理用メモリを解放する
[ public, const ] Bool Contains( V value // 含まれるか調べる値 );
要素がクラスのインスタンスへのポインターの場合、アドレスを比較します。
SFXStack<SInt08> stack; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 指定した値と同じ要素が含まれるか判定する TRACE("Contains(2) = %s", (stack.Contains(2)) ? ("true") : ("false")); // Contains(2) = true TRACE("Contains(4) = %s", (stack.Contains(4)) ? ("true") : ("false")); // Contains(4) = false } }
[ public, static ] SFXStack< V > const & EmptyInstance(Void);
空のスタックを表すインスタンスを取得します。
[ public, const ] Bool Equals( SFXStack< V > const & collection // 比較するスタック );
2 つのスタックに同じ要素が同じ順で格納されているか調べます。
格納されている要素がクラスのインスタンスへのポインターの場合、アドレスを比較します。
要素を先頭から末尾に向かって検索し、最初に見つかった位置のインデックスを取得します。
検索開始位置を指定することで、先頭以外の位置から検索できます。
格納されている要素がクラスのインスタンスへのポインターの場合、アドレスを比較します。
SFXStack<SInt08> stack; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 先頭から検索して、指定した値と一致する最初の要素のインデックスを取得する TRACE("FirstIndexOf(1) = %d", stack.FirstIndexOf(1)); // FirstIndexOf(1) = -1 TRACE("FirstIndexOf(2) = %d", stack.FirstIndexOf(2)); // FirstIndexOf(2) = 0 TRACE("FirstIndexOf(5) = %d", stack.FirstIndexOf(5)); // FirstIndexOf(5) = 1 } }
[ public, const ]
V Get(
SInt32 index // 取得する要素の位置
);SFXStack::Append | SFXStack::GetFirst | SFXStack::GetLast | SFXStack::Insert | SFXStack::Remove | SFXStack::Set
[ public, const ] UInt16 GetCluster(Void);
[ public, const ]
Enumerator GetEnumerator(
SInt32 index // 開始位置
);[ public, const ] V GetFirst(Void);
[ public, const ] Enumerator GetFirstEnumerator(Void);
SFXStack<SInt08> stack; SFXStack<SInt08>::Enumerator en; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 最初の要素に対応する列挙子を取得する en = stack.GetFirstEnumerator(); // 次の要素があるか判定する while(en.HasNext()) { TRACE("%d", en.GetNext()); // 2 5 } } }
[ public ] Iterator GetFirstIterator(Void);
SFXStack<SInt08> stack; SFXStack<SInt08>::Iterator it; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 最初の要素に対応する反復子を取得する it = stack.GetFirstIterator(); // 次の要素があるか判定する while(it.HasNext()) { TRACE("%d", it.GetNext()); // 2 5 } } }
[ public ]
Iterator GetIterator(
SInt32 index // 開始位置
);[ public, const ] V GetLast(Void);
[ public, const ] Enumerator GetLastEnumerator(Void);
[ public ] Iterator GetLastIterator(Void);
[ public, const ] SInt32 GetSize(Void);
SFXStack<SInt08> stack; SInt16 i; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // サイズ(要素数)を表示する TRACE("%d", stack.GetSize()); // 2 } }
[ public, const ] UInt16 GetThreshold(Void);
[ public ] SFCError Insert( SInt32 index // 挿入する位置 SFXStack< V > const & collection // 挿入するスタック );
[ public ] SFCError Insert( SInt32 index // 挿入する位置 V value // 挿入する要素の値 );
指定した位置に、要素を挿入します。
挿入する位置が有効でない場合は、自動的に有効な範囲に修正されます。
SFXStack<SInt08> stack; SInt16 i; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 最初の位置に要素を挿入する if (stack.Insert(0, 3) == SFERR_NO_ERROR) { // 要素を挿入する // 指定したインデックスが有効でない場合、要素は有効な位置に挿入される if (stack.Insert(10, 4) == SFERR_NO_ERROR) { // インデックスを元にデータを列挙する for (i = 0; i < stack.GetSize(); ++i) { TRACE("%d", stack[i]); // 3 2 5 4 } } } }
SFXStack::Append | SFXStack::Get | SFXStack::InsertFirst | SFXStack::InsertLast | SFXStack::Remove | SFXStack::Set
[ public ] SFCError InsertFirst( SFXStack< V > const & collection // 挿入するスタック );
[ public ] SFCError InsertFirst( V value // 挿入する要素 );
[ public ] SFCError InsertLast( SFXStack< V > const & collection // 挿入するスタック );
[ public ] SFCError InsertLast( V value // 挿入する要素 );
SFXStack::Append 関数を呼び出すのと同等です。
[ public, const ] Bool IsEmpty(Void);
要素を末尾から先頭に向かって検索し、最初に見つかった位置のインデックスを取得します
検索開始位置を指定することで、末尾以外の位置から検索できます。
格納されている要素がクラスのインスタンスへのポインターの場合、アドレスを比較します。
SFXStack<SInt08> stack; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 末尾から検索して、指定した値と一致する最後の要素のインデックスを取得する TRACE("LastIndexOf(1) = %d", stack.LastIndexOf(1)); // LastIndexOf(1) = -1 TRACE("LastIndexOf(2) = %d", stack.LastIndexOf(2)); // LastIndexOf(2) = 0 TRACE("LastIndexOf(5) = %d", stack.LastIndexOf(5)); // LastIndexOf(5) = 1 } }
[ public, const ] V Peek(Void);
SFXStack<SInt08> stack; // スタックに要素を追加する if (stack.Push(1) == SFERR_NO_ERROR) { // スタックの先頭要素を取得する TRACE("%d", stack.Peek()); // 1 // スタックに要素を追加する if (stack.Push(2) == SFERR_NO_ERROR) { // スタックの先頭要素を取得する TRACE("%d", stack.Peek()); // 2 // スタックに要素を追加する if (stack.Push(3) == SFERR_NO_ERROR) { // スタックの先頭要素を取得する TRACE("%d", stack.Peek()); // 3 } } }
[ public ] V Pop(Void);
SFXStack<SInt08> stack; // スタックに要素を追加する if (stack.Push(1) == SFERR_NO_ERROR) { // スタックに要素を追加する if (stack.Push(2) == SFERR_NO_ERROR) { // スタックに要素を追加する if (stack.Push(3) == SFERR_NO_ERROR) { // スタックの先頭要素を取り出す TRACE("%d", stack.Pop()); // 3 TRACE("%d", stack.Pop()); // 2 TRACE("%d", stack.Pop()); // 1 } } }
SFXStack::Get | SFXStack::GetFirst | SFXStack::GetLast | SFXStack::Remove | SFXStack::RemoveFirst | SFXStack::RemoveLast | SFXStack::Peek SFXStack::Push
[ public ] SFCError Push( V value // 追加する要素 );
Push 関数の内部で、 SFXStack::InsertLast 関数が呼び出されます。
SFXStack<SInt08> stack; // スタックに要素を追加する if (stack.Push(1) == SFERR_NO_ERROR) { // スタックの先頭要素を取得する TRACE("%d", stack.Peek()); // 1 // スタックに要素を追加する if (stack.Push(2) == SFERR_NO_ERROR) { // スタックの先頭要素を取得する TRACE("%d", stack.Peek()); // 2 // スタックに要素を追加する if (stack.Push(3) == SFERR_NO_ERROR) { // スタックの先頭要素を取得する TRACE("%d", stack.Peek()); // 3 } } }
SFXStack::Append | SFXStack::Insert | SFXStack::InsertLast | SFXStack::Set | SFXStack::Pop | SFXStack::Peek
[ public ] Void Remove( SInt32 index // 消去する位置 );
[ public ] Void Remove( SInt32 begin // 消去開始位置 SInt32 end // 消去終了位置 );
SFXStack<SInt08> stack; SInt16 i; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 最初の位置に要素を挿入する if (stack.Insert(0, 3) == SFERR_NO_ERROR) { // 要素を挿入する // 指定したインデックスが有効でない場合、要素は有効な位置に挿入される if (stack.Insert(10, 4) == SFERR_NO_ERROR) { // stack[1] から stack[2] までを削除する stack.Remove(1, 3); // インデックスを元にデータを列挙 for (i = 0; i < stack.GetSize(); ++i) { TRACE("%d", stack[i]); // 3 4 } } } } }
[ public ] Void RemoveFirst(Void);
[ public ] Void RemoveLast(Void);
[ public, const ] SInt32 Search( V value // 検索する要素 );
SFXStack<SInt08> stack; // スタックに要素を追加する if (stack.Push(1) == SFERR_NO_ERROR) { // スタックの最後に要素を追加する if (stack.Push(2) == SFERR_NO_ERROR) { // スタックの最後に要素を追加する if (stack.Push(3) == SFERR_NO_ERROR) { // スタックの先頭から検索する TRACE("Search(3) = %d", stack.Search(3)); // 1 TRACE("Search(5) = %d", stack.Search(5)); // -1 } } }
[ public ] SFCError Set( SFXStack< V > const & collection // 設定するスタック );
[ public ] SFCError Set( SInt32 index // 設定する位置 V value // 設定する値 );
SFXStack<SInt08> stack; SInt16 i; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 要素の値を設定する if (stack.Set(1, 10) == SFERR_NO_ERROR) { // インデックスを元に要素を列挙する for (i = 0; i < stack.GetSize(); ++i) { TRACE("%d", stack[i]); // 2 10 } } } }
[ public ] SFCError SetFirst( V value // 設定する値 );
[ public ] SFCError SetLast( V value // 設定する値 );
現在のスタックのサイズよりも設定するサイズが小さいと、そのサイズ以降の要素は消去されます。
[ public ]
V & operator[](
SInt32 index // 取得する要素の位置
);
[ public, const ]
V const & operator[](
SInt32 index // 取得する要素の位置
);
enum DefaultEnum {
DEFAULT_THRESHOLD = 4 * sizeof(VoidPtr), // ヒープ サイズの閾値
DEFAULT_CLUSTER = 8 * sizeof(VoidPtr) // 既定のクラスタ サイズ
};
[ public ]
SFMTYPEDEFCLASS(Enumerator)
friend class Enumerator;
class Enumerator {
public:
explicit Enumerator (Void) : Enumeratoa();
Enumerator (IteratorConstRef iterator) : Enumeratox(iterator);
EnumeratorRef operator= (IteratorConstRef iterator);
V GetNext (Void);
V GetPrevious (Void);
Bool HasNext (Void) const;
Bool HasPrevious (Void) const;
Bool IsValid (Void) const;
};
Enumerator クラスは、列挙子を保持するクラスです。
以下のメンバ関数を持ちます。
| GetNext | 次の要素を取得します。要素がない場合 null を返します。 |
| GetPrevious | 前の要素を取得します。要素がない場合 null を返します。 |
| HasNext | 次の要素があるか調べます。 |
| HasPrevious | 前の要素があるか調べます。 |
| IsValid | 列挙子が有効であるか判定します。 |
SFXStack<SInt08> stack; SFXStack<SInt08>::Enumerator en; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 最初の要素に対応する列挙子を取得する en = stack.GetFirstEnumerator(); // 次の要素があるか判定する while(en.HasNext()) { TRACE("%d", en.GetNext()); // 2 5 } } }
[ public ]
SFMTYPEDEFCLASS(Iterator)
friend class Iterator;
class Iterator {
public:
explicit Iterator (Void) : Iteratoa();
SFCError Set (V value);
V GetNext (Void);
V GetPrevious (Void);
Bool HasNext (Void) const;
Bool HasPrevious (Void) const;
Bool IsValid (Void) const;
SFCError Insert (V value);
Void Remove (Void);
friend class Enumerator;
};
Iterator クラスは、反復子を保持するクラスです。
以下のメンバ関数を持ちます。
| Set | 反復子が指す要素に値を設定します。 |
| GetNext | 次の要素を取得します。要素がない場合 null を返します。 |
| GetPrevious | 前の要素を取得します。要素がない場合 null を返します。 |
| HasNext | 次の要素があるか調べます。 |
| HasPrevious | 前の要素があるか調べます。 |
| IsValid | 反復子が有効であるか判定します。 |
| Insert | 反復子が指す要素の次に要素を挿入します。 |
| Remove | 反復子が指す要素を削除します。 |
SFXStack<SInt08> stack; SFXStack<SInt08>::Iterator it; // 要素を追加する if (stack.Append(2) == SFERR_NO_ERROR) { // 要素を追加する if (stack.Append(5) == SFERR_NO_ERROR) { // 最初の要素に対応する反復子を取得する it = stack.GetFirstIterator(); // 次の要素があるか判定する while(it.HasNext()) { TRACE("%d", it.GetNext()); // 2 5 } } }
|
Copyright (C) 2002 - 2009 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|