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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tstring.cpp

?? TFixedAlloc類是一個非常不錯的使用與Linux和windows跨平臺的內存分配工具
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "TString.h"
#include <memory.h>
	
int T_afxInitData[] = { -1, 0, 0, 0 };	
TStringData* T_afxDataNil = (TStringData*)&T_afxInitData;
TLPCTSTR T_afxPchNil = (TLPCTSTR)(((TBYTE*)&T_afxInitData)+sizeof(TStringData));
const TString& TAfxGetEmptyString()
{ 
	return *(TString*)&T_afxPchNil; 
}

char TafxChNil = '\0';

// constructs empty TString
TString::TString()
{
	Init();
}

// copy constructor
TString::TString(const TString& stringSrc)
{
	assert(stringSrc.GetData()->nRefs != 0); //ASSERT->assert
	if (stringSrc.GetData()->nRefs >= 0)
	{
		assert(stringSrc.GetData() != T_afxDataNil); //ASSERT->assert
		m_pchData = stringSrc.m_pchData;
		//InterlockedIncrement(&GetData()->nRefs);
		GetData()->nRefs++; //要求加鎖???
	}
	else
	{
		Init();
		*this = stringSrc.m_pchData;
	}
}

// from a single character
TString::TString( char ch, int nLength ) //Param2-nRepeat
{
	Init();
	if (nLength >= 1)
	{
		AllocBuffer(nLength);
//#ifdef _UNICODE
//		for (int i = 0; i < nLength; i++)
//			m_pchData[i] = ch;
//#else
		memset(m_pchData, ch, nLength);
//#endif
	}
}

// from an ANSI string (converts to TCHAR)
TString::TString( TLPCTSTR lpsz )
{
	Init();
	//if (lpsz != NULL && HIWORD(lpsz) == NULL)
	//{
	//	UINT nID = LOWORD((DWORD)lpsz);
	//	if (!LoadString(nID))
	//		TRACE1("Warning: implicit LoadString(%u) failed\n", nID);
	//}
	//else
	{
		int nLen = SafeStrlen(lpsz);
		if (nLen != 0)
		{
			AllocBuffer(nLen);
			memcpy(m_pchData, lpsz, nLen*sizeof(char));
		}
	}
}	

// subset of characters from an ANSI string (converts to TCHAR)
TString::TString(TLPCSTR lpch, int nLength)
{
	Init();
	if (nLength != 0)
	{
		//ASSERT(AfxIsValidAddress(lpch, nLength, FALSE)); //檢查指針的有效性
		assert(lpch!=NULL);
		AllocBuffer(nLength);
		memcpy(m_pchData, lpch, nLength*sizeof(char));
	}
}

// clear contents to empty
void TString::Empty()
{
	if (GetData()->nDataLength == 0)
		return;
	if (GetData()->nRefs >= 0)
		Release();
	else
		*this = &TafxChNil;
	assert(GetData()->nDataLength == 0);
	assert(GetData()->nRefs < 0 || GetData()->nAllocLength == 0);
}

// set a single character at zero-based index
void TString::SetAt(int nIndex, char ch)
{
	assert(nIndex >= 0);
	assert(nIndex < GetData()->nDataLength);

	CopyBeforeWrite();
	m_pchData[nIndex] = ch;
}

// overloaded assignment=======================

// ref-counted copy from another CString
const TString& TString::operator=(const TString& stringSrc)
{
	if (m_pchData != stringSrc.m_pchData)
	{
		if ((GetData()->nRefs < 0 && GetData() != T_afxDataNil) ||
			stringSrc.GetData()->nRefs < 0)
		{
			// actual copy necessary since one of the strings is locked
			AssignCopy(stringSrc.GetData()->nDataLength, stringSrc.m_pchData);
		}
		else
		{
			// can just copy references around
			Release();
			assert(stringSrc.GetData() != T_afxDataNil);
			m_pchData = stringSrc.m_pchData;
			//InterlockedIncrement(&GetData()->nRefs);
			GetData()->nRefs++; //修改之前加鎖
		}
	}
	return *this;
}

// set string content to single character
const TString& TString::operator=(char ch)
{
	AssignCopy(1, &ch);
	return *this;
}

// copy string content from ANSI string (converts to TCHAR)
const TString& TString::operator=(TLPCSTR lpsz)
{
	//assert(lpsz == NULL || AfxIsValidString(lpsz));
	AssignCopy(SafeStrlen(lpsz), lpsz);
	return *this;
}

