📄 java_string.cpp
字号:
// JAVA_String.cpp: implementation of the JAVA_String class.
//
//////////////////////////////////////////////////////////////////////
#include "../header/JAVA_String.h"
#include "../header/JAVA_VM.h"
#include <limits.h>
#include <Windows.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
JAVA_String::JAVA_String()
{
__init();
}
JAVA_String::~JAVA_String()
{
__release();
}
JAVA_String::JAVA_String(const JAVA_String& _string)
{
__init();
LPJTCHAR __lpData = _string.m_lpData;
_setdata(__lpData);
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
_lpStringData->addRef();
}
JAVA_String::JAVA_String(const JNI_String& _string)
{
JNI_Env * __lpEnv = JAVA_VM::getInstance()->getEnv();
const JNI_Char * __lpChar = __lpEnv->GetStringChars(_string,0);
JNI_Int __len = __lpEnv->GetStringLength(_string);
__init();
#ifdef _UNICODE
__s_copy(__lpChar,__len);
#else
long __strLen = __len*2+1;
__assign(__strLen );
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
LPJTCHAR __lpBuffer = _lpStringData->data();
int n = ::WideCharToMultiByte(CP_ACP, 0, __lpChar, __len, __lpBuffer,
__strLen, NULL, NULL);
__lpBuffer[n] = '\0';
_lpStringData->setDataLength(n);
#endif
}
JAVA_String::JAVA_String(LPJTCHAR _lp)
{
__init();
__s_copy(_lp);
}
LPJTCHAR& JAVA_String::_getdata()
{
return m_lpData;
}
void JAVA_String::_setdata(const LPJTCHAR _lp)
{
m_lpData = _lp;
}
LPJTCHAR JAVA_String::getStringFromJni(JNI_Env* _lpEnv,JNI_String _jnistring)
{
const JNI_Char * __lpChar = _lpEnv->GetStringChars(_jnistring,0);
#ifdef _UNICODE
return const_cast<LPJTCHAR>(__lpChar);
#else
return 0;
#endif
}
LPJTCHAR JAVA_String::getStringFromJni(JNI_String _jnistring)
{
JNI_Env * __lpEnv = JAVA_VM::getInstance()->getEnv();
LPJTCHAR __lpChar = JAVA_String::getStringFromJni(__lpEnv,_jnistring);
return __lpChar;
}
/* ^_^
*
* Funtcion Type : Class JAVA_String Member Function
* Funtcion Name : __release
* Return Type :
void
*
* No Parameter
*
* Note:
* TODO
*
* Create :
* Date Time Author
* ------------------------------------------------
* 2006-3-28 15:33:20 XiaoWei
*/
void JAVA_String::__release()
{
JAVA_StringData::release(_getdata());
__releaseJniString();
}
/* ^_^
*
* Funtcion Type : Class JAVA_String Member Function
* Funtcion Name : __assign
* Return Type : void
*
* Parameter 1 : long _len
*
* Note:
* TODO
*
* Create :
* Date Time Author
* ------------------------------------------------
* 2006-3-28 15:33:38 XiaoWei
*/
void JAVA_String::__assign(long _len)
{
if (_len <= 0) {
__init();
}else{
m_lpData = JAVA_StringData::assign(_len);
}
}
void JAVA_String::__assignAndCopy(LPJTCHAR _string)
{
long __len = _strlen(_string);;
if (__len <= 0) {
__init();
}else{
m_lpData = JAVA_StringData::assign(__len);
JAVA_StringData::string_copy(_getdata(),_string,__len);
__setChange();
}
}
/* ^_^
*
* Funtcion Type : Class JAVA_String Member Function
* Funtcion Name : __init
* Return Type : void
*
* No Parameter
*
* Note:
* 内部调用
*
* Create :
* Date Time Author
* ------------------------------------------------
* 2006-3-28 15:26:50 XiaoWei
*/
void JAVA_String::__init()
{
m_lpData = (LPJTCHAR)&__defStringData;
m_JniString = JNI_NULL;
m_isChange = e_haschange;
}
void JAVA_String::__s_copy(LPJCTCHAR _lp)
{
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
_lpStringData->string_copy(_getdata(),_lp);
__setChange();
}
void JAVA_String::__s_copy(LPJCTCHAR _lp,long _l)
{
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
_lpStringData->string_copy(_getdata(),_lp,_l);
__setChange();
}
/* ^_^
*
* Funtcion Type : Class JAVA_String Member Function
* Funtcion Name : getLocalString
* Return Type : LPJTCHAR
*
* No Parameter
*
* Note:
* TODO
*
* Create :
* Date Time Author
* ------------------------------------------------
* 2006-3-28 17:19:32 XiaoWei
*/
LPJTCHAR JAVA_String::getLocalString()
{
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
LPJTCHAR __lpString = _lpStringData->data();
return __lpString;
}
JNI_String JAVA_String::getJniString()
{
__createJniString();
return m_JniString;
}
void JAVA_String::__releaseJniString()
{
if (m_JniString != JNI_NULL) {
JNI_Env * __lpEnv = JAVA_VM::getInstance()->getEnv();
if (__lpEnv) {
const JNI_Char * __lpChar = __lpEnv->GetStringChars(m_JniString,0);
__lpEnv->ReleaseStringChars(m_JniString,__lpChar);
__setChange();
}
}
}
void JAVA_String::__createJniString()
{
JNI_Env * __lpEnv = JAVA_VM::getInstance()->getEnv();
if (__lpEnv) {
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
if (__isChange() || m_JniString == JNI_NULL) {
__releaseJniString();
#ifdef _UNICODE
m_JniString = __lpEnv->NewString(_lpStringData->data(),_lpStringData->getDataLength());
__setNoChange();
#else
INT _wcharSize = _lpStringData->getDataLength();
JNI_Char* buffer = new JNI_Char[_wcharSize];
JAVA_StringData::_LPBufferType __lpBuffer = (JAVA_StringData::_LPBufferType)_lpStringData->data();
long __len = ::MultiByteToWideChar(CP_ACP,0,(LPJTCHAR)__lpBuffer,
_lpStringData->getDataLength(),buffer,_wcharSize);
m_JniString = __lpEnv->NewString(buffer,__len);
delete [] buffer;
__setNoChange();
#endif
}
}
}
JAVA_String& JAVA_String::operator = (JAVA_String & _string)
{
if (this != &_string) {
__release();
LPJTCHAR __lpData = _string._getdata();
_setdata(__lpData);
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
_lpStringData->addRef();
__setChange();
}
return *this;
}
JAVA_String& JAVA_String::operator = (const LPJTCHAR _string)
{
if (_string) {
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
__release();
__assignAndCopy(_string);
__setChange();
}
return *this;
}
JAVA_String& JAVA_String::operator = (const JNI_String& _string)
{
if (_string) {
JNI_Env * __lpEnv = JAVA_VM::getInstance()->getEnv();
const JNI_Char * __lpChar = __lpEnv->GetStringChars(_string,0);
JNI_Int __len = __lpEnv->GetStringLength(_string);
__init();
#ifdef _UNICODE
__s_copy(__lpChar,__len);
#else
long __strLen = __len*2+1;
__assign(__strLen );
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
LPJTCHAR __lpBuffer = _lpStringData->data();
int n = ::WideCharToMultiByte(CP_ACP, 0, __lpChar, __len, __lpBuffer,
__strLen, NULL, NULL);
__lpBuffer[n] = '\0';
_lpStringData->setDataLength(n);
#endif
__setChange();
}
return *this;
}
bool JAVA_String::isEmpty()
{
JAVA_StringData * _lpStringData = _ToStringData(_getdata());
return _lpStringData->getDataLength() == 0L;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -