1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
/*****************************************************************************
Copyright 2004 Steve Ménard
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*****************************************************************************/
#ifndef _JPPOBJECTTYPE_H_
#define _JPPOBJECTTYPE_H_
class JPObjectType : public JPType
{
protected :
JPObjectType(JPTypeName::ETypes type, const JPTypeName& objectType) :
m_Type(JPTypeName::fromType(type)),
m_ObjectTypeName(objectType)
{
}
virtual ~JPObjectType()
{
}
public :
virtual const JPTypeName& getName() const
{
return m_Type;
}
virtual const JPTypeName& getObjectType() const
{
return m_ObjectTypeName;
}
virtual bool isObjectType() const
{
return true;
}
virtual HostRef* getStaticValue(jclass c, jfieldID fid, JPTypeName& tgtType);
virtual void setStaticValue(jclass c, jfieldID fid, HostRef* val);
virtual HostRef* getInstanceValue(jobject c, jfieldID fid, JPTypeName& tgtType);
virtual void setInstanceValue(jobject c, jfieldID fid, HostRef* val);
virtual HostRef* asHostObjectFromObject(jvalue val);
virtual jobject convertToJavaObject(HostRef* obj);
virtual HostRef* invokeStatic(jclass, jmethodID, jvalue*);
virtual HostRef* invoke(jobject, jclass clazz, jmethodID, jvalue*);
virtual jarray newArrayInstance(int size);
virtual vector<HostRef*> getArrayRange(jarray, int start, int length);
virtual void setArrayRange(jarray, int start, int length, vector<HostRef*>& vals);
virtual HostRef* getArrayItem(jarray, int ndx);
virtual void setArrayItem(jarray, int ndx, HostRef* val);
virtual PyObject* getArrayRangeToSequence(jarray, int start, int length)
{
RAISE(JPypeException, "not impled for void*");
}
virtual void setArrayRange(jarray, int start, int len, PyObject*) {
RAISE(JPypeException, "not impled for void*");
}
virtual HostRef* convertToDirectBuffer(HostRef* src);
virtual bool isSubTypeOf(const JPType& other) const;
protected :
virtual jclass getClass() const = 0;
private :
JPTypeName m_Type;
JPTypeName m_ObjectTypeName;
};
class JPStringType : public JPObjectType
{
public :
JPStringType() : JPObjectType(JPTypeName::_string, JPTypeName::fromSimple("java.lang.String"))
{
}
virtual ~JPStringType()
{
}
protected :
virtual jclass getClass() const;
public : // JPType implementation
virtual HostRef* asHostObject(jvalue val);
virtual EMatchType canConvertToJava(HostRef* obj);
virtual jvalue convertToJava(HostRef* obj);
};
#endif // _JPPOBJECTTYPE_H_
|