// string concatenation==========================

// concatenate from another CString
const TString& TString::operator+=(const TString& string)
{
	ConcatInPlace(string.GetData()->nDataLength, string.m_pchData);
	return *this;
}

// concatenate a single character
const TString& TString::operator+=(char ch)
{
	ConcatInPlace(1, &ch);
	return *this;
}

// concatenate a UNICODE character after converting it to TCHAR
const TString& TString::operator+=(TLPCTSTR lpsz)
{
	//ASSERT(lpsz == NULL || AfxIsValidString(lpsz));
	ConcatInPlace(SafeStrlen(lpsz), lpsz);
	return *this;
}

//////////////////////////////////////////////////////////////////////////////
// concatenation

// NOTE: "operator+" is done as friend functions for simplicity
//      There are three variants:
//          CString + CString
// and for ? = TCHAR, LPCTSTR
//          CString + ?
//          ? + CString

TString operator+(const TString& string1,const TString& string2)
{
	TString s;
	s.ConcatCopy(string1.GetData()->nDataLength, string1.m_pchData,
		string2.GetData()->nDataLength, string2.m_pchData);
	return s;
}

TString operator+(const TString& string1, char ch)
{
	TString s;
	s.ConcatCopy(string1.GetData()->nDataLength, string1.m_pchData, 1, &ch);
	return s;
}

TString operator+(char ch, const TString& string)
{
	TString s;
	s.ConcatCopy(1, &ch, string.GetData()->nDataLength, string.m_pchData);
	return s;
}

TString operator+(const TString& string, TLPCTSTR lpsz)
{
	//ASSERT(lpsz == NULL || AfxIsValidString(lpsz));
	TString s;
	s.ConcatCopy(string.GetData()->nDataLength, string.m_pchData,
		TString::SafeStrlen(lpsz), lpsz);
	return s;
}

TString operator+(TLPCTSTR lpsz, const TString& string)
{
	//ASSERT(lpsz == NULL || AfxIsValidString(lpsz));
	TString s;
	s.ConcatCopy(TString::SafeStrlen(lpsz), lpsz, string.GetData()->nDataLength,
		string.m_pchData);
	return s;
}

// simple sub-string extraction==================================

// return nCount characters starting at zero-based nFirst
TString TString::Mid(int nFirst, int nCount) const
{
	// out-of-bounds requests return sensible things
	if (nFirst < 0)
		nFirst = 0;
	if (nCount < 0)
		nCount = 0;

	if (nFirst + nCount > GetData()->nDataLength)
		nCount = GetData()->nDataLength - nFirst;
	if (nFirst > GetData()->nDataLength)
		nCount = 0;

	assert(nFirst >= 0);
	assert(nFirst + nCount <= GetData()->nDataLength);

	// optimize case of returning entire string
	if (nFirst == 0 && nFirst + nCount == GetData()->nDataLength)
		return *this;

	TString dest;
	AllocCopy(dest, nCount, nFirst, 0);
	return dest;
}

// return all characters starting at zero-based nFirst
TString TString::Mid(int nFirst) const
{
	return Mid(nFirst, GetData()->nDataLength - nFirst);
}

// return first nCount characters in string
TString TString::Left(int nCount) const
{
	if (nCount < 0)
		nCount = 0;
	if (nCount >= GetData()->nDataLength)
		return *this;

	TString dest;
	AllocCopy(dest, nCount, 0, 0);
	return dest;
}

// return nCount characters from end of string
TString TString::Right(int nCount) const
{
	if (nCount < 0)
		nCount = 0;
	if (nCount >= GetData()->nDataLength)
		return *this;

	TString dest;
	AllocCopy(dest, nCount, GetData()->nDataLength-nCount, 0);
	return dest;
}

//  characters from beginning that are also in passed string
// strspn equivalent
TString TString::SpanIncluding(TLPCTSTR lpszCharSet) const
{
	//ASSERT(AfxIsValidString(lpszCharSet));
	//return Left(_tcsspn(m_pchData, lpszCharSet));
	return TString("");
}
// characters from beginning that are not also in passed string
// strcspn equivalent
TString TString::SpanExcluding(TLPCTSTR lpszCharSet) const
{
	//ASSERT(AfxIsValidString(lpszCharSet));
	//return Left(_tcscspn(m_pchData, lpszCharSet));
	return TString("");
}

// upper/lower/reverse conversion===================
// NLS aware conversion to uppercase
void TString::MakeUpper()	//等待改造???
{
	CopyBeforeWrite();
	//_tcsupr(m_pchData);
}

