⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java_array_template.h

📁 C调用Java的一个例子程序
💻 H
字号:
/* ^_^ 
*
*		Copyright (c) 2006 Hexin
*
*	Description:
*	  TODO:
*	Create:
*		Date			  Time				Author
*	------------------------------------------------
*   2006-3-22           14:05:58			XiaoWei
*/

/* ^_^ 
*	 Location : 
*	 File     : JAVA_Array_Template.h
*	 Version  : 1.0.0.0
*	 Note     : 
*/

#if defined(JNI_ArrayType) && defined(JNI_ElementType) && defined(JNI_SetArrayRegion) && defined(JNI_NewArray) && defined(JNI_GetArrayElements) && defined(JNI_ReleaseArrayElements)
template<>
class JAVA_Array<JNI_ElementType>  : public JAVA_Base
{
public:
	typedef		JNI_ElementType		_ElementType;
private:
	JNI_ArrayType		m_array;
	_ElementType*		m_elems; 
	JNI_Size			m_size;
public:
	
	JAVA_Array()
	{
		getentironment();
		m_size  = -1;
		m_array = JNI_NULL;
		m_elems = JNI_NULL;
	}
	JAVA_Array(JNI_Size _size)
	{
		getentironment();
		createArray(_size);
	}
	
	JAVA_Array(JNI_ArrayType _array)
	{
		getentironment();
		m_size  = 0;
		m_array = _array;
		m_elems = JNI_NULL;
	}
	
	~JAVA_Array()
	{
		destroyArray();
	}
	
	
	bool		  reSize(JNI_Size _rs)
	{
		JNI_Size  __oldSize = m_size;
		if (_rs <= __oldSize) {
			return true;
		}
		JNI_ArrayType _array =getEnv()->JNI_NewArray(_rs);
		if (_array) {
			_getElements();		
			getEnv()->JNI_SetArrayRegion(_array,0,__oldSize,m_elems);	
			destroyArray();
			m_elems = JNI_NULL;
			m_array = _array;		
			m_size = _rs;
			return true;
		}
		return false;
		
	}
	_ElementType  getAt(JNI_Size _index) 
	{
		_checkIndex(_index);
		_getElements();	
		_ElementType _et= m_elems[_index]; 
		return _et;
	}
	
	void  setAt(JNI_Size _index,_ElementType _Value) 
	{
		_checkIndex(_index);
		getEnv()->JNI_SetArrayRegion(m_array,_index,1,&_Value);
		m_elems = JNI_NULL;
	}
	
	_ElementType*  getsAt(JNI_Size _index) 
	{
		_checkIndex(_index);
		_getElements();		
		return  &m_elems[_index];
	}
	
	void  setsAt(JNI_Size _index,_ElementType* _lpValue ,JNI_Size _size) 
	{
		_checkIndex(_index);
		getEnv()->JNI_SetArrayRegion(m_array,_index,_size,_lpValue);
		m_elems = JNI_NULL;
	}
	
	
	bool	createArray(JNI_Size _size)
	{
		JNI_ArrayType _array =getEnv()->JNI_NewArray(_size);
		if (_array) {
			m_size = _size;
			m_elems = JNI_NULL;
			m_array = _array;
			return true;
		}
		m_size = _size;
		m_elems = JNI_NULL;
		m_array = JNI_NULL;
		return false;
		
	}
	
	JNI_Size size() const
	{
		return m_size;
	}
	void	destroyArray()
	{
		if (m_size > 0) {
			
			_getElements();
			getEnv()->JNI_ReleaseArrayElements(m_array,m_elems,JNI_ABORT);
			m_elems  = JNI_NULL;			
			m_size = -1;
			m_array = JNI_NULL;
		}
	}
	
	operator JNI_ArrayType() const 
	{
		return m_array;
	}
	
	JNI_ArrayType getJniArray() const 
	{
		return m_array;
	}
protected:
	
	void	_checkIndex(JNI_Size &index)
	{
		if (index < 0) {
			index = 0;
			return;
		}
		JNI_Size __size = m_size;
		if(index >= __size)
		{
			index = __size-1;
			return;
		}
		
	}
	void    _getElements()
	{
		if (m_elems == JNI_NULL) {
			m_elems = getEnv()->JNI_GetArrayElements(m_array,0);
		}	
	}
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -