3232#include " StdAfx.h"
3333#include " CEol.h"
3434
35- /* ! 行終端子の配列 */
36- const EEolType gm_pnEolTypeArr[EOL_TYPE_NUM] = {
37- EOL_NONE , // == 0
38- EOL_CRLF , // == 2
39- EOL_LF , // == 1
40- EOL_CR , // == 1
41- EOL_NEL , // == 1
42- EOL_LS , // == 1
43- EOL_PS // == 1
44- };
45-
4635// -----------------------------------------------
4736// 固定データ
4837// -----------------------------------------------
4938
5039const SEolDefinition g_aEolTable[] = {
5140 { L" 改行無" , L" " , " " , 0 },
52- { L" CRLF" , L" \x0d\x0a " , " \x0d\x0a " , 2 },
41+ { L" CRLF" , L" \x0d\x0a " , " \x0d\x0a " , 2 },
5342 { L" LF" , L" \x0a " , " \x0a " , 1 },
5443 { L" CR" , L" \x0d " , " \x0d " , 1 },
55- { L" NEL" , L" \x85 " , " " , 1 },
44+ { L" NEL" , L" \x85 " , " " , 1 },
5645 { L" LS" , L" \u2028 " , " " , 1 },
5746 { L" PS" , L" \u2029 " , " " , 1 },
5847};
@@ -83,16 +72,17 @@ static const SEolDefinitionForUniFile g_aEolTable_uni_file[] = {
8372 行終端子の種類を調べる。
8473 @param pszData 調査対象文字列へのポインタ
8574 @param nDataLen 調査対象文字列の長さ
86- @return 改行コードの種類。終端子が見つからなかったときはEOL_NONEを返す 。
75+ @return 改行コードの種類。終端子が見つからなかったときはEEolType::noneを返す 。
8776*/
8877template <class T >
8978EEolType GetEOLType ( const T* pszData, int nDataLen )
9079{
91- for ( int i = 1 ; i < EOL_TYPE_NUM; ++i ){
92- if ( g_aEolTable[i].StartsWith (pszData, nDataLen) )
93- return gm_pnEolTypeArr[i];
80+ for ( size_t i = 1 ; i < EOL_TYPE_NUM; ++i ){
81+ if ( g_aEolTable[i].StartsWith (pszData, nDataLen) ){
82+ return static_cast <EEolType>(i);
83+ }
9484 }
95- return EOL_NONE ;
85+ return EEolType::none ;
9686}
9787
9888/*
@@ -101,36 +91,44 @@ EEolType GetEOLType( const T* pszData, int nDataLen )
10191
10292EEolType _GetEOLType_uni ( const char * pszData, int nDataLen )
10393{
104- for ( int i = 1 ; i < EOL_TYPE_NUM; ++i ){
105- if ( g_aEolTable_uni_file[i].StartsWithW (pszData, nDataLen) )
106- return gm_pnEolTypeArr[i];
94+ for ( size_t i = 1 ; i < EOL_TYPE_NUM; ++i ){
95+ if ( g_aEolTable_uni_file[i].StartsWithW (pszData, nDataLen) ){
96+ return static_cast <EEolType>(i);
97+ }
10798 }
108- return EOL_NONE ;
99+ return EEolType::none ;
109100}
110101
111102EEolType _GetEOLType_unibe ( const char * pszData, int nDataLen )
112103{
113- for ( int i = 1 ; i < EOL_TYPE_NUM; ++i ){
114- if ( g_aEolTable_uni_file[i].StartsWithWB (pszData, nDataLen) )
115- return gm_pnEolTypeArr[i];
104+ for ( size_t i = 1 ; i < EOL_TYPE_NUM; ++i ){
105+ if ( g_aEolTable_uni_file[i].StartsWithWB (pszData, nDataLen) ){
106+ return static_cast <EEolType>(i);
107+ }
116108 }
117- return EOL_NONE ;
109+ return EEolType::none ;
118110}
119111
120112// -----------------------------------------------
121113// 実装部
122114// -----------------------------------------------
123115
124116// ! 現在のEOLの名称取得
125- const WCHAR* CEol::GetName () const
117+ [[nodiscard]] LPCWSTR CEol::GetName () const noexcept
118+ {
119+ return g_aEolTable[static_cast <size_t >(m_eEolType)].m_szName ;
120+ }
121+
122+ // ! 現在のEOL文字列先頭へのポインタを取得
123+ [[nodiscard]] LPCWSTR CEol::GetValue2 () const noexcept
126124{
127- return g_aEolTable[ m_eEolType ]. m_szName ;
125+ return g_aEolTable[static_cast < size_t >( m_eEolType)]. m_szDataW ;
128126}
129127
130- // !< 現在のEOL文字列先頭へのポインタを取得
131- const wchar_t * CEol::GetValue2 () const
128+ // ! 現在のEOL文字列長を取得。文字単位。
129+ [[nodiscard]] CLogicInt CEol::GetLen () const noexcept
132130{
133- return g_aEolTable[ m_eEolType ]. m_szDataW ;
131+ return CLogicInt ( g_aEolTable[static_cast < size_t >( m_eEolType)]. m_nLen ) ;
134132}
135133
136134/* !
@@ -139,16 +137,17 @@ const wchar_t* CEol::GetValue2() const
139137 @retval true 正常終了。設定が反映された。
140138 @retval false 異常終了。強制的にCRLFに設定。
141139*/
142- bool CEol::SetType ( EEolType t )
140+ constexpr bool CEol::SetType ( EEolType t ) noexcept
143141{
144- if ( t < EOL_NONE || EOL_CODEMAX <= t ){
145- // 異常値
146- m_eEolType = EOL_CRLF;
142+ if ( IsNoneOrValid ( t ) ){
143+ // 正しい値
144+ m_eEolType = t;
145+ return true ;
146+ }else {
147+ // 異常値
148+ m_eEolType = EEolType::cr_and_lf;
147149 return false ;
148150 }
149- // 正しい値
150- m_eEolType = t;
151- return true ;
152151}
153152
154153void CEol::SetTypeByString ( const wchar_t * pszData, int nDataLen )
@@ -170,3 +169,23 @@ void CEol::SetTypeByStringForFile_unibe( const char* pszData, int nDataLen )
170169{
171170 SetType ( _GetEOLType_unibe ( pszData, nDataLen ) );
172171}
172+
173+ bool operator == ( const CEol& lhs, const CEol& rhs ) noexcept
174+ {
175+ return lhs.operator ==(static_cast <EEolType>(rhs));
176+ }
177+
178+ bool operator != ( const CEol& lhs, const CEol& rhs ) noexcept
179+ {
180+ return !(lhs == rhs);
181+ }
182+
183+ bool operator == ( EEolType lhs, const CEol& rhs ) noexcept
184+ {
185+ return rhs.operator ==(lhs);
186+ }
187+
188+ bool operator != ( EEolType lhs, const CEol& rhs ) noexcept
189+ {
190+ return !(lhs == rhs);
191+ }
0 commit comments