// NLS aware conversion to lowercase
void TString::MakeLower()	//等待改造???
{
	CopyBeforeWrite();
	//_tcslwr(m_pchData);
}

// reverse string right-to-left
void TString::MakeReverse()	//等待改造???
{
	CopyBeforeWrite();
	//_tcsrev(m_pchData);
}

// trimming whitespace (either side)==============================
// remove whitespace starting from right edge
void TString::TrimRight()
{
	// find beginning of trailing spaces by starting at beginning (DBCS aware)
return;
/*	CopyBeforeWrite();
	TLPTSTR lpsz = m_pchData;
	TLPTSTR lpszLast = NULL;

	while (*lpsz != '\0')
	{
		if (_istspace(*lpsz))
		{
			if (lpszLast == NULL)
				lpszLast = lpsz;
		}
		else
			lpszLast = NULL;
		lpsz = _tcsinc(lpsz);
	}

	if (lpszLast != NULL)
	{
		// truncate at trailing space start
		*lpszLast = '\0';
		GetData()->nDataLength = lpszLast - m_pchData;
	}*/
}

// remove whitespace starting from left side
void TString::TrimLeft()
{
	// find first non-space character
return;
/*	CopyBeforeWrite();
	TLPCTSTR lpsz = m_pchData;

	while (_istspace(*lpsz))
		lpsz = _tcsinc(lpsz);

	if (lpsz != m_pchData)
	{
		// fix up data and length
		int nDataLength = GetData()->nDataLength - (lpsz - m_pchData);
		memmove(m_pchData, lpsz, (nDataLength+1)*sizeof(TCHAR));
		GetData()->nDataLength = nDataLength;
	}
	*/
}

	// trimming anything (either side)=======

