本文整理汇总了C++中CNativeW::swap方法的典型用法代码示例。如果您正苦于以下问题:C++ CNativeW::swap方法的具体用法?C++ CNativeW::swap怎么用?C++ CNativeW::swap使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CNativeW
的用法示例。
在下文中一共展示了CNativeW::swap方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LoadKeyMacro
//.........这里部分代码省略.........
cmemWork.Replace( L"\\n", L"\n" );
cmemWork.Replace( L"\\t", L"\t" );
{
// \uXXXX 置換
size_t nLen = cmemWork.GetStringLength();
size_t nBegin = 0;
const wchar_t* p = cmemWork.GetStringPtr();
CNativeW cmemTemp;
for( size_t n = 0; n < nLen; n++ ){
if( n + 1 < nLen && p[n] == L'\\' && p[n+1] == L'u' ){
size_t k;
for( k = n + 2; k < nLen && k < n + 2 + 4
&& (WCODE::Is09(p[k])
|| (L'a' <= p[k] && p[k] <= L'f')
|| (L'A' <= p[k] && p[k] <= L'F')); k++ ){
}
cmemTemp.AppendString( p + nBegin, n - nBegin );
nBegin = k;
if( 0 < k - n - 2 ){
wchar_t hex[5];
wcsncpy( hex, &p[n+2], k - n - 2 );
hex[k - n - 2] = L'\0';
wchar_t* pEnd = NULL;
wchar_t c = static_cast<wchar_t>(wcstol(hex, &pEnd, 16));
cmemTemp.AppendString( &c, 1 );
}
n = k - 1;
}
}
if( nBegin != 0 ){
if( 0 < nLen - nBegin ){
cmemTemp.AppendString( p + nBegin, nLen - nBegin );
}
cmemWork.swap( cmemTemp );
}
}
cmemWork.Replace( L"\\\1", L"\\" ); // 一時置換を\に戻す(最後でないといけない)
macro->AddStringParam( cmemWork.GetStringPtr(), cmemWork.GetStringLength() ); // 引数を文字列として追加
}
else if ( Is09(szLine[i]) || szLine[i] == L'-' ){ // 数字で始まったら数字列だ(-記号も含む)。
// Jun. 16, 2002 genta プロトタイプチェック
// Jun. 27, 2002 genta 余分な引数を無視するよう,VT_EMPTYを許容する.
if( type != VT_I4 &&
type != VT_EMPTY){
::MYMESSAGEBOX(
NULL,
MB_OK | MB_ICONSTOP | MB_TOPMOST,
MACRO_ERROR_TITLE,
LS(STR_ERR_DLGKEYMACMGR6),
line,
i + 1,
szFuncName,
nArgs + 1
);
m_nReady = false;
break;
}
nBgn = nEnd = i; // nBgnは引数の先頭の文字
// 行末の検出のため,ループ回数を1増やした
for( i = nBgn + 1; i <= nLineLen; ++i ){ // 最後の文字+1までスキャン
if( Is09(szLine[i]) ){ // まだ数値
// ++i;
continue;
}
else {
nEnd = i; // 数字の最後の文字
示例2: ReplaceData
//.........这里部分代码省略.........
nWorkPos = pArg->sDelRange.GetFrom().x;
}else{
nWorkPos = 0;
}
/* 現在行の削除データ長を調べる */
if( i == pArg->sDelRange.GetTo().y ){
nWorkLen = pArg->sDelRange.GetTo().x - nWorkPos;
}else{
nWorkLen = nLineLen - nWorkPos; // 2002/2/10 aroka CMemory変更
}
if( 0 == nWorkLen ){
/* 前の行へ */
goto prev_line;
}
/* 改行も削除するんかぃのぉ・・・? */
if( EOL_NONE != pCDocLine->GetEol() &&
nWorkPos + nWorkLen > nLineLen - pCDocLine->GetEol().GetLen() // 2002/2/10 aroka CMemory変更
){
/* 削除する長さに改行も含める */
nWorkLen = nLineLen - nWorkPos; // 2002/2/10 aroka CMemory変更
}
/* 行全体の削除 */
if( nWorkLen >= nLineLen ){ // 2002/2/10 aroka CMemory変更
/* 削除した行の総数 */
++(pArg->nDeletedLineNum);
/* 行オブジェクトの削除、リスト変更、行数-- */
if( pArg->pcmemDeleted ){
CLineData tmp;
pArg->pcmemDeleted->push_back(tmp);
CLineData& delLine = pArg->pcmemDeleted->back();
delLine.cmemLine.swap(pCDocLine->_GetDocLineData()); // CDocLine書き換え
delLine.nSeq = CModifyVisitor().GetLineModifiedSeq(pCDocLine);
}
m_pcDocLineMgr->DeleteLine( pCDocLine );
pCDocLine = NULL;
}
/* 次の行と連結するような削除 */
else if( nWorkPos + nWorkLen >= nLineLen ){ // 2002/2/10 aroka CMemory変更
if( pArg->pcmemDeleted ){
if( pCDocLineNext && 0 == pArg->pcmemDeleted->size() ){
// 1行以内の行末削除のときだけ、次の行のseqが保存されないので必要
// 2014.01.07 最後が改行の範囲を最後が改行のデータで置換した場合を変更
if( !bLastEOLReplace ){
CLineData tmp;
pArg->pcmemDeleted->push_back(tmp);
CLineData& delLine = pArg->pcmemDeleted->back();
delLine.cmemLine.SetString(L"");
delLine.nSeq = CModifyVisitor().GetLineModifiedSeq(pCDocLineNext);
}
}
CLineData tmp;
pArg->pcmemDeleted->push_back(tmp);
CLineData& delLine = pArg->pcmemDeleted->back();
delLine.cmemLine.SetString(&pLine[nWorkPos], nWorkLen);
delLine.nSeq = CModifyVisitor().GetLineModifiedSeq(pCDocLine);
}
/* 次の行がある */
if( pCDocLineNext ){
/* 次の行のデータを最後に追加 */
// 改行を削除するような置換
int nNewLen = nWorkPos + pCDocLineNext->GetLengthWithEOL() + nInsLen;
if( nWorkLen <= nWorkPos && nLineLen <= nNewLen + 10 ){