diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index dd709bc550..35364218a6 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -1,15 +1,15 @@ -/*! @file - ƒƒ‚ƒŠƒoƒbƒtƒ@ƒNƒ‰ƒX +ďťż/*! @file + メモリバッファクラス @author Norio Nakatani - @date 1998/03/06 V‹KěŹ + @date 1998/03/06 新規作成 */ /* Copyright (C) 1998-2001, Norio Nakatani Copyright (C) 2000-2001, jepro, genta Copyright (C) 2001, mik, misaka, Stonee, hor Copyright (C) 2002, Moca, sui, aroka, genta - Copyright (C) 2003, genta, Moca, ‚Š‚ë‚Ć + Copyright (C) 2003, genta, Moca, かろと Copyright (C) 2004, Moca Copyright (C) 2005, Moca, D.S.Koba @@ -39,7 +39,7 @@ #include "_main/global.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ƒRƒ“ƒXƒgƒ‰ƒNƒ^EƒfƒXƒgƒ‰ƒNƒ^ // +// コンストラクタ・デストラクタ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // void CMemory::_init_members() @@ -55,11 +55,11 @@ CMemory::CMemory() } /* - @note Ši”[ƒf[ƒ^‚É‚ÍNULL‚đŠÜ‚Ţ‚ą‚Ć‚Ş‚Ĺ‚Ť‚é + @note 格納データにはNULLを含むことができる */ CMemory::CMemory( - const void* pData, //!< Ši”[ƒf[ƒ^ƒAƒhƒŒƒX - int nDataLenBytes //!< Ši”[ƒf[ƒ^‚Ě—LŒř’ˇ + const void* pData, //!< 格納データアドレス + int nDataLenBytes //!< 格納データの有効長 ) { _init_members(); @@ -82,7 +82,7 @@ CMemory::~CMemory() // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ‰‰ŽZŽq // +// 演算子 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // const CMemory& CMemory::operator = ( const CMemory& rhs ) @@ -97,14 +97,14 @@ const CMemory& CMemory::operator = ( const CMemory& rhs ) // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ŽŔ‘••â• // +// 実装補助 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // /* -|| ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éiprotectƒƒ“ƒo +|| バッファの最後にデータを追加する(protectュンバ */ void CMemory::_AddData( const void* pData, int nDataLen ) { @@ -114,7 +114,7 @@ void CMemory::_AddData( const void* pData, int nDataLen ) memcpy( &m_pRawData[m_nRawLen], pData, nDataLen ); m_nRawLen += nDataLen; m_pRawData[m_nRawLen] = '\0'; - m_pRawData[m_nRawLen+1] = '\0'; //I’['\0'‚đ2‚•t‰Á‚ˇ‚é('\0''\0'==L'\0')B 2007.08.13 kobake ’ljÁ + m_pRawData[m_nRawLen+1] = '\0'; //終端'\0'を2つ付加する('\0''\0'==L'\0')。 2007.08.13 kobake 追加 return; } @@ -131,7 +131,7 @@ void CMemory::_AddData( const void* pData, int nDataLen ) -/* “™‚ľ‚˘“ŕ—e‚Š */ +/* 等しい内容か */ int CMemory::IsEqual( CMemory& cmem1, CMemory& cmem2 ) { const char* psz1; @@ -165,12 +165,12 @@ int CMemory::IsEqual( CMemory& cmem1, CMemory& cmem2 ) -/* !ăˆĘƒoƒCƒg‚ƉşˆĘƒoƒCƒg‚đŒđŠˇ‚ˇ‚é +/* !上位バイトと下位バイトを交換する @author Moca @date 2002/5/27 - @note nBufLen ‚Ş2‚Ě”{”‚Ĺ‚Č‚˘‚Ć‚Ť‚́AĹŒă‚Ě1ƒoƒCƒg‚ÍŒđŠˇ‚ł‚ę‚Č‚˘ + @note nBufLen が2の倍数でないときは、最後の1バイトは交換されない */ void CMemory::SwapHLByte( char* pData, const int nDataLen ){ unsigned char *p; @@ -187,7 +187,7 @@ void CMemory::SwapHLByte( char* pData, const int nDataLen ){ if( nBufLen < 2){ return; } - // ‚‘Ź‰ť‚Ě‚˝‚ß + // 高速化のため pdwchar = (unsigned int*)pBuf; if( (size_t)pBuf % 2 == 0){ if( (size_t)pBuf % 4 == 2 ){ @@ -211,12 +211,12 @@ void CMemory::SwapHLByte( char* pData, const int nDataLen ){ } -/* !ăˆĘƒoƒCƒg‚ƉşˆĘƒoƒCƒg‚đŒđŠˇ‚ˇ‚é +/* !上位バイトと下位バイトを交換する @author Moca @date 2002/5/27 - @note nBufLen ‚Ş2‚Ě”{”‚Ĺ‚Č‚˘‚Ć‚Ť‚́AĹŒă‚Ě1ƒoƒCƒg‚ÍŒđŠˇ‚ł‚ę‚Č‚˘ + @note nBufLen が2の倍数でないときは、最後の1バイトは交換されない */ void CMemory::SwapHLByte( void ){ char *pBuf; @@ -238,7 +238,7 @@ void CMemory::SwapHLByte( void ){ if( nBufLen < 2){ return; } - // ‚‘Ź‰ť‚Ě‚˝‚ß + // 高速化のため if( (size_t)pBuf % 2 == 0){ if( (size_t)pBuf % 4 == 2 ){ ctemp = pBuf[0]; @@ -276,7 +276,7 @@ bool CMemory::SwabHLByte( const CMemory& mem ) } int nSize = mem.GetRawLength(); if( m_pRawData && nSize + 2 <= m_nDataBufSize ) { - // ƒf[ƒ^‚Ş’Z‚˘Žž‚̓oƒbƒtƒ@‚ĚÄ—˜—p + // データが短い時はバッファの再利用 _SetRawLength(0); }else{ _Empty(); @@ -295,24 +295,24 @@ bool CMemory::SwabHLByte( const CMemory& mem ) /* -|| ƒoƒbƒtƒ@ƒTƒCƒY‚Ě’˛Ž +|| バッファサイズの調整 */ void CMemory::AllocBuffer( int nNewDataLen ) { int nWorkLen; char* pWork = NULL; - // 2ƒoƒCƒg‘˝‚­ƒƒ‚ƒŠŠm•Ű‚ľ‚Ä‚¨‚­('\0'‚Ü‚˝‚ÍL'\0'‚đ“ü‚ę‚é‚˝‚ß) 2007.08.13 kobake •ĎX - nWorkLen = ((nNewDataLen + 2) + 7) & (~7); // 8Byte‚˛‚ƂɐŽ—ń + // 2バイト多くメモリ確保しておく('\0'またはL'\0'を入れるため) 2007.08.13 kobake 変更 + nWorkLen = ((nNewDataLen + 2) + 7) & (~7); // 8Byteごとに整列 if( m_nDataBufSize == 0 ){ - /* –˘Šm•Ű‚̏ó‘Ô */ + /* 未確保の状態 */ pWork = malloc_char( nWorkLen ); m_nDataBufSize = nWorkLen; }else{ - /* ŒťÝ‚Ěƒoƒbƒtƒ@ƒTƒCƒY‚ć‚č‘ĺ‚Ť‚­‚Č‚Á‚˝ę‡‚Ě‚ÝÄŠm•Ű‚ˇ‚é */ + /* 現在のバッファサイズより大きくなった場合のみ再確保する */ if( m_nDataBufSize < nWorkLen ){ - // 2014.06.25 —LŒřƒf[ƒ^’ˇ‚Ş0‚Ěę‡‚Ífree & malloc + // 2014.06.25 有効データ長が0ぎ場合はfree & malloc if( m_nRawLen == 0 ){ free( m_pRawData ); m_pRawData = NULL; @@ -332,7 +332,7 @@ void CMemory::AllocBuffer( int nNewDataLen ) LS(STR_ERR_DLGMEM1), nNewDataLen ); if( NULL != m_pRawData && 0 != nWorkLen ){ - /* ŒĂ‚˘ƒoƒbƒtƒ@‚đ‰đ•ú‚ľ‚ú‰ť */ + /* 古いバッファを解放して初期化 */ _Empty(); } return; @@ -343,7 +343,7 @@ void CMemory::AllocBuffer( int nNewDataLen ) -/* ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é */ +/* バッファの内容を置き換える */ void CMemory::SetRawData( const void* pData, int nDataLen ) { _Empty(); @@ -352,7 +352,7 @@ void CMemory::SetRawData( const void* pData, int nDataLen ) return; } -/* ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é */ +/* バッファの内容を置き換える */ void CMemory::SetRawData( const CMemory& pcmemData ) { const void* pData; @@ -364,10 +364,10 @@ void CMemory::SetRawData( const CMemory& pcmemData ) return; } -/*! ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é */ +/*! バッファの内容を置き換える */ void CMemory::SetRawDataHoldBuffer( const void* pData, int nDataLen ) { - // this d•Ą•s‰Â + // this 重複不可 assert( m_pRawData != pData ); if( m_nRawLen != 0 ){ _SetRawLength(0); @@ -377,7 +377,7 @@ void CMemory::SetRawDataHoldBuffer( const void* pData, int nDataLen ) return; } -/*! ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é */ +/*! バッファの内容を置き換える */ void CMemory::SetRawDataHoldBuffer( const CMemory& pcmemData ) { if( this == &pcmemData ){ @@ -391,7 +391,7 @@ void CMemory::SetRawDataHoldBuffer( const CMemory& pcmemData ) } -/* ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éipublicƒƒ“ƒoj*/ +/* バッファの最後にデータを追加する(publicメンバ)*/ void CMemory::AppendRawData( const void* pData, int nDataLenBytes ) { if(nDataLenBytes<=0)return; @@ -399,7 +399,7 @@ void CMemory::AppendRawData( const void* pData, int nDataLenBytes ) _AddData( pData, nDataLenBytes ); } -/* ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éipublicƒƒ“ƒoj*/ +/* バッファの最後にデータを追加する(publicメンバ)*/ void CMemory::AppendRawData( const CMemory* pcmemData ) { if( this == pcmemData ){ @@ -437,5 +437,5 @@ void CMemory::_SetRawLength(int nLength) m_nRawLen = nLength; assert(m_nRawLen <= m_nDataBufSize-2); m_pRawData[m_nRawLen ]=0; - m_pRawData[m_nRawLen+1]=0; //I’['\0'‚đ2‚•t‰Á‚ˇ‚é('\0''\0'==L'\0')B + m_pRawData[m_nRawLen+1]=0; //終端'\0'を2つ付加する('\0''\0'==L'\0')。 } diff --git a/sakura_core/mem/CMemory.h b/sakura_core/mem/CMemory.h index 6e39ec0101..72bd332a30 100644 --- a/sakura_core/mem/CMemory.h +++ b/sakura_core/mem/CMemory.h @@ -1,8 +1,8 @@ -/*! @file - @brief ƒƒ‚ƒŠƒoƒbƒtƒ@ƒNƒ‰ƒX +ďťż/*! @file + @brief メモリバッファクラス @author Norio Nakatani - @date 1998/03/06 V‹KěŹ + @date 1998/03/06 新規作成 */ /* Copyright (C) 1998-2001, Norio Nakatani @@ -34,15 +34,15 @@ #ifndef _CMEMORY_H_ #define _CMEMORY_H_ -/*! ƒtƒ@ƒCƒ‹•śŽšƒR[ƒhƒZƒbƒg”ť•ĘŽž‚̐ć“Ç‚ÝĹ‘ĺƒTƒCƒY */ +/*! ファイル文字コードセット判別時の先読み最大サイズ */ #define CheckKanjiCode_MAXREADLENGTH 16384 #include "_main/global.h" -//! ƒƒ‚ƒŠƒoƒbƒtƒ@ƒNƒ‰ƒX +//! メモリバッファクラス class CMemory { - //ƒRƒ“ƒXƒgƒ‰ƒNƒ^EƒfƒXƒgƒ‰ƒNƒ^ + //コンストラクタ・デストラクタ public: CMemory(); CMemory(const CMemory& rhs); @@ -51,41 +51,41 @@ class CMemory protected: void _init_members(); - //ƒCƒ“ƒ^[ƒtƒF[ƒX + //インターフェース public: - void AllocBuffer( int ); //!< ƒoƒbƒtƒ@ƒTƒCƒY‚Ě’˛ŽB•K—v‚ɉž‚ś‚ÄŠg‘傡‚éB - void SetRawData( const void* pData, int nDataLen ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é - void SetRawData( const CMemory& ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é - void SetRawDataHoldBuffer( const void* pData, int nDataLen ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é(ƒoƒbƒtƒ@‚đ•ŰŽ) - void SetRawDataHoldBuffer( const CMemory& ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é(ƒoƒbƒtƒ@‚đ•ŰŽ) - void AppendRawData( const void* pData, int nDataLen ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚é - void AppendRawData( const CMemory* ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚é + void AllocBuffer( int ); //!< バッファサイズの調整。必要に応じて拡大する。 + void SetRawData( const void* pData, int nDataLen ); //!< バッファの内容を置き換える + void SetRawData( const CMemory& ); //!< バッファの内容を置き換える + void SetRawDataHoldBuffer( const void* pData, int nDataLen ); //!< バッファの内容を置き換える(バッファを保持) + void SetRawDataHoldBuffer( const CMemory& ); //!< バッファの内容を置き換える(バッファを保持) + void AppendRawData( const void* pData, int nDataLen ); //!< バッファの最後にデータを追加する + void AppendRawData( const CMemory* ); //!< バッファの最後にデータを追加する void Clean(){ _Empty(); } void Clear(){ _Empty(); } - inline const void* GetRawPtr(int* pnLength) const; //!< ƒf[ƒ^‚Ö‚Ěƒ|ƒCƒ“ƒ^‚Ć’ˇ‚ł•Ô‚ˇ - inline void* GetRawPtr(int* pnLength); //!< ƒf[ƒ^‚Ö‚Ěƒ|ƒCƒ“ƒ^‚Ć’ˇ‚ł•Ô‚ˇ - inline const void* GetRawPtr() const{ return m_pRawData; } //!< ƒf[ƒ^‚Ö‚Ěƒ|ƒCƒ“ƒ^‚đ•Ô‚ˇ - inline void* GetRawPtr(){ return m_pRawData; } //!< ƒf[ƒ^‚Ö‚Ěƒ|ƒCƒ“ƒ^‚đ•Ô‚ˇ - int GetRawLength() const { return m_nRawLen; } //!<ƒf[ƒ^’ˇ‚đ•Ô‚ˇBƒoƒCƒg’PˆĘB + inline const void* GetRawPtr(int* pnLength) const; //!< データへのポインタと長さ返す + inline void* GetRawPtr(int* pnLength); //!< データへのポインタと長さ返す + inline const void* GetRawPtr() const{ return m_pRawData; } //!< データへのポインタを返す + inline void* GetRawPtr(){ return m_pRawData; } //!< データへのポインタを返す + int GetRawLength() const { return m_nRawLen; } //!<データ長を返す。バイト単位。 - // ‰‰ŽZŽq + // 演算子 const CMemory& operator=( const CMemory& ); - // ”äŠr - static int IsEqual( CMemory&, CMemory& ); /* “™‚ľ‚˘“ŕ—e‚Š */ + // 比較 + static int IsEqual( CMemory&, CMemory& ); /* 等しい内容か */ - // •ĎŠˇŠÖ” - static void SwapHLByte( char*, const int ); // ‰ş‹LŠÖ”‚ĚstaticŠÖ””Ĺ - void SwapHLByte(); // Byte‚đŒđŠˇ‚ˇ‚é - bool SwabHLByte( const CMemory& ); // Byte‚đŒđŠˇ‚ˇ‚é(ƒRƒs[”Ĺ) + // 変換関数 + static void SwapHLByte( char*, const int ); // 下記関数のstatic関数版 + void SwapHLByte(); // Byteを交換する + bool SwabHLByte( const CMemory& ); // Byteを交換する(コピー版) protected: /* - || ŽŔ‘•ƒwƒ‹ƒpŠÖ” + || 実装ヘルパ関数 */ - void _Empty( void ); //!< ‰đ•ú‚ˇ‚éBm_pRawData‚ÍNULL‚É‚Č‚éB + void _Empty( void ); //!< 解放する。m_pRawDataはNULLになる。 void _AddData( const void*, int ); public: void _AppendSz(const char* str); @@ -100,28 +100,28 @@ class CMemory #ifdef _DEBUG protected: typedef char* PCHAR; - PCHAR& _DebugGetPointerRef(){ return m_pRawData; } //ƒfƒoƒbƒO—pBƒoƒbƒtƒ@ƒ|ƒCƒ“ƒ^‚ĚŽQĆ‚đ•Ô‚ˇB + PCHAR& _DebugGetPointerRef(){ return m_pRawData; } //デバッグ用。バッファポインタの参照を返す。 #endif -private: // 2002/2/10 aroka ƒAƒNƒZƒXŒ •ĎX +private: // 2002/2/10 aroka アクセス権変更 /* - || ƒƒ“ƒo•Ď” + || メンバ変数 */ - char* m_pRawData; //ƒoƒbƒtƒ@ - int m_nRawLen; //ƒf[ƒ^ƒTƒCƒY(m_nDataBufSizeˆČ“ŕ)BƒoƒCƒg’PˆĘB - int m_nDataBufSize; //ƒoƒbƒtƒ@ƒTƒCƒYBƒoƒCƒg’PˆĘB + char* m_pRawData; //バッファ + int m_nRawLen; //データサイズ(m_nDataBufSize以内)。バイト単位。 + int m_nDataBufSize; //バッファサイズ。バイト単位。 }; // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// inlineŠÖ”‚ĚŽŔ‘• // +// inline関数の実装 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -inline const void* CMemory::GetRawPtr(int* pnLength) const //!< ƒf[ƒ^‚Ö‚Ěƒ|ƒCƒ“ƒ^‚Ć’ˇ‚ł•Ô‚ˇ +inline const void* CMemory::GetRawPtr(int* pnLength) const //!< データへのポインタと長さ返す { if(pnLength) *pnLength = GetRawLength(); return m_pRawData; } -inline void* CMemory::GetRawPtr(int* pnLength) //!< ƒf[ƒ^‚Ö‚Ěƒ|ƒCƒ“ƒ^‚Ć’ˇ‚ł•Ô‚ˇ +inline void* CMemory::GetRawPtr(int* pnLength) //!< データへのポインタと長さ返す { if(pnLength) *pnLength = GetRawLength(); return m_pRawData; diff --git a/sakura_core/mem/CMemoryIterator.h b/sakura_core/mem/CMemoryIterator.h index 4c0d3f3a91..5609e89354 100644 --- a/sakura_core/mem/CMemoryIterator.h +++ b/sakura_core/mem/CMemoryIterator.h @@ -1,8 +1,8 @@ -/*! @file - @brief CLayout‚ĆCDocLine‚ĚƒCƒeƒŒ[ƒ^ +ďťż/*! @file + @brief CLayoutとCDocLineのイテレータ @author Yazaki - @date 2002/09/25 V‹KěŹ + @date 2002/09/25 新規作成 */ /* Copyright (C) 2002, Yazaki @@ -21,18 +21,18 @@ #include "doc/layout/CTsvModeInfo.h" /*----------------------------------------------------------------------- -ƒNƒ‰ƒX‚ĚéŒž +クラスの宣言 -----------------------------------------------------------------------*/ -// 2007.10.23 kobake ƒeƒ“ƒvƒŒ[ƒg‚Ĺ‚ ‚é•K—v‚ŕ–ł‚˘‚̂ŁA”ńƒeƒ“ƒvƒŒ[ƒg‚É•ĎXB +// 2007.10.23 kobake テンプレートである必要も無いので、非テンプレートに変更。 #include "doc/layout/CLayout.h" #include "doc/logic/CDocLine.h" -//! ƒuƒƒbƒNƒRƒƒ“ƒgƒfƒŠƒ~ƒ^‚đŠÇ—‚ˇ‚é +//! ブロックコメントデリミタを管理する class CMemoryIterator { public: - //CDocLine—pƒRƒ“ƒXƒgƒ‰ƒNƒ^ + //CDocLine用コンストラクタ CMemoryIterator( const CDocLine* pcT, CLayoutInt nTabSpace, const CTsvModeInfo& tsvInfo, CPixelXInt nCharDx, CPixelXInt nSpacing ) : m_pLine( pcT ? pcT->GetPtr() : NULL ) , m_nLineLen( pcT ? pcT->GetLengthWithEOL() : 0 ) @@ -46,7 +46,7 @@ class CMemoryIterator first(); } - //CLayout—pƒRƒ“ƒXƒgƒ‰ƒNƒ^ + //CLayout用コンストラクタ CMemoryIterator( const CLayout* pcT, CLayoutInt nTabSpace, const CTsvModeInfo& tsvInfo, CPixelXInt nCharDx, CPixelXInt nSpacing ) : m_pLine( pcT ? pcT->GetPtr() : NULL ) , m_nLineLen( pcT ? pcT->GetLengthWithEOL() : 0 ) @@ -60,7 +60,7 @@ class CMemoryIterator first(); } - //! Œ…ˆĘ’u‚đs‚̐擪‚ɃZƒbƒg + //! 桁位置を行の先頭にセット void first() { m_nIndex = CLogicInt(0); @@ -69,26 +69,26 @@ class CMemoryIterator m_nColumn_Delta = CLayoutInt(0); } - /*! s––‚Š‚Ç‚¤‚Š - @return true: s––, false: s––‚Ĺ‚Í‚Č‚˘ + /*! 行末かどうか + @return true: 行末, false: 行末ではない */ bool end() const { return (m_nLineLen <= m_nIndex); } - // ŽŸ‚Ě•śŽš‚đŠm”F‚ľ‚ÄŽŸ‚Ě•śŽš‚Ć‚Ěˇ‚đ‹‚ß‚é + // 次の文字を確認して次の文字との差を求める void scanNext() { // 2005-09-02 D.S.Koba GetSizeOfChar - // 2007.09.04 kobake UNICODE‰ťFƒf[ƒ^‘•Ş‚ĆŒ…‘•Ş‚đ•ĘX‚Ě’l‚Ć‚ľ‚ÄŒvŽZ‚ˇ‚éB + // 2007.09.04 kobake UNICODE化:データ増分と桁増分を別々の値として計算する。 - //ƒf[ƒ^‘•Ş‚đŒvŽZ + //データ増分を計算 m_nIndex_Delta = CNativeW::GetSizeOfChar(m_pLine, m_nLineLen, m_nIndex); if( 0 == m_nIndex_Delta ) m_nIndex_Delta = CLogicInt(1); - //Œ…‘•Ş‚đŒvŽZ + //桁増分を計算 if (m_pLine[m_nIndex] == WCODE::TAB){ if (m_tsvInfo.m_nTsvMode == TSV_MODE_TSV) { m_nColumn_Delta = m_tsvInfo.GetActualTabLength(m_nColumn, m_tsvInfo.m_nMaxCharLayoutX); @@ -106,18 +106,18 @@ class CMemoryIterator if( m_nSpacing ){ m_nColumn_Delta += CLayoutXInt(CNativeW::GetKetaOfChar(m_pLine, m_nLineLen, m_nIndex) * m_nSpacing); } -// if( 0 == m_nColumn_Delta ) // íœ ƒTƒƒQ[ƒgƒyƒA‘΍ô 2008/7/5 Uchi +// if( 0 == m_nColumn_Delta ) // 削除 サロゲートペア対策 2008/7/5 Uchi // m_nColumn_Delta = CLayoutInt(1); } } - /*! —\‚ߌvŽZ‚ľ‚˝ˇ•Ş‚đŒ…ˆĘ’u‚ɉÁ‚Ś‚éD + /*! 予め計算した差分を桁位置に加える. @sa scanNext() */ void addDelta(){ m_nColumn += m_nColumn_Delta; m_nIndex += m_nIndex_Delta; - } // ƒ|ƒCƒ“ƒ^‚đ‚¸‚ç‚ˇ + } // ポインタをずらす CLogicInt getIndex() const { return m_nIndex; } CLayoutInt getColumn() const { return m_nColumn; } @@ -126,28 +126,28 @@ class CMemoryIterator // 2002.10.07 YAZAKI const wchar_t getCurrentChar(){ return m_pLine[m_nIndex]; } - // Jul. 20, 2003 genta ’ljÁ - // memcpy‚đ‚ˇ‚é‚Ě‚Éƒ|ƒCƒ“ƒ^‚Ş‚Ć‚ę‚Č‚˘‚Ć–Ę“| + // Jul. 20, 2003 genta 追加 + // memcpyをするのにポインタがとれないと面倒 const wchar_t* getCurrentPos(){ return m_pLine + m_nIndex; } private: - //ƒRƒ“ƒXƒgƒ‰ƒNƒ^‚ĹŽó‚ŻŽć‚Á‚˝ƒpƒ‰ƒ[ƒ^ (ŒĹ’č) + //コンストラクタで受け取ったパラメータ (固定) const wchar_t* m_pLine; - const int m_nLineLen; //ƒf[ƒ^’ˇB•śŽš’PˆĘB + const int m_nLineLen; //データ長。文字単位。 const CLayoutInt m_nTabSpace; const CTsvModeInfo& m_tsvInfo; const CLayoutInt m_nIndent; - const CPixelXInt m_nSpacing; //•śŽšŒ„ŠÔ(px) - const CPixelXInt m_nTabPadding; //ƒ^ƒu•Ĺ­’l-1 - const CPixelXInt m_nTabSpaceDx; //ƒ^ƒu•ŒvŽZ—p(m_nTabSpace + m_nTabPadding - 1) + const CPixelXInt m_nSpacing; //文字隙間(px) + const CPixelXInt m_nTabPadding; //タブ幅最少値-1 + const CPixelXInt m_nTabSpaceDx; //タブ幅計算用(m_nTabSpace + m_nTabPadding - 1) - //ó‘ԕϐ” - CLogicInt m_nIndex; //ƒf[ƒ^ˆĘ’uB•śŽš’PˆĘB - CLayoutInt m_nColumn; //ƒŒƒCƒAƒEƒgˆĘ’uBŒ…(”źŠp•)’PˆĘB - CLogicInt m_nIndex_Delta; //index‘•Ş - CLayoutInt m_nColumn_Delta; //column‘•Ş + //状態変数 + CLogicInt m_nIndex; //データ位置。文字単位。 + CLayoutInt m_nColumn; //レイアウト位置。桁(半角幅)単位。 + CLogicInt m_nIndex_Delta; //index増分 + CLayoutInt m_nColumn_Delta; //column増分 }; diff --git a/sakura_core/mem/CNative.cpp b/sakura_core/mem/CNative.cpp index ec9309369c..a5996f93da 100644 --- a/sakura_core/mem/CNative.cpp +++ b/sakura_core/mem/CNative.cpp @@ -1,7 +1,7 @@ -#include "StdAfx.h" +ďťż#include "StdAfx.h" #include "CNative.h" -//! ‹ó‚Á‚Ű‚É‚ˇ‚é +//! 空っぽにする void CNative::Clear() { this->SetRawData("",0); diff --git a/sakura_core/mem/CNative.h b/sakura_core/mem/CNative.h index e9912da213..ad88b6fe31 100644 --- a/sakura_core/mem/CNative.h +++ b/sakura_core/mem/CNative.h @@ -1,4 +1,4 @@ -/* +ďťż/* Copyright (C) 2008, kobake This software is provided 'as-is', without any express or implied @@ -26,16 +26,16 @@ #include "mem/CMemory.h" -//ŚCMemory‚đprotectŒpł‚ˇ‚é‚ą‚Ć‚É‚ć‚čA‚ ‚܂莊—R‚ÉCMemory‚đŽg‚Ś‚Č‚˘‚悤‚É‚ľ‚Ä‚¨‚­ +//※CMemoryをprotect継承することにより、あまり自由にCMemoryを使えないようにしておく class CNative : protected CMemory{ public: - //CMemory*ƒ|ƒCƒ“ƒ^‚đ“ž‚é + //CMemory*ポインタを得る CMemory* _GetMemory(){ return static_cast(this); } const CMemory* _GetMemory() const{ return static_cast(this); } public: - //”Ä—p - void Clear(); //!< ‹ó‚Á‚Ű‚É‚ˇ‚é + //汎用 + void Clear(); //!< 空っぽにする }; #include "mem/CNativeA.h" diff --git a/sakura_core/mem/CNativeA.h b/sakura_core/mem/CNativeA.h index 2843de842b..e7708f2d47 100644 --- a/sakura_core/mem/CNativeA.h +++ b/sakura_core/mem/CNativeA.h @@ -1,4 +1,4 @@ -/* +ďťż/* Copyright (C) 2008, kobake This software is provided 'as-is', without any express or implied @@ -33,18 +33,18 @@ class CNativeA : public CNative{ CNativeA(const char* szData); CNativeA(const char* pData, int nLength); - //ƒlƒCƒeƒBƒuÝ’č - void SetString( const char* pszData ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é - void SetString( const char* pData, int nDataLen ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚éBnDataLen‚Í•śŽš’PˆĘB - void SetNativeData( const CNativeA& pcNative ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é - void AppendString( const char* pszData ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚é - void AppendString( const char* pszData, int nLength ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éBnLength‚Í•śŽš’PˆĘB - void AppendNativeData( const CNativeA& pcNative ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚é - void AllocStringBuffer( int nDataLen ); //!< (d—vFnDataLen‚Í•śŽš’PˆĘ) ƒoƒbƒtƒ@ƒTƒCƒY‚Ě’˛ŽB•K—v‚ɉž‚ś‚ÄŠg‘傡‚éB + //ネイティブ設定 + void SetString( const char* pszData ); //!< バッファの内容を置き換える + void SetString( const char* pData, int nDataLen ); //!< バッファの内容を置き換える。nDataLenは文字単位。 + void SetNativeData( const CNativeA& pcNative ); //!< バッファの内容を置き換える + void AppendString( const char* pszData ); //!< バッファの最後にデータを追加する + void AppendString( const char* pszData, int nLength ); //!< バッファの最後にデータを追加する。nLengthは文字単位。 + void AppendNativeData( const CNativeA& pcNative ); //!< バッファの最後にデータを追加する + void AllocStringBuffer( int nDataLen ); //!< (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 - //ƒlƒCƒeƒBƒuŽć“ž + //ネイティブ取得 int GetStringLength() const; - char operator[](int nIndex) const; //!< ”CˆÓˆĘ’u‚Ě•śŽšŽć“žBnIndex‚Í•śŽš’PˆĘB + char operator[](int nIndex) const; //!< 任意位置の文字取得。nIndexは文字単位。 const char* GetStringPtr() const { return reinterpret_cast(GetRawPtr()); @@ -53,45 +53,45 @@ class CNativeA : public CNative{ { return reinterpret_cast(GetRawPtr()); } - const char* GetStringPtr(int* pnLength) const; //[out]pnLength‚Í•śŽš’PˆĘB + const char* GetStringPtr(int* pnLength) const; //[out]pnLengthは文字単位。 - //‰‰ŽZŽq + //演算子 const CNativeA& operator=( char ); const CNativeA& operator+=( char ); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // •ĎŠˇ // + // 変換 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - //ƒlƒCƒeƒBƒu•ĎŠˇ - void Replace( const char* pszFrom, const char* pszTo ); //!< •śŽš—ń’uŠˇ - void Replace_j( const char* pszFrom, const char* pszTo ); //!< •śŽš—ń’uŠˇi“ú–{Œęl—ś”Łj + //ネイティブ変換 + void Replace( const char* pszFrom, const char* pszTo ); //!< 文字列置換 + void Replace_j( const char* pszFrom, const char* pszTo ); //!< 文字列置換(日本語考慮版) void ReplaceT( const char* pszFrom, const char* pszTo ){ Replace_j( pszFrom, pszTo ); } - //ˆę”ʊ֐” - void ToLower(); // ¨Ź•śŽš - void ToUpper(); // ¨‘ĺ•śŽš + //一般関数 + void ToLower(); // →小文字 + void ToUpper(); // →大文字 - void ToZenkaku( int, int ); // ”źŠp¨‘SŠp + void ToZenkaku( int, int ); // 半角→全角 - void TABToSPACE( int ); // TAB¨‹ó”’ - void SPACEToTAB( int ); // ‹ó”’¨TAB //---- Stonee, 2001/05/27 + void TABToSPACE( int ); // TAB→空白 + void SPACEToTAB( int ); // 空白→TAB //---- Stonee, 2001/05/27 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // Œ^ŒŔ’čƒCƒ“ƒ^[ƒtƒF[ƒX // + // 型限定インターフェース // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // Žg—p‚Í‚Ĺ‚Ť‚é‚ž‚ŻT‚Ś‚é‚Ě‚Ş–]‚Ü‚ľ‚˘B - // ‚Đ‚Ć‚Â‚ÍƒI[ƒo[ƒwƒbƒh‚đ—}‚Ś‚éˆÓ–Ą‚ŁB - // ‚ЂƂ‚͕ϊˇ‚É‚ć‚éƒf[ƒ^‘rŽ¸‚đ—}‚Ś‚éˆÓ–Ą‚ŁB + // 使用はできるだけ控えるのが望ましい。 + // ひとつはオーバーヘッドを抑える意味で。 + // ひとつは変換によるデータ喪失を抑える意味で。 //WCHAR void SetStringNew(const wchar_t* wszData, int nDataLen); void SetStringNew(const wchar_t* wszData); - void AppendStringNew( const wchar_t* pszData ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚é - void AppendStringNew( const wchar_t* pszData, int nDataLen ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éBnDataLen‚Í•śŽš’PˆĘB + void AppendStringNew( const wchar_t* pszData ); //!< バッファの最後にデータを追加する + void AppendStringNew( const wchar_t* pszData, int nDataLen ); //!< バッファの最後にデータを追加する。nDataLenは文字単位。 void SetStringW(const wchar_t* pszData) { return SetStringNew(pszData); } void SetStringW(const wchar_t* pData, int nLength) { return SetStringNew(pData,nLength); } void AppendStringW(const wchar_t* pszData) { return AppendStringNew(pszData); } @@ -108,10 +108,10 @@ class CNativeA : public CNative{ #endif public: - // -- -- staticƒCƒ“ƒ^[ƒtƒF[ƒX -- -- // - static int GetSizeOfChar( const char* pData, int nDataLen, int nIdx ); //!< Žw’č‚ľ‚˝ˆĘ’u‚Ě•śŽš‚މ˝ƒoƒCƒg•śŽš‚Š‚đ•Ô‚ˇ - static const char* GetCharNext( const char* pData, int nDataLen, const char* pDataCurrent ); //!< ƒ|ƒCƒ“ƒ^‚ĹŽŚ‚ľ‚˝•śŽš‚ĚŽŸ‚É‚ ‚é•śŽš‚ĚˆĘ’u‚đ•Ô‚ľ‚Ü‚ˇ - static const char* GetCharPrev( const char* pData, int nDataLen, const char* pDataCurrent ); //!< ƒ|ƒCƒ“ƒ^‚ĹŽŚ‚ľ‚˝•śŽš‚Ě’ź‘O‚É‚ ‚é•śŽš‚ĚˆĘ’u‚đ•Ô‚ľ‚Ü‚ˇ + // -- -- staticインターフェース -- -- // + static int GetSizeOfChar( const char* pData, int nDataLen, int nIdx ); //!< 指定した位置の文字が何バイト文字かを返す + static const char* GetCharNext( const char* pData, int nDataLen, const char* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します + static const char* GetCharPrev( const char* pData, int nDataLen, const char* pDataCurrent ); //!< ポインタで示した文字の直前にある文字の位置を返します }; #endif /* SAKURA_CNATIVEA_B88E7301_8CD3_4DF8_8750_2FF92F357FA09_H_ */ diff --git a/sakura_core/mem/CNativeT.h b/sakura_core/mem/CNativeT.h index 011e365d2f..7d31fef2a6 100644 --- a/sakura_core/mem/CNativeT.h +++ b/sakura_core/mem/CNativeT.h @@ -1,4 +1,4 @@ -/* +ďťż/* Copyright (C) 2008, kobake This software is provided 'as-is', without any express or implied diff --git a/sakura_core/mem/CNativeW.cpp b/sakura_core/mem/CNativeW.cpp index c967c174ae..b85347710f 100644 --- a/sakura_core/mem/CNativeW.cpp +++ b/sakura_core/mem/CNativeW.cpp @@ -1,10 +1,10 @@ -#include "StdAfx.h" +ďťż#include "StdAfx.h" #include "mem/CNativeW.h" #include "CEol.h" #include "charset/CShiftJis.h" // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ƒRƒ“ƒXƒgƒ‰ƒNƒ^EƒfƒXƒgƒ‰ƒNƒ^ // +// コンストラクタ・デストラクタ // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // CNativeW::CNativeW() #if _DEBUG @@ -21,7 +21,7 @@ CNativeW::CNativeW(const CNativeW& rhs) SetNativeData(rhs); } -//! nDataLen‚Í•śŽš’PˆĘB +//! nDataLenは文字単位。 CNativeW::CNativeW( const wchar_t* pData, int nDataLen ) #if _DEBUG : m_pDebugData((PWCHAR&)_DebugGetPointerRef()) @@ -39,17 +39,17 @@ CNativeW::CNativeW( const wchar_t* pData) } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ƒlƒCƒeƒBƒuÝ’čƒCƒ“ƒ^[ƒtƒF[ƒX // +// ネイティブ設定インターフェース // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é +// バッファの内容を置き換える void CNativeW::SetString( const wchar_t* pData, int nDataLen ) { CNative::SetRawData(pData,nDataLen * sizeof(wchar_t)); } -// ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é +// バッファの内容を置き換える void CNativeW::SetString( const wchar_t* pszData ) { CNative::SetRawData(pszData,wcslen(pszData) * sizeof(wchar_t)); @@ -60,39 +60,39 @@ void CNativeW::SetStringHoldBuffer( const wchar_t* pData, int nDataLen ) CNative::SetRawDataHoldBuffer(pData, nDataLen * sizeof(wchar_t)); } -// ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é +// バッファの内容を置き換える void CNativeW::SetNativeData( const CNativeW& pcNative ) { CNative::SetRawData(pcNative); } -//! (d—vFnDataLen‚Í•śŽš’PˆĘ) ƒoƒbƒtƒ@ƒTƒCƒY‚Ě’˛ŽB•K—v‚ɉž‚ś‚ÄŠg‘傡‚éB +//! (重要:nDataLenは文字単位) バッファサイズの調整。必要に応じて拡大する。 void CNativeW::AllocStringBuffer( int nDataLen ) { CNative::AllocBuffer(nDataLen * sizeof(wchar_t)); } -//! ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚é +//! バッファの最後にデータを追加する void CNativeW::AppendString( const wchar_t* pszData ) { CNative::AppendRawData(pszData,wcslen(pszData) * sizeof(wchar_t)); } -//! ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éBnLength‚Í•śŽš’PˆĘB +//! バッファの最後にデータを追加する。nLengthは文字単位。 void CNativeW::AppendString( const wchar_t* pszData, int nLength ) { CNative::AppendRawData(pszData, nLength * sizeof(wchar_t)); } -//! ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚é +//! バッファの最後にデータを追加する void CNativeW::AppendNativeData( const CNativeW& cmemData ) { CNative::AppendRawData(cmemData.GetStringPtr(), cmemData.GetRawLength()); } -// -- -- char‚Š‚ç‚ĚˆÚs—p -- -- // +// -- -- charからの移行用 -- -- // -//! ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚éBnDataLen‚Í•śŽš’PˆĘB +//! バッファの内容を置き換える。nDataLenは文字単位。 void CNativeW::SetStringOld( const char* pData, int nDataLen ) { int nLen; @@ -101,7 +101,7 @@ void CNativeW::SetStringOld( const char* pData, int nDataLen ) delete[] szTmp; } -//! ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚é +//! バッファの内容を置き換える void CNativeW::SetStringOld( const char* pszData ) { SetStringOld(pszData,strlen(pszData)); @@ -115,7 +115,7 @@ void CNativeW::AppendStringOld( const char* pData, int nDataLen ) delete[] szTmp; } -//! ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éBpszData‚ÍSJISB +//! バッファの最後にデータを追加する。pszDataはSJIS。 void CNativeW::AppendStringOld( const char* pszData ) { AppendStringOld(pszData,strlen(pszData)); @@ -123,10 +123,10 @@ void CNativeW::AppendStringOld( const char* pszData ) // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ƒlƒCƒeƒBƒuŽć“žƒCƒ“ƒ^[ƒtƒF[ƒX // +// ネイティブ取得インターフェース // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// GetAt()‚Ć“Ż‹@”\ +// GetAt()と同機能 wchar_t CNativeW::operator[](int nIndex) const { if( nIndex < GetStringLength() ){ @@ -137,7 +137,7 @@ wchar_t CNativeW::operator[](int nIndex) const } -/* “™‚ľ‚˘“ŕ—e‚Š */ +/* 等しい内容か */ bool CNativeW::IsEqual( const CNativeW& cmem1, const CNativeW& cmem2 ) { if(&cmem1==&cmem2)return true; @@ -159,10 +159,10 @@ bool CNativeW::IsEqual( const CNativeW& cmem1, const CNativeW& cmem2 ) // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// ƒlƒCƒeƒBƒu•ĎŠˇƒCƒ“ƒ^[ƒtƒF[ƒX // +// ネイティブ変換インターフェース // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -//! •śŽš—ń’uŠˇ +//! 文字列置換 void CNativeW::Replace( const wchar_t* pszFrom, const wchar_t* pszTo ) { int nFromLen = wcslen( pszFrom ); @@ -210,19 +210,19 @@ void CNativeW::Replace( const wchar_t* pszFrom, int nFromLen, const wchar_t* psz // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -// staticƒCƒ“ƒ^[ƒtƒF[ƒX // +// staticインターフェース // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // -//! Žw’č‚ľ‚˝ˆĘ’u‚Ě•śŽš‚Şwchar_t‰˝ŒÂ•Ş‚Š‚đ•Ô‚ˇ +//! 指定した位置の文字がwchar_t何個分かを返す CLogicInt CNativeW::GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx ) { if( nIdx >= nDataLen ) return CLogicInt(0); - // ƒTƒƒQ[ƒgƒ`ƒFƒbƒN 2008/7/5 Uchi + // サロゲートチェック 2008/7/5 Uchi if (IsUTF16High(pData[nIdx])) { if (nIdx + 1 < nDataLen && IsUTF16Low(pData[nIdx + 1])) { - // ƒTƒƒQ[ƒgƒyƒA 2ŒÂ•Ş + // サロゲートペア 2個分 return CLogicInt(2); } } @@ -230,23 +230,23 @@ CLogicInt CNativeW::GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx return CLogicInt(1); } -//! Žw’č‚ľ‚˝ˆĘ’u‚Ě•śŽš‚Ş”źŠp‰˝ŒÂ•Ş‚Š‚đ•Ô‚ˇ +//! 指定した位置の文字が半角何個分かを返す CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx ) { - //•śŽš—ń”͈͊O‚Č‚ç 0 + //文字列範囲外なら 0 if( nIdx >= nDataLen ) return CKetaXInt(0); - // ƒTƒƒQ[ƒgƒ`ƒFƒbƒN BMP ˆČŠO‚Í‘SŠpˆľ‚˘ 2008/7/5 Uchi + // サロゲートチェック BMP 以外は全角扱い 2008/7/5 Uchi if (IsUTF16High(pData[nIdx])) { - return CKetaXInt(2); // ‰ź + return CKetaXInt(2); // 䝎 } if (IsUTF16Low(pData[nIdx])) { if (nIdx > 0 && IsUTF16High(pData[nIdx - 1])) { - // ƒTƒƒQ[ƒgƒyƒAi‰şˆĘj + // サロゲートペア(下位) return CKetaXInt(0); } - // ’P“Ɓiƒuƒ[ƒNƒ“ƒyƒAj + // 単独(ブロークンペア) // return CKetaXInt(2); if( IsBinaryOnSurrogate(pData[nIdx]) ) return CKetaXInt(1); @@ -254,40 +254,40 @@ CKetaXInt CNativeW::GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx return CKetaXInt(2); } - //”źŠp•śŽš‚Č‚ç 1 + //半角文字なら 1 if(WCODE::IsHankaku(pData[nIdx]) ) return CKetaXInt(1); - //‘SŠp•śŽš‚Č‚ç 2 + //全角文字なら 2 else return CKetaXInt(2); } -//! Žw’č‚ľ‚˝ˆĘ’u‚Ě•śŽš‚Ě•śŽš•‚đ•Ô‚ˇ +//! 指定した位置の文字の文字幅を返す CHabaXInt CNativeW::GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx ) { - //•śŽš—ń”͈͊O‚Č‚ç 0 + //文字列範囲外なら 0 if( nIdx >= nDataLen ){ return CHabaXInt(0); } - // HACK:‰üsƒR[ƒh‚ɑ΂ľ‚Ä1‚đ•Ô‚ˇ + // HACK:改行コードに対して1を返す if( WCODE::IsLineDelimiter(pData[nIdx], GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol) ){ return CHabaXInt(1); } - // ƒTƒƒQ[ƒgƒ`ƒFƒbƒN + // サロゲートチェック if(IsUTF16High(pData[nIdx]) && nIdx + 1 < nDataLen && IsUTF16Low(pData[nIdx + 1])){ return CHabaXInt(WCODE::CalcPxWidthByFont2(pData + nIdx)); }else if(IsUTF16Low(pData[nIdx]) && 0 < nIdx && IsUTF16High(pData[nIdx - 1])) { - // ƒTƒƒQ[ƒgƒyƒAi‰şˆĘj - return CHabaXInt(0); // •słˆĘ’u + // サロゲートペア(下位) + return CHabaXInt(0); // 不正位置 } return CHabaXInt(WCODE::CalcPxWidthByFont(pData[nIdx])); } -/* ƒ|ƒCƒ“ƒ^‚ĹŽŚ‚ľ‚˝•śŽš‚ĚŽŸ‚É‚ ‚é•śŽš‚ĚˆĘ’u‚đ•Ô‚ľ‚Ü‚ˇ */ -/* ŽŸ‚É‚ ‚é•śŽš‚ރoƒbƒtƒ@‚ĚĹŒă‚ĚˆĘ’u‚đ‰z‚Ś‚éę‡‚Í&pData[nDataLen]‚đ•Ô‚ľ‚Ü‚ˇ */ +/* ポインタで示した文字の次にある文字の位置を返します */ +/* 次にある文字がバッファの最後の位置を越える場合は&pData[nDataLen]を返します */ const wchar_t* CNativeW::GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ) { const wchar_t* pNext = pDataCurrent + 1; @@ -296,7 +296,7 @@ const wchar_t* CNativeW::GetCharNext( const wchar_t* pData, int nDataLen, const return &pData[nDataLen]; } - // ƒTƒƒQ[ƒgƒyƒA‘Ήž 2008/7/6 Uchi + // サロゲートペア対応 2008/7/6 Uchi if (IsUTF16High(*pDataCurrent)) { if (IsUTF16Low(*pNext)) { pNext += 1; @@ -306,8 +306,8 @@ const wchar_t* CNativeW::GetCharNext( const wchar_t* pData, int nDataLen, const return pNext; } -/* ƒ|ƒCƒ“ƒ^‚ĹŽŚ‚ľ‚˝•śŽš‚Ě’ź‘O‚É‚ ‚é•śŽš‚ĚˆĘ’u‚đ•Ô‚ľ‚Ü‚ˇ */ -/* ’ź‘O‚É‚ ‚é•śŽš‚ރoƒbƒtƒ@‚̐擪‚ĚˆĘ’u‚đ‰z‚Ś‚éę‡‚ÍpData‚đ•Ô‚ľ‚Ü‚ˇ */ +/* ポインタで示した文字の直前にある文字の位置を返します */ +/* 直前にある文字がバッファの先頭の位置を越える場合はpDataを返します */ const wchar_t* CNativeW::GetCharPrev( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ) { const wchar_t* pPrev = pDataCurrent - 1; @@ -315,7 +315,7 @@ const wchar_t* CNativeW::GetCharPrev( const wchar_t* pData, int nDataLen, const return pData; } - // ƒTƒƒQ[ƒgƒyƒA‘Ήž 2008/7/6 Uchi + // サロゲートペア対応 2008/7/6 Uchi if (IsUTF16Low(*pPrev)) { if (IsUTF16High(*(pPrev-1))) { pPrev -= 1; @@ -327,7 +327,7 @@ const wchar_t* CNativeW::GetCharPrev( const wchar_t* pData, int nDataLen, const } -//ShiftJIS‚É•ĎŠˇ‚ľ‚Ä•Ô‚ˇ +//ShiftJISに変換して返す const char* CNativeW::GetStringPtrOld() const { return to_achar(GetStringPtr(),GetStringLength()); diff --git a/sakura_core/mem/CNativeW.h b/sakura_core/mem/CNativeW.h index 495a6e0dcb..5ab979c9e9 100644 --- a/sakura_core/mem/CNativeW.h +++ b/sakura_core/mem/CNativeW.h @@ -1,4 +1,4 @@ -/* +ďťż/* Copyright (C) 2008, kobake This software is provided 'as-is', without any express or implied @@ -30,7 +30,7 @@ #include "debug/Debug2.h" //assert -//! •śŽš—ń‚Ö‚ĚŽQĆ‚đŽć“ž‚ˇ‚éƒCƒ“ƒ^[ƒtƒF[ƒX +//! 文字列への参照を取得するインターフェース class IStringRef{ public: virtual const wchar_t* GetPtr() const = 0; @@ -38,7 +38,7 @@ class IStringRef{ }; -//! •śŽš—ń‚Ö‚ĚŽQĆ‚đ•ŰŽ‚ˇ‚éƒNƒ‰ƒX +//! 文字列への参照を保持するクラス class CStringRef : public IStringRef{ public: CStringRef() : m_pData(NULL), m_nDataLen(0) { } @@ -46,7 +46,7 @@ class CStringRef : public IStringRef{ const wchar_t* GetPtr() const{ return m_pData; } int GetLength() const{ return m_nDataLen; } - //########•â• + //########補助 bool IsValid() const{ return m_pData!=NULL; } wchar_t At(int nIndex) const{ assert(nIndex>=0 && nIndex(GetRawPtr()); } - const wchar_t* GetStringPtr(int* pnLength) const //[out]pnLength‚Í•śŽš’PˆĘB + const wchar_t* GetStringPtr(int* pnLength) const //[out]pnLengthは文字単位。 { *pnLength=GetStringLength(); return reinterpret_cast(GetRawPtr()); } #ifdef USE_STRICT_INT - const wchar_t* GetStringPtr(CLogicInt* pnLength) const //[out]pnLength‚Í•śŽš’PˆĘB + const wchar_t* GetStringPtr(CLogicInt* pnLength) const //[out]pnLengthは文字単位。 { int n; const wchar_t* p=GetStringPtr(&n); @@ -115,12 +115,12 @@ class CNativeW : public CNative{ } #endif - //“ÁŽę + //特殊 void _SetStringLength(int nLength) { _GetMemory()->_SetRawLength(nLength*sizeof(wchar_t)); } - //––”ö‚đ1•śŽší‚é + //末尾を1文字削る void Chop() { int n = GetStringLength(); @@ -138,38 +138,38 @@ class CNativeW : public CNative{ // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // ”ť’č // + // 判定 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - //! “Żˆę‚Ě•śŽš—ń‚Č‚çtrue + //! 同一の文字列ならtrue static bool IsEqual( const CNativeW& cmem1, const CNativeW& cmem2 ); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // •ĎŠˇ // + // 変換 // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - void Replace( const wchar_t* pszFrom, const wchar_t* pszTo ); //!< •śŽš—ń’uŠˇ + void Replace( const wchar_t* pszFrom, const wchar_t* pszTo ); //!< 文字列置換 void ReplaceT( const wchar_t* pszFrom, const wchar_t* pszTo ){ Replace( pszFrom, pszTo ); } - void Replace( const wchar_t* pszFrom, int nFromLen, const wchar_t* pszTo, int nToLen ); //!< •śŽš—ń’uŠˇ + void Replace( const wchar_t* pszFrom, int nFromLen, const wchar_t* pszTo, int nToLen ); //!< 文字列置換 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // Œ^ŒŔ’čƒCƒ“ƒ^[ƒtƒF[ƒX // + // 型限定インターフェース // // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // - // Žg—p‚Í‚Ĺ‚Ť‚é‚ž‚ŻT‚Ś‚é‚Ě‚Ş–]‚Ü‚ľ‚˘B - // ‚Đ‚Ć‚Â‚ÍƒI[ƒo[ƒwƒbƒh‚đ—}‚Ś‚éˆÓ–Ą‚ŁB - // ‚ЂƂ‚͕ϊˇ‚É‚ć‚éƒf[ƒ^‘rŽ¸‚đ—}‚Ś‚éˆÓ–Ą‚ŁB + // 使用はできるだけ控えるのが望ましい。 + // ひとつはオーバーヘッドを抑える意味で。 + // ひとつは変換によるデータ喪失を抑える意味で。 //ACHAR - void SetStringOld( const char* pData, int nDataLen ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚éBpData‚ÍSJISBnDataLen‚Í•śŽš’PˆĘB - void SetStringOld( const char* pszData ); //!< ƒoƒbƒtƒ@‚Ě“ŕ—e‚đ’u‚ŤŠˇ‚Ś‚éBpszData‚ÍSJISB - void AppendStringOld( const char* pData, int nDataLen ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éBpszData‚ÍSJISB - void AppendStringOld( const char* pszData ); //!< ƒoƒbƒtƒ@‚ĚĹŒă‚Ƀf[ƒ^‚đ’ljÁ‚ˇ‚éBpszData‚ÍSJISB - const char* GetStringPtrOld() const; //ShiftJIS‚É•ĎŠˇ‚ľ‚Ä•Ô‚ˇ + void SetStringOld( const char* pData, int nDataLen ); //!< バッファの内容を置き換える。pDataはSJIS。nDataLenは文字単位。 + void SetStringOld( const char* pszData ); //!< バッファの内容を置き換える。pszDataはSJIS。 + void AppendStringOld( const char* pData, int nDataLen ); //!< バッファの最後にデータを追加する。pszDataはSJIS。 + void AppendStringOld( const char* pszData ); //!< バッファの最後にデータを追加する。pszDataはSJIS。 + const char* GetStringPtrOld() const; //ShiftJISに変換して返す //WCHAR void SetStringW(const wchar_t* pszData) { return SetString(pszData); } @@ -198,18 +198,18 @@ class CNativeW : public CNative{ #if _DEBUG private: typedef wchar_t* PWCHAR; - PWCHAR& m_pDebugData; //ƒfƒoƒbƒO—pBCMemory‚Ě“ŕ—e‚đwchar_t*Œ^‚ĹƒEƒHƒbƒ`‚ˇ‚é‚˝‚ß‚Ěƒ‚ƒm + PWCHAR& m_pDebugData; //デバッグ用。CMemoryの内容をwchar_t*型でウォッチするためのモノ #endif public: - // -- -- staticƒCƒ“ƒ^[ƒtƒF[ƒX -- -- // - static CLogicInt GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< Žw’č‚ľ‚˝ˆĘ’u‚Ě•śŽš‚Şwchar_t‰˝ŒÂ•Ş‚Š‚đ•Ô‚ˇ + // -- -- staticインターフェース -- -- // + static CLogicInt GetSizeOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< 指定した位置の文字がwchar_t何個分かを返す static CHabaXInt GetHabaOfChar( const wchar_t* pData, int nDataLen, int nIdx ); - static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< Žw’č‚ľ‚˝ˆĘ’u‚Ě•śŽš‚Ş”źŠp‰˝ŒÂ•Ş‚Š‚đ•Ô‚ˇ - static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ƒ|ƒCƒ“ƒ^‚ĹŽŚ‚ľ‚˝•śŽš‚ĚŽŸ‚É‚ ‚é•śŽš‚ĚˆĘ’u‚đ•Ô‚ľ‚Ü‚ˇ - static const wchar_t* GetCharPrev( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ƒ|ƒCƒ“ƒ^‚ĹŽŚ‚ľ‚˝•śŽš‚Ě’ź‘O‚É‚ ‚é•śŽš‚ĚˆĘ’u‚đ•Ô‚ľ‚Ü‚ˇ + static CKetaXInt GetKetaOfChar( const wchar_t* pData, int nDataLen, int nIdx ); //!< 指定した位置の文字が半角何個分かを返す + static const wchar_t* GetCharNext( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の次にある文字の位置を返します + static const wchar_t* GetCharPrev( const wchar_t* pData, int nDataLen, const wchar_t* pDataCurrent ); //!< ポインタで示した文字の直前にある文字の位置を返します - static CKetaXInt GetKetaOfChar( const CStringRef& cStr, int nIdx ) //!< Žw’č‚ľ‚˝ˆĘ’u‚Ě•śŽš‚Ş”źŠp‰˝ŒÂ•Ş‚Š‚đ•Ô‚ˇ + static CKetaXInt GetKetaOfChar( const CStringRef& cStr, int nIdx ) //!< 指定した位置の文字が半角何個分かを返す { return GetKetaOfChar(cStr.GetPtr(), cStr.GetLength(), nIdx); } diff --git a/sakura_core/mem/CRecycledBuffer.cpp b/sakura_core/mem/CRecycledBuffer.cpp index d1a03562c2..0023e402a1 100644 --- a/sakura_core/mem/CRecycledBuffer.cpp +++ b/sakura_core/mem/CRecycledBuffer.cpp @@ -1,2 +1,2 @@ -#include "StdAfx.h" +ďťż#include "StdAfx.h" #include "CRecycledBuffer.h" diff --git a/sakura_core/mem/CRecycledBuffer.h b/sakura_core/mem/CRecycledBuffer.h index aaa4db4124..1ad0a22387 100644 --- a/sakura_core/mem/CRecycledBuffer.h +++ b/sakura_core/mem/CRecycledBuffer.h @@ -1,7 +1,7 @@ -//ˆęŽž“I‚Čƒƒ‚ƒŠƒuƒƒbƒN‚đƒ[ƒe[ƒVƒ‡ƒ“‚ľ‚ÄŽg‚˘‚܂킡‚˝‚ß‚Ěƒ‚ƒm -//Get‚ĹŽć“ž‚ľ‚˝ƒƒ‚ƒŠƒuƒƒbƒN‚́Au‚ ‚é’ö“x‚ĚŠúŠÔvă‘‚Ť‚ł‚ę‚Č‚˘‚ą‚Ć‚Ş•Űá‚ł‚ę‚éB -//‚ť‚́uŠúŠÔv‚Ƃ́AGet‚đŒÄ‚ń‚Ĺ‚Š‚çÄ“xCHAIN_COUNT‰ńAGet‚đŒÄ‚яo‚ˇ‚Ü‚Ĺ‚ĚŠÔ‚Ĺ‚ ‚éB -//Žć“ž‚ľ‚˝ƒƒ‚ƒŠƒuƒƒbƒN‚ÍCRecycledBuffer‚ĚŠÇ—‰ş‚É‚ ‚é‚˝‚߁A‰đ•ú‚ľ‚Ä‚Í‚˘‚Ż‚Č‚˘B +ďťż//一時的なメモリブロックをローテーションして使いまわすためのモノ +//Getで取得したメモリブロックは、「ある程度の期間」上書きされないことが保障される。 +//その「期間」とは、Getを呼んでから再度CHAIN_COUNT回、Getを呼び出すまでの間である。 +//取得したメモリブロックはCRecycledBufferの管理下にあるため、解放してはいけない。 /* Copyright (C) 2008, kobake @@ -29,24 +29,24 @@ #define SAKURA_CRECYCLEDBUFFER_865628A4_D60A_4F2E_8021_EA83D0D438819_H_ class CRecycledBuffer{ -//ƒRƒ“ƒtƒBƒO +//コンフィグ private: - static const int BLOCK_SIZE = 1024; //ƒuƒƒbƒNƒTƒCƒYBƒoƒCƒg’PˆĘB - static const int CHAIN_COUNT = 64; //Ä—˜—p‰Â”\‚ČƒuƒƒbƒN”B + static const int BLOCK_SIZE = 1024; //ブロックサイズ。バイト単位。 + static const int CHAIN_COUNT = 64; //再利用可能なブロック数。 -//ƒRƒ“ƒXƒgƒ‰ƒNƒ^EƒfƒXƒgƒ‰ƒNƒ^ +//コンストラクタ・デストラクタ public: CRecycledBuffer() { m_current=0; } -//ƒCƒ“ƒ^[ƒtƒF[ƒX +//インターフェース public: - //!ˆęŽž“I‚ÉŠm•Ű‚ł‚ę‚˝ƒƒ‚ƒŠƒuƒƒbƒN‚đŽć“žB‚ą‚Ěƒƒ‚ƒŠƒuƒƒbƒN‚đ‰đ•ú‚ľ‚Ä‚Í‚˘‚Ż‚Č‚˘B + //!一時的に確保されたメモリブロックを取得。このメモリブロックを解放してはいけない。 template T* GetBuffer( - size_t* nCount //!< [out] —Ěˆć‚Ě—v‘f”‚đŽó‚ŻŽć‚éBT’PˆĘB + size_t* nCount //!< [out] 領域の要素数を受け取る。T単位。 ) { if(nCount)*nCount=BLOCK_SIZE/sizeof(T); @@ -54,7 +54,7 @@ class CRecycledBuffer{ return reinterpret_cast(m_buf[m_current]); } - //!—Ěˆć‚Ě—v‘f”‚đŽć“žBT’PˆĘ + //!領域の要素数を取得。T単位 template size_t GetMaxCount() const { @@ -62,7 +62,7 @@ class CRecycledBuffer{ } -//ƒƒ“ƒo•Ď” +//メンバ変数 private: BYTE m_buf[CHAIN_COUNT][BLOCK_SIZE]; int m_current; @@ -71,11 +71,11 @@ class CRecycledBuffer{ class CRecycledBufferDynamic{ -//ƒRƒ“ƒtƒBƒO +//コンフィグ private: - static const int CHAIN_COUNT = 64; //Ä—˜—p‰Â”\‚ČƒuƒƒbƒN”B + static const int CHAIN_COUNT = 64; //再利用可能なブロック数。 -//ƒRƒ“ƒXƒgƒ‰ƒNƒ^EƒfƒXƒgƒ‰ƒNƒ^ +//コンストラクタ・デストラクタ public: CRecycledBufferDynamic() { @@ -91,24 +91,24 @@ class CRecycledBufferDynamic{ } } -//ƒCƒ“ƒ^[ƒtƒF[ƒX +//インターフェース public: - //!ˆęŽž“I‚ÉŠm•Ű‚ł‚ę‚˝ƒƒ‚ƒŠƒuƒƒbƒN‚đŽć“žB‚ą‚Ěƒƒ‚ƒŠƒuƒƒbƒN‚đ‰đ•ú‚ľ‚Ä‚Í‚˘‚Ż‚Č‚˘B + //!一時的に確保されたメモリブロックを取得。このメモリブロックを解放してはいけない。 template T* GetBuffer( - size_t nCount //!< [in] Šm•Ű‚ˇ‚é—v‘f”BT’PˆĘB + size_t nCount //!< [in] 確保する要素数。T単位。 ) { m_current = (m_current+1) % CHAIN_COUNT; - //ƒƒ‚ƒŠŠm•Ű + //メモリ確保 if(m_buf[m_current])delete[] m_buf[m_current]; m_buf[m_current]=new BYTE[nCount*sizeof(T)]; return reinterpret_cast(m_buf[m_current]); } -//ƒƒ“ƒo•Ď” +//メンバ変数 private: BYTE* m_buf[CHAIN_COUNT]; int m_current;