// remove continuous occurrences of chTarget starting from right
void TString::TrimRight(char chTarget)
{
	// find beginning of trailing matches
	// by starting at beginning (DBCS aware)
return;
/*	CopyBeforeWrite();
	LPTSTR lpsz = m_pchData;
	LPTSTR lpszLast = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国女主播一区| 欧美喷潮久久久xxxxx| 欧美午夜免费电影| 精品第一国产综合精品aⅴ| 亚洲精品国产无天堂网2021| 美女网站一区二区| 色综合久久88色综合天天6| 久久人人爽人人爽| 日韩影视精彩在线| 91亚洲精品乱码久久久久久蜜桃| 欧美草草影院在线视频| 亚洲最大成人综合| 懂色av中文字幕一区二区三区| 欧美日韩一区精品| 亚洲免费在线电影| 成人精品高清在线| 26uuu亚洲综合色| 日韩一区二区三区精品视频| 色网综合在线观看| 亚洲精品免费看| 久久久蜜桃精品| 久久精品国产一区二区三区免费看 | 国产网红主播福利一区二区| 日本网站在线观看一区二区三区| 欧美亚男人的天堂| 亚洲美女淫视频| 日本道免费精品一区二区三区| 国产精品午夜在线| 成人深夜视频在线观看| 久久久精品国产免大香伊 | 精品处破学生在线二十三| 亚洲午夜久久久| 欧美性大战xxxxx久久久| 亚洲综合图片区| 欧美日韩不卡在线| 日韩电影在线一区| 欧美一区二区高清| 狠狠色丁香久久婷婷综合_中| 欧美成人一区二区| 精品一区二区在线免费观看| 精品少妇一区二区三区在线播放| 国产盗摄一区二区| 国产亚洲一本大道中文在线| 国产精品亚洲人在线观看| 亚洲国产精品精华液2区45| 成人av资源在线| 亚洲免费观看在线观看| 欧美日韩一区二区在线观看视频| 丝袜国产日韩另类美女| 欧美一区三区二区| 国产伦精品一区二区三区免费 | 国产精品对白交换视频| 一本色道亚洲精品aⅴ| 香蕉加勒比综合久久| 欧美一区二区三区免费视频| 国产一区二区三区蝌蚪| 中文字幕一区二区5566日韩| 在线观看91视频| 另类小说视频一区二区| 国产精品视频第一区| 欧美三日本三级三级在线播放| 丝袜亚洲另类欧美| 欧美激情一区不卡| 欧美三级三级三级| 国产很黄免费观看久久| 亚洲一级电影视频| 久久嫩草精品久久久精品| 色噜噜狠狠色综合中国| 免费欧美在线视频| 成人免费小视频| 日韩欧美一二三区| 色综合久久久久| 国产成人三级在线观看| 亚洲高清在线视频| 国产欧美视频一区二区| 欧美日韩国产一级二级| 处破女av一区二区| 视频一区欧美精品| 亚洲欧美一区二区三区国产精品 | 国产精品嫩草99a| 91精品国产免费久久综合| 成人一区二区三区| 日本中文字幕一区二区视频 | 久久精品在线观看| 欧美日韩一区二区三区视频 | 国产一区二区在线视频| 亚洲午夜久久久| 国产精品久久久久久久久久久免费看 | 亚洲电影你懂得| 国产精品乱码久久久久久| 日韩三级在线观看| 欧美在线观看一区| 99精品久久99久久久久| 国产精品中文字幕日韩精品| 青娱乐精品在线视频| 亚洲最大的成人av| 亚洲欧美国产高清| 中文字幕欧美激情一区| 精品久久久久av影院| 欧美高清性hdvideosex| 色综合天天做天天爱| 粉嫩一区二区三区性色av| 精品中文字幕一区二区小辣椒| 午夜精品福利一区二区三区蜜桃| 综合久久久久久| 国产精品乱码人人做人人爱 | 日韩电影在线免费看| 亚洲国产日韩a在线播放性色| 亚洲人成影院在线观看| 中文字幕电影一区| 国产欧美一区二区精品婷婷| 久久无码av三级| 精品国产伦一区二区三区观看体验| 日韩一区二区精品葵司在线| 欧美一区二区视频在线观看2020 | 国产精品传媒视频| 国产精品区一区二区三| 中文字幕av资源一区| 国产女主播一区| 国产女人18水真多18精品一级做| 欧美成人一级视频| 久久久久久免费网| 国产欧美日韩三区| 国产精品不卡在线观看| 亚洲欧美日本韩国| 亚洲午夜久久久| 六月丁香婷婷久久| 粉嫩欧美一区二区三区高清影视| 成人免费毛片嘿嘿连载视频| 91影院在线免费观看| 欧洲国产伦久久久久久久| 欧美欧美午夜aⅴ在线观看| 日韩欧美中文字幕制服| 国产亚洲视频系列| 亚洲黄色小说网站| 天天影视色香欲综合网老头| 亚洲动漫第一页| 91蜜桃在线观看| av电影天堂一区二区在线 | 99麻豆久久久国产精品免费优播| 成人中文字幕电影| 91豆麻精品91久久久久久| 欧美三级乱人伦电影| 精品福利一二区| 18欧美亚洲精品| 琪琪一区二区三区| 国产成人三级在线观看| 在线亚洲人成电影网站色www| 欧美精品一级二级三级| 久久天堂av综合合色蜜桃网| 一区二区三区在线视频观看| 日日欢夜夜爽一区| 春色校园综合激情亚洲| 欧美日韩综合在线免费观看| 国产亚洲欧美一区在线观看| 亚洲一区二区av在线| 国产精品一色哟哟哟| 在线精品亚洲一区二区不卡| 精品国产不卡一区二区三区| 亚洲少妇屁股交4| 国产一区二区三区四区五区美女 | 成人网男人的天堂| 欧美日韩精品福利| 国产欧美日产一区| 美女一区二区三区在线观看| 色综合久久久久久久久久久| 久久久久久久久久久99999| 亚洲超碰精品一区二区| 99国产精品一区| 久久久久久99久久久精品网站| 亚洲在线视频一区| 成+人+亚洲+综合天堂| 91精品免费在线观看| 一级精品视频在线观看宜春院 | 色8久久精品久久久久久蜜| 日韩午夜激情免费电影| 一区二区三区国产精华| 成人高清在线视频| 久久久久99精品一区| 久久综合综合久久综合| 欧美人xxxx| 亚洲综合色在线| 99视频精品免费视频| 国产日韩影视精品| 国产精品一二三在| 欧美大胆一级视频| 日本不卡免费在线视频| 欧美高清性hdvideosex| 性做久久久久久久免费看| 一本久道久久综合中文字幕| 国产精品久久久久久亚洲伦| 高清成人在线观看| 久久精品人人做人人爽97| 精品一区精品二区高清| 日韩一级高清毛片| 免费人成在线不卡| 日韩你懂的电影在线观看| 日本亚洲最大的色成网站www| 91福利精品第一导航| 亚洲成a人片在线不卡一二三区|