亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ckeywordsetmgr.cpp

?? 日本的開源編輯器源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
//	$Id: CKeyWordSetMgr.cpp,v 1.9 2005/01/30 16:27:51 Administrator Exp $
/*!	@file
	@brief 強(qiáng)調(diào)キーワード管理

	@author Norio Nakatani
	$Revision: 1.9 $
	
	@date 2000.12.01 MIK binary search
	@date 2004.07.29-2005.01.27 Moca キーワードの可変長(zhǎng)記憶
*/
/*
	Copyright (C) 1998-2001, Norio Nakatani
	Copyright (C) 2000-2001, MIK
	Copyright (C) 2004 Moca

	This software is provided 'as-is', without any express or implied
	warranty. In no event will the authors be held liable for any damages
	arising from the use of this software.

	Permission is granted to anyone to use this software for any purpose, 
	including commercial applications, and to alter it and redistribute it 
	freely, subject to the following restrictions:

		1. The origin of this software must not be misrepresented;
		   you must not claim that you wrote the original software.
		   If you use this software in a product, an acknowledgment
		   in the product documentation would be appreciated but is
		   not required.

		2. Altered source versions must be plainly marked as such, 
		   and must not be misrepresented as being the original software.

		3. This notice may not be removed or altered from any source
		   distribution.
*/
#include "CKeyWordSetMgr.h"
#include <stdlib.h>
#include <malloc.h>
#include "my_icmp.h" // Nov. 29, 2002 genta/moca

//! 1ブロック當(dāng)たりのキーワード數(shù)
static const int nKeyWordSetBlockSize = 50;

//! ブロックサイズで整列
inline int GetAlignmentSize( int nSize )
{
	return (nKeyWordSetBlockSize - 1 + nSize) / nKeyWordSetBlockSize * nKeyWordSetBlockSize;
}

/*!
	@note CKeyWordSetMgrは共有メモリ構(gòu)造體に埋め込まれているため,
	そのままではコンストラクタが動(dòng)かないことに注意.
*/
CKeyWordSetMgr::CKeyWordSetMgr( void )
{
	m_nCurrentKeyWordSetIdx = 0;
	m_nKeyWordSetNum = 0;
	m_nStartIdx[0] = 0;
	m_nStartIdx[1] = 0;
	m_nStartIdx[MAX_SETNUM] = 0;
	return;
}

CKeyWordSetMgr::~CKeyWordSetMgr( void)
{
	m_nKeyWordSetNum = 0;
	return;
}

/*!
	@brief 全キーワードセットの削除と初期化

	キーワードセットのインデックスを全て0とする.
	
	@date 2004.07.29 Moca 可変長(zhǎng)記憶
*/
void CKeyWordSetMgr::ResetAllKeyWordSet( void )
{
	m_nKeyWordSetNum = 0;
	int i;
	for( i = 0; i < MAX_SETNUM+1; i++ ){
		m_nStartIdx[i] = 0;
	}
	for( i = 0; i < MAX_SETNUM; i++ ){
		m_nKeyWordNumArr[MAX_SETNUM] = 0;
	}
}

const CKeyWordSetMgr& CKeyWordSetMgr::operator=( CKeyWordSetMgr& cKeyWordSetMgr )
{
//	int		nDataLen;
//	char*	pData;
//	int		i;
	if( this == &cKeyWordSetMgr ){
		return *this;
	}
	m_nCurrentKeyWordSetIdx = cKeyWordSetMgr.m_nCurrentKeyWordSetIdx;
	m_nKeyWordSetNum = cKeyWordSetMgr.m_nKeyWordSetNum;
	memcpy( m_szSetNameArr, cKeyWordSetMgr.m_szSetNameArr, sizeof( m_szSetNameArr ) );
	memcpy( m_nKEYWORDCASEArr, cKeyWordSetMgr.m_nKEYWORDCASEArr, sizeof( m_nKEYWORDCASEArr ) );
	memcpy( m_nStartIdx, cKeyWordSetMgr.m_nStartIdx, sizeof( m_nStartIdx ) ); // 2004.07.29 Moca
	memcpy( m_nKeyWordNumArr, cKeyWordSetMgr.m_nKeyWordNumArr, sizeof( m_nKeyWordNumArr ) );
	memcpy( m_szKeyWordArr, cKeyWordSetMgr.m_szKeyWordArr, sizeof( m_szKeyWordArr ) );
	memcpy( m_IsSorted, cKeyWordSetMgr.m_IsSorted, sizeof( m_IsSorted ) );	//MIK 2000.12.01 binary search
	return *this;
}




