📄 java_stringdata.cpp
字号:
#include "../header/JAVA_StringData.h"
#include "../header/JAVA_Debug.h"
#include <string.h>
/* ^_^ {{{ Remark Begin By XiaoWei 2006-3-28 15:11:03 ----*/
/*
*/
long JAVA_StringData::getRef()
{
return m_nRefs;
}
void JAVA_StringData::addRef()
{
if (&__defStringData != this) {
++m_nRefs;
}
}
void JAVA_StringData::subRef()
{
if (&__defStringData != this) {
--m_nRefs;
}
}
long JAVA_StringData::getDataLength()
{
return m_nDataLength;
}
void JAVA_StringData::setDataLength(long _l)
{
m_nDataLength = _l;
}
long JAVA_StringData::getStringLength()
{
return m_nStringLength;
}
void JAVA_StringData::setStringLength(long _l)
{
m_nStringLength = _l;
}
long JAVA_StringData::getAssignLength()
{
return m_nAssignLength ;
}
void JAVA_StringData::setAssignLength(long _l)
{
m_nAssignLength = _l;
}
LPJTCHAR JAVA_StringData::data()
{
return (LPJTCHAR)(this+1);
}
/* ^_^ --- Remark End By XiaoWei 2006-3-28 15:11:03 }}}--*/
/* ^_^
*
* Funtcion Type : Class JAVA_StringData Member Function
* Funtcion Name : assign
* Return Type : wchar_t*
*
* Parameter 1 : long _strl
*
* Note:
* chief assign memory
*
* Create :
* Date Time Author
* ------------------------------------------------
* 2006-3-28 15:05:42 XiaoWei
*/
LPJTCHAR JAVA_StringData::assign(long _strl)
{
_LPBufferType _ret = _LPBufferType();
long __nAllocLength = 0;
#ifndef _DEBUG
switch(_strl) {
case 64:
__nAllocLength = 64 + g_StrExLen ;
break;
case 128:
__nAllocLength = 128 + g_StrExLen ;
break;
case 256:
__nAllocLength = 256 + g_StrExLen ;
break;
case 512:
__nAllocLength = 512 + g_StrExLen ;
break;
default:
__nAllocLength = _strl + g_StrExLen ;
break;
}
#else
__nAllocLength = _strl + g_StrExLen ;
#endif
_ret = new _BufferType[__nAllocLength];
JAVA_DEBUGVIEW3(_JAVA_TEXT("JAVA_StringData::assign :%d, addr : %p!"),__nAllocLength,_ret);
JAVA_ASSERT(_ret);
memset(_ret,0,__nAllocLength);
JAVA_StringData* __lpData = (JAVA_StringData*)_ret;
__lpData->m_nRefs = 1;
__lpData->m_nDataLength = _strl;
__lpData->m_nAssignLength = __nAllocLength;
__lpData->m_nStringLength = -1;
return (LPJTCHAR)_ret;
}
void JAVA_StringData::release(LPJTCHAR& _lpdata)
{
if ((long)_lpdata == (long)&__defStringData) {
return;
}
JAVA_StringData * __lp = _ToStringData(_lpdata);
if (__lp->getRef() == 1L) {//only one ref delete it
delete [] ((_BufferType*)_lpdata);
JAVA_DEBUGVIEW2(_JAVA_TEXT("JAVA_StringData::release addr : %p!"),_lpdata);
_lpdata = (LPJTCHAR)&__defStringData;
}else if (__lp->getRef() > 1L) {
__lp->subRef();
}
}
/* ^_^
*
* Funtcion Type : Class JAVA_StringData Member Function
* Funtcion Name : string_copy
* Return Type : void
*
* Parameter 1 : LPJTCHAR _lp
*
* Note:
* TODO
*
* Create :
* Date Time Author
* ------------------------------------------------
* 2006-3-28 15:48:44 XiaoWei
*/
void JAVA_StringData::string_copy(LPJTCHAR &_lpdata,LPJCTCHAR _lp)
{
long __len = _strlen(_lp);
string_copy(_lpdata,_lp,__len);
}
/* ^_^
*
* Funtcion Type : Globle Function
* Funtcion Name : string_copy
* Return Type : void
*
* Parameter 1 : LPJTCHAR _lp
* Parameter 2 : long _size
*
* Note:
* TODO
*
* Create :
* Date Time Author
* ------------------------------------------------
* 2006-3-28 16:22:57 XiaoWei
*/
void JAVA_StringData::string_copy(LPJTCHAR &_lpdata,LPJCTCHAR _lp,long _size)
{
JAVA_StringData * __lpStringData = _ToStringData(_lpdata);
LPJTCHAR __lpRet = LPJTCHAR();
LPJTCHAR __lpDest = LPJTCHAR();
if (__lpStringData->m_nRefs <= 1L) {
if (__lpStringData->m_nDataLength >= _size) {
__lpDest = __lpStringData->data();
__lpRet = (LPJTCHAR)_lpdata;
}else{//need re assign
release(_lpdata);
LPJTCHAR __lpNew = assign(_size);
__lpDest = _ToStringData(__lpNew)->data();
__lpRet = __lpNew;
}
}else{
release(_lpdata);
LPJTCHAR __lpNew = assign(_size);
__lpDest = _ToStringData(__lpNew)->data();
__lpRet = __lpNew;
}
_strcpy(__lpDest,_lp);
__lpStringData->setStringLength(_size);
__lpDest[_size] = '\0';/* ^_^ -- By XiaoWei 2006-3-29-- *///
_lpdata = __lpRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -