TNB Library
TnbNumberList.h
[詳解]
1#pragma once
11#include "TnbSet.h"
12#include "TnbStrVector.h"
13#include "TnbStrOperator.h"
14
15
16
17//TNB Library
18namespace TNB
19{
20
21
22
29template<typename TYP>
30inline void StringTo(CSingleSetT<TYP>& _v, LPCTSTR lpsz, TCHAR period = _T(','))
31{
32 CStr s = lpsz;
33 s.Replace(_T(" "), _T(""));
35 _v.RemoveAll();
36 loop ( i, vs )
37 {
38 CStrVector v = CStrOperator::SeparatePeriod(vs[i], _T('-'));
39 if ( v.GetSize() == 1 )
40 {
41 if ( ! v[0].IsEmpty() && STRLIB::HexCharToInt(v[0][0]) >= 0 )
42 {
43 _v.Insert(static_cast<TYP>(v[0].ToDword(0, 0)));
44 }
45 }
46 else if ( v.GetSize() >= 2 )
47 {
48 if ( ! v[0].IsEmpty() && STRLIB::HexCharToInt(v[0][0]) >= 0 )
49 {
50 if ( ! v[1].IsEmpty() && STRLIB::HexCharToInt(v[1][0]) >= 0 )
51 {
52 TYP t1 = static_cast<TYP>(v[0].ToDword(0, 0));
53 TYP t2 = static_cast<TYP>(v[1].ToDword(0, 0));
54 if ( t1 > t2 )
55 {
56 Swap(t1, t2);
57 }
58 loop ( j, (t2 - t1) + 1 )
59 {
60 _v.Insert(static_cast<TYP>(t1 + j));
61 }
62 }
63 }
64 }
65 }
66}
67
74template<typename TYP>
75inline CStr ToString(const CSingleSetT<TYP>& v, TCHAR period = _T(','))
76{
77 CStrAdder s;
78 INDEX idx = 0;
79 while ( v.IsInRange(idx) )
80 {
81 TYP v1 = v.At(idx);
82 s.AddFormat(_T("%d"), v1);
83 idx++;
84 if ( ! v.IsInRange(idx) )
85 {
86 break;
87 }
88 if ( v1 + 1 == v.At(idx) )
89 {
90 //連番
91 v1++;
92 idx++;
93 if ( v.IsInRange(idx) && v1 + 1 == v.At(idx) )
94 {
95 do
96 {
97 v1 = v.At(idx);
98 idx++;
99 }
100 while ( v.IsInRange(idx) && v1 + 1 == v.At(idx) );
101 s.AddFormat(_T("-%d%c"), v1, period);
102 }
103 else
104 {
105 s.AddFormat(_T("%c%d%c"), period, v1, period);
106 }
107 }
108 else
109 {
110 s.Add(period);
111 }
112 }
113 return CStr(s).TrimRight(period);
114}
115
116
117
124template<typename TYP>
125inline void BitfieldTo(CSingleSetT<TYP>& _v, ULONGLONG bf)
126{
127 _v.RemoveAll();
128 loop ( i, 64 )
129 {
130 if ( (bf & _BIT(i)) != 0 )
131 {
132 _v.Insert(static_cast<TYP>(i));
133 }
134 }
135}
136
142template<typename TYP>
143inline ULONGLONG ToBitfield(const CSingleSetT<TYP>& v)
144{
145 ULONGLONG r = 0;
146 loop ( i, v )
147 {
148 r |= _BIT(v[i]);
149 }
150 return r;
151}
152
153
154
155}; // TNB
156
157
#define _BIT(X)
BIT演算
Definition: TnbDef.h:307
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
シングルセット情報管理関係のヘッダ
文字列操作関係のヘッダ
文字列情報配列管理関係のヘッダ
シングルセット情報管理テンプレート
Definition: TnbSet.h:71
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
Definition: TnbSet.h:155
virtual bool RemoveAll(void)
[削除] 空化
Definition: TnbSet.h:192
INDEX Insert(const TYP &t)
[検索] 指定要素挿入.
Definition: TnbSet.h:273
文字列連結専門管理
Definition: TnbStrAdder.h:33
void Add(LPCTSTR lpsz)
[追加] 文字列追加.
Definition: TnbStrAdder.h:167
int AddFormat(size_t len, LPCTSTR lpszFmt,...)
[追加] 文字列追加.
Definition: TnbStrAdder.h:108
static CVectorT< CStrT< TYP > > SeparatePeriod(const TYP *lpsz, const TYP *lpszMark, bool isCheckDc=true)
[取得] トークン区切取得
CStrT & TrimRight(TYP t=' ')
[処理] 末尾から文字をトリム.
Definition: TnbStr.h:990
int Replace(TYP tOld, TYP tNew)
[処理] 文字置換.
Definition: TnbStr.h:1038
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
int HexCharToInt(int c)
[変換] HEX文字数値変換
Definition: TnbStrLib.h:492
DWORD ToDword(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:395
TNB::CStrT< TCHAR > CStr
文字列クラス
Definition: TnbStr.h:1785
void Swap(T &t1, T &t2)
[変換] スワッパー.
Definition: TnbDef.h:963
TNB Library
Definition: TnbDoxyTitle.txt:2
CStr ToString(const CSingleSetT< TYP > &v, TCHAR period=_T(','))
[変換] 文字列化.
Definition: TnbNumberList.h:75
ULONGLONG ToBitfield(const CSingleSetT< TYP > &v)
[変換] ビットフィールド化.
void BitfieldTo(CSingleSetT< TYP > &_v, ULONGLONG bf)
[設定] ビットフィールド設定.
void StringTo(CSingleSetT< TYP > &_v, LPCTSTR lpsz, TCHAR period=_T(','))
[設定] 文字列設定.
Definition: TnbNumberList.h:30
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.