/*! @brief キーワードセットの追加

	@param pszSetName	[in] セット名
	@param nKEYWORDCASE	[in] 大文字小文字の區(qū)別.true:あり, false:無し
	@param nSize		[in] 最初に領(lǐng)域を確保するサイズ.

	@date 2005.01.26 Moca 新規(guī)作成
	@date 2005.01.29 genta サイズ0で作成→reallocするように
*/
BOOL CKeyWordSetMgr::AddKeyWordSet( const char* pszSetName, BOOL nKEYWORDCASE, int nSize )
{
	if( nSize < 0 ) nSize = nKeyWordSetBlockSize;
	if( MAX_SETNUM <= m_nKeyWordSetNum ){
		return FALSE;
	}
	int nIdx = m_nKeyWordSetNum;	//追加位置
	m_nStartIdx[ ++m_nKeyWordSetNum ] = m_nStartIdx[ nIdx ];// サイズ0でセット追加

	if( !KeyWordReAlloc( nIdx, nSize ) ){
		--m_nKeyWordSetNum;	//	キーワードセットの追加をキャンセルする
		return FALSE;
	}
	strcpy( m_szSetNameArr[nIdx], pszSetName );
	m_nKEYWORDCASEArr[nIdx] = nKEYWORDCASE;
	m_nKeyWordNumArr[nIdx] = 0;
	m_IsSorted[nIdx] = 0;	//MIK 2000.12.01 binary search
	return TRUE;
}

/* n番目のセットを削除 */
BOOL CKeyWordSetMgr::DelKeyWordSet( int nIdx )
{
	int		i;
	if( m_nKeyWordSetNum <= nIdx ||
		0 > nIdx
	){
		return FALSE;
	}
	// キーワード領(lǐng)域を開放
	KeyWordReAlloc( nIdx, 0 );
	
	for( i = nIdx; i < m_nKeyWordSetNum - 1; ++i ){
		memcpy( m_szSetNameArr[i], m_szSetNameArr[i + 1], sizeof( m_szSetNameArr[0] ) );
		m_nKEYWORDCASEArr[i] = m_nKEYWORDCASEArr[i + 1];
		m_nKeyWordNumArr[i] = m_nKeyWordNumArr[i + 1];
		m_nStartIdx[i] = m_nStartIdx[i + 1];	//	2004.07.29 Moca 可変長(zhǎng)記憶
		m_IsSorted[i] = m_IsSorted[i+1];	//MIK 2000.12.01 binary search
	}
	m_nKeyWordSetNum--;
	if( m_nKeyWordSetNum <= m_nCurrentKeyWordSetIdx ){
		m_nCurrentKeyWordSetIdx = m_nKeyWordSetNum - 1;
//セットが無くなったとき、m_nCurrentKeyWordSetIdxをわざと-1にするため、コメント化
//		if( 0 > m_nCurrentKeyWordSetIdx ){
//			m_nCurrentKeyWordSetIdx = 0;
//		}
	}
	return TRUE;
}



/*! n番目のセットのセット名を返す

	@param nIdx [in] セット番號(hào) 0~キーワードセット數(shù)-1
*/
const char* CKeyWordSetMgr::GetTypeName( int nIdx )
{
	if( nIdx < 0 || m_nKeyWordSetNum <= nIdx ){
		return NULL;
	}
	return m_szSetNameArr[nIdx];
}

/*! n番目のセットのセット名を再設(shè)定

	@date 2005.01.26 Moca 新規(guī)作成
*/
const char* CKeyWordSetMgr::SetTypeName( int nIdx, const char* name )
{
	if( NULL == name || nIdx < 0 || m_nKeyWordSetNum <= nIdx ){
		return NULL;
	}
	strncpy( m_szSetNameArr[nIdx], name, MAX_SETNAMELEN );
	m_szSetNameArr[nIdx][MAX_SETNAMELEN] = '\0';
	return m_szSetNameArr[nIdx];
}

/* n番目のセットのキーワードの數(shù)を返す */
int CKeyWordSetMgr::GetKeyWordNum( int nIdx )
{
	if( nIdx < 0 || m_nKeyWordSetNum <= nIdx ){
		return 0;
	}
	return m_nKeyWordNumArr[nIdx];
}

