TNB Library
TnbConstStrVector.h
[詳解]
1#pragma once
13#include "TnbBlockLinkVector.h"
14
15
16
17//TNB Library
18namespace TNB
19{
20
21
22
33template<typename TYP, TYP C1 = 0x0D, TYP C2 = 0x0A>
35{
36public:
37
39 CConstStrVectorT(void) : m_lpszText(NULL)
40 {
41 }
42
47 void Empty(void)
48 {
49 m_work.Free();
50 m_params.RemoveAll();
51 }
52
59 size_t SetClone(const TYP* lpszText)
60 {
61 size_t len = STRLIB::GetLen(lpszText);
62 m_work.Resize(len + 1);
63 STRLIB::Copy(m_work, lpszText);
64 return SetRefered(m_work);
65 }
66
74 size_t SetRefered(TYP* lpszText)
75 {
76 m_lpszText = lpszText;
77 m_params.RemoveAll();
78 INDEX ind = 0;
79 while ( true )
80 {
81 TYP* P = lpszText;
82 size_t len = 0;
83 while ( true )
84 {
85 if ( *P == 0 )
86 {
87 if ( len == 0 )
88 {
89 return m_params.GetSize();
90 }
91 else
92 {
93 break;
94 }
95 }
96 else if ( *P == C1 || *P == C2 )
97 {
98 *P++ = 0;
99 if ( C2 != 0 && *P == C2 )
100 {
101 *P++ = 0;
102 }
103 break;
104 }
105 int s = STRLIB::GetCharSize(*P);
106 P += s;
107 len += s;
108 }
109 m_params.Add(TParam(ind, len));
110 ind += P - lpszText;
111 lpszText += P - lpszText;
112 }
113 ASSERT( false );
114 return 0;
115 }
116
121 size_t GetLineCount(void) const
122 {
123 return m_params.GetSize();
124 }
125
131 size_t GetLength(INDEX index) const
132 {
133 return m_params[index].size;
134 }
135
141 const TYP* GetString(INDEX index) const
142 {
143 return &m_lpszText[m_params[index].index];
144 }
145
146private:
147 struct TParam
148 {
149 INDEX index;
150 size_t size;
151 // コンストラクタ.
152 TParam(INDEX i = 0, size_t s = 0) : index(i), size(s)
153 {
154 }
155 };
157 TYP* m_lpszText;
158 CWorkMemT<TYP> m_work;
159};
160
161
162
172
173
174
175}; // TNB
配列型情報管理関係のヘッダ
virtual size_t GetSize(void) const
[取得] 要素数取得.
virtual bool RemoveAll(void)
[削除] 全要素削除 .
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
不変的文字列情報配列管理クラス.
size_t GetLineCount(void) const
[取得] ライン数取得.
size_t SetRefered(TYP *lpszText)
[設定] データ設定.
size_t GetLength(INDEX index) const
[取得] 長さ取得.
const TYP * GetString(INDEX index) const
[取得] 文字列取得.
CConstStrVectorT(void)
コンストラクタ
void Empty(void)
[設定] 空っぽ化.
size_t SetClone(const TYP *lpszText)
[設定] データ設定.
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
ワークメモリテンプレート.
Definition: TnbDef.h:633
int GetCharSize(char c)
[取得] 文字のサイズ(ASCII/SJIS用)
Definition: TnbStrLib.h:341
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
Definition: TnbStrLib.h:44
void Copy(LPSTR _dst, LPCSTR src)
[複製] 文字列コピー(ASCII/SJIS用)
Definition: TnbStrLib.h:89
TNB Library
Definition: TnbDoxyTitle.txt:2
CConstStrVectorT< TCHAR > CConstStrVector
不変的文字列情報配列管理クラス.