/*! n番目のセットのm番目のキーワードを返す

	@param nIdx [in] キーワードセット番號(hào)
	@param nIdx2 [in] キーワード番號(hào)
*/
const char* CKeyWordSetMgr::GetKeyWord( int nIdx, int nIdx2 )
{
	if( nIdx < 0 || m_nKeyWordSetNum <= nIdx ){
		return NULL;
	}
	if( nIdx2 < 0 || m_nKeyWordNumArr[nIdx] <= nIdx2 ){
		return NULL;
	}
	return m_szKeyWordArr[m_nStartIdx[nIdx] + nIdx2];
}

/*! n番目のセットのm番目のキーワードを編集

	@param nIdx [in] キーワードセット番號(hào)
	@param nIdx2 [in] キーワード番號(hào)
	@param pszKeyWord [in] 設(shè)定するキーワード
*/
const char* CKeyWordSetMgr::UpdateKeyWord( int nIdx, int nIdx2, const char* pszKeyWord )
{
	int i;
	if( nIdx < 0 || m_nKeyWordSetNum <= nIdx ){
		return NULL;
	}
	if( nIdx2 < 0 || m_nKeyWordNumArr[nIdx] <= nIdx2 ){
		return NULL;
	}
	/* 0バイトの長(zhǎng)さのキーワードは編集しない */
	if( pszKeyWord[0] == '\0' ){
		return NULL;
	}
	/* 重複したキーワードは編集しない */
	for( i = m_nStartIdx[nIdx]; i < m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]; ++i ){
		if( 0 == strcmp( m_szKeyWordArr[i], pszKeyWord ) ){
			return NULL;
		}
	}
	m_IsSorted[nIdx] = 0;	//MIK 2000.12.01 binary search
	return strcpy( m_szKeyWordArr[m_nStartIdx[nIdx] + nIdx2], pszKeyWord );
}


/*! n番目のセットにキーワードを追加

	@param nIdx [in] セット番號(hào)
	@param pszKeyWord [in] キーワード文字列
	
	@return 0: 成功, 1: セット番號(hào)エラー,2: メモリ確保エラー
		3: キーワード不正,4: キーワード重複

*/
int CKeyWordSetMgr::AddKeyWord( int nIdx, const char* pszKeyWord )
{
	int  i;
	if( m_nKeyWordSetNum <= nIdx ){
		return 1;
	}
// 2004.07.29 Moca
	if( !KeyWordReAlloc( nIdx, m_nKeyWordNumArr[nIdx] + 1 ) ){
		return 2;
	}
//	if( MAX_KEYWORDNUM <= m_nKeyWordNumArr[nIdx] ){
//		return FALSE;
//	}

	/* 0バイトの長(zhǎng)さのキーワードは登録しない */
	if( pszKeyWord[0] == '\0' ){
		return 3;
	}
	/* 重複したキーワードは登録しない */
	for( i = m_nStartIdx[nIdx]; i < m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]; ++i ){
		if( 0 == strcmp( m_szKeyWordArr[i], pszKeyWord ) ){
			return 4;
		}
	}
	/* MAX_KEYWORDLENより長(zhǎng)いキーワードは切り捨てる */
	if( MAX_KEYWORDLEN < strlen( pszKeyWord ) ){
		memcpy( m_szKeyWordArr[m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]], pszKeyWord, MAX_KEYWORDLEN );
		m_szKeyWordArr[m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]][MAX_KEYWORDLEN] = '\0';
	}else{
		strcpy( m_szKeyWordArr[m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]], pszKeyWord );
	}
	m_nKeyWordNumArr[nIdx]++;
	m_IsSorted[nIdx] = 0;	//MIK 2000.12.01 binary search
	return 0;
}


/*! n番目のセットのm番目のキーワードを削除

	@param nIdx [in] キーワードセット番號(hào)
	@param nIdx2 [in] キーワード番號(hào)
*/
int CKeyWordSetMgr::DelKeyWord( int nIdx, int nIdx2 )
{
	if( nIdx < 0 || m_nKeyWordSetNum <= nIdx ){
		return 1;
	}
	if( nIdx2 < 0 ||  m_nKeyWordNumArr[nIdx] <= nIdx2 ){
		return 2;
	}
	if( 0 >= m_nKeyWordNumArr[nIdx]	){
		return 3;	//	登録數(shù)が0なら上の條件で引っかかるのでここには來ない?
	}
	int  i;
	int  endPos = m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx] - 1;
	for( i = m_nStartIdx[nIdx] + nIdx2; i < endPos; ++i ){
		strcpy( m_szKeyWordArr[i], m_szKeyWordArr[i + 1] );
	}
	m_nKeyWordNumArr[nIdx]--;

	// 2005.01.26 Moca 1つずらすだけなので、ソートの狀態(tài)は保持される
	// m_IsSorted[nIdx] = 0;	//MIK 2000.12.01 binary search
	KeyWordReAlloc( nIdx, m_nKeyWordNumArr[nIdx] );	// 2004.07.29 Moca
	return 0;
}

#if 0
/* n番目のセットから指定キーワードをサーチ 無いときは-1を返す */
int CKeyWordSetMgr::SearchKeyWord( int nIdx, const char* pszKeyWord, int nKeyWordLen )
{
	int i;
	if( m_nKEYWORDCASEArr[nIdx] ){	/* キーワードの英大文字小文字區(qū)別 */
		for( i = m_nStartIdx[nIdx]; i < m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]; ++i ){
			if( (int)strlen( m_szKeyWordArr[i] ) == nKeyWordLen ){
				if( 0 == memcmp( m_szKeyWordArr[i], pszKeyWord, nKeyWordLen ) ){
					return i;
				}
			}
		}
	}else{
		for( i = m_nStartIdx[nIdx]; i < m_nStartIdx[nIdx] + m_nKeyWordNumArr[nIdx]; ++i ){
			if( (int)strlen( m_szKeyWordArr[i] ) == nKeyWordLen ){
				if( 0 == memicmp( m_szKeyWordArr[i], pszKeyWord, nKeyWordLen ) ){
					return i;
				}
			}
		}
	}
	return -1;

}
#endif

#if 0
	// 2005.01.29 genta 使われていないようだ
/* 変更狀況を調(diào)査 */
BOOL CKeyWordSetMgr::IsModify( CKeyWordSetMgr& cKeyWordSetMgrNew, BOOL* pnModifyFlagArr )
{
	BOOL	bModifyAll;
	int		i;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线一区二区三区| 九九精品一区二区| 欧美一区二区成人| 国产精品一区在线| 亚洲精品高清在线| 欧美一区二区三区小说| 国产一区亚洲一区| 综合色中文字幕| 欧美一级高清片| 成人性生交大片免费看中文网站| 亚洲美女屁股眼交| 久久只精品国产| 色综合久久中文字幕综合网| 久久国产精品区| 一区二区三区日韩精品| 精品久久久久久久久久久久包黑料 | 91视频免费看| 日本女人一区二区三区| 中文字幕一区免费在线观看| 欧美精品三级在线观看| 99re热这里只有精品视频| 美国欧美日韩国产在线播放| 久久久久久97三级| 91麻豆精品国产91久久久资源速度| 国产一区二区在线看| 亚洲成av人片| 久久久久九九视频| 欧美一区二视频| 色狠狠色噜噜噜综合网| 国产aⅴ综合色| 亚洲国产视频直播| 亚洲欧洲国产日本综合| 2023国产一二三区日本精品2022| 日本精品视频一区二区三区| 高清不卡一区二区在线| 久久超碰97人人做人人爱| 亚洲国产精品久久不卡毛片| 国产精品国产三级国产a| 精品久久久久久久一区二区蜜臀| 精品视频全国免费看| 97成人超碰视| 九九在线精品视频| 久久国产精品免费| 亚洲国产一区二区三区 | 99久久99久久综合| 国产精品综合av一区二区国产馆| 日欧美一区二区| 夜色激情一区二区| 午夜一区二区三区视频| 五月综合激情婷婷六月色窝| 五月天国产精品| 日韩成人精品视频| 激情六月婷婷综合| 国产不卡视频一区二区三区| 成人午夜看片网址| 91啪亚洲精品| 精品视频在线看| 日韩欧美另类在线| 国产日韩欧美高清| 亚洲精品美腿丝袜| 日韩精品亚洲一区| 国内精品自线一区二区三区视频| 成人激情开心网| 欧美三级在线看| 欧美tickling网站挠脚心| 久久久高清一区二区三区| 国产精品久久久久影院亚瑟| 夜夜嗨av一区二区三区网页| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产在线一区二区| 一本大道久久精品懂色aⅴ| 欧美猛男超大videosgay| 精品sm捆绑视频| 亚洲视频一区二区在线| 日韩国产精品大片| 国产成人亚洲精品青草天美| 色综合天天狠狠| 欧美一二三四区在线| 国产精品视频你懂的| 日日欢夜夜爽一区| 成人一区二区三区| 制服丝袜亚洲播放| 国产精品伦理在线| 日日骚欧美日韩| 成人看片黄a免费看在线| 精品视频999| 国产精品欧美综合在线| 日韩极品在线观看| aaa欧美色吧激情视频| 欧美老年两性高潮| 综合久久给合久久狠狠狠97色| 石原莉奈在线亚洲二区| av电影天堂一区二区在线观看| 欧美一区二区三区不卡| 中文字幕一区二区三中文字幕| 美国一区二区三区在线播放| 一本久道久久综合中文字幕| 久久久久久99久久久精品网站| 亚洲高清免费视频| 成人h动漫精品一区二| 精品久久久久久久久久久久久久久久久| 亚洲人成在线观看一区二区| 国产一区二区三区四区在线观看| 欧美日韩中字一区| 国产精品久久一级| 国产一区不卡在线| 欧美一区二区三区日韩| 亚洲永久精品大片| 97久久精品人人爽人人爽蜜臀| 久久夜色精品国产噜噜av| 日韩电影一二三区| 欧美三级资源在线| 一区二区高清视频在线观看| 成人午夜碰碰视频| 国产午夜亚洲精品羞羞网站| 乱一区二区av| 日韩限制级电影在线观看| 香蕉av福利精品导航| 色欧美88888久久久久久影院| 国产精品国模大尺度视频| 粉嫩在线一区二区三区视频| 久久久亚洲午夜电影| 麻豆久久久久久久| 日韩一级黄色大片| 免费观看成人av| 91精品国产91久久久久久最新毛片 | 26uuu色噜噜精品一区| 美女脱光内衣内裤视频久久影院| 欧美日韩中文另类| 亚洲一区二区三区自拍| av在线一区二区| 国产精品看片你懂得| 成人av网站免费观看| 亚洲国产精品99久久久久久久久| 国产一区二区三区香蕉| 国产性色一区二区| 国产精品一区二区91| 久久午夜羞羞影院免费观看| 国产在线播放一区二区三区| 夫妻av一区二区| 亚洲色图视频网| av成人免费在线| 日韩免费高清av| 欧美国产成人在线| 欧美三级中文字| 国产精品综合二区| 一区二区在线观看视频在线观看| 欧美男男青年gay1069videost| 国产乱码一区二区三区| 亚洲激情图片qvod| 日韩精品一区二区三区视频| 99久久夜色精品国产网站| 日韩vs国产vs欧美| 亚洲欧美中日韩| 日韩一区二区电影网| 91视频.com| 九色综合国产一区二区三区| 亚洲综合av网| 国产日韩v精品一区二区| 欧美日韩在线不卡| 国产福利精品一区二区| 午夜亚洲国产au精品一区二区| 久久精子c满五个校花| 欧美在线|欧美| 国产精品一区二区在线看| 亚洲国产精品一区二区久久恐怖片| www一区二区| 欧美日韩不卡在线| 成人网在线免费视频| 久久99精品久久久久久| 亚洲一区二区在线播放相泽| 中文字幕免费不卡| 日韩欧美一区二区免费| 欧美亚洲禁片免费| 成人h版在线观看| 国产精品综合久久| 捆绑变态av一区二区三区| 亚洲午夜电影在线观看| 亚洲欧洲日韩一区二区三区| 亚洲精品一区二区三区影院| 制服.丝袜.亚洲.另类.中文 | 欧美一区日本一区韩国一区| 色哟哟在线观看一区二区三区| 国产高清在线精品| 精品一区二区免费| 奇米色777欧美一区二区| 亚洲午夜私人影院| 国产精品黄色在线观看| 国产日韩欧美在线一区| 精品999在线播放| 欧美电影免费观看高清完整版在 | 欧美亚州韩日在线看免费版国语版| 国产suv精品一区二区三区| 久久99精品久久久久久动态图 | 亚洲午夜免费福利视频| 中文字幕一区二区视频| 国产精品无人区| 国产精品久久久久婷婷| 欧美国产乱子伦| 中文字幕第一区综合|