1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 19:42:17 +02:00

Member class

This commit is contained in:
Nikolay Pultsin 2012-03-30 21:50:09 +01:00
parent 18e14a29de
commit 266249bd6f
3 changed files with 34 additions and 13 deletions

View file

@ -297,14 +297,13 @@ void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message)
/*
void AndroidUtil::throwBookReadingException(const std::string &resourceId, const ZLFile &file) {
JNIEnv *env = getEnv();
jclass cls = env->FindClass("org/geometerplus/fbreader/bookmodel/BookReadingException");
env->CallStaticVoidMethod(
cls,
Class_BookReadingException->j(),
StaticMethod_BookReadingException_throwForFile,
AndroidUtil::createJavaString(env, resourceId),
AndroidUtil::createJavaFile(env, file.path())
);
// TODO: possible memory leak
// TODO: clear cls & ZLFile object references
// TODO: clear ZLFile object reference
}
*/

View file

@ -33,14 +33,20 @@ JavaClass::~JavaClass() {
myEnv->DeleteGlobalRef(myClass);
}
Constructor::Constructor(const JavaClass &cls, const std::string &signature) : myClass(cls) {
myId = cls.myEnv->GetMethodID(cls.j(), "<init>", signature.c_str());
Member::Member(const JavaClass &cls) : myClass(cls) {
}
Member::~Member() {
}
Constructor::Constructor(const JavaClass &cls, const std::string &signature) : Member(cls) {
myId = env().GetMethodID(jClass(), "<init>", signature.c_str());
}
jobject Constructor::call(...) {
va_list lst;
va_start(lst, this);
jobject obj = myClass.myEnv->NewObjectV(myClass.j(), myId, lst);
jobject obj = env().NewObjectV(jClass(), myId, lst);
va_end(lst);
return obj;
}

View file

@ -40,23 +40,36 @@ private:
JNIEnv *myEnv;
jclass myClass;
friend class Member;
friend class Method;
friend class StaticMethod;
friend class Constructor;
};
class Constructor {
class Member {
protected:
Member(const JavaClass &cls);
JNIEnv &env() const;
jclass jClass() const;
public:
virtual ~Member();
private:
Member(const Member&);
const Member &operator = (const Member&);
private:
const JavaClass &myClass;
};
class Constructor : public Member {
public:
Constructor(const JavaClass &cls, const std::string &signature);
jobject call(...);
private:
Constructor(const Constructor&);
const Constructor &operator = (const Constructor&);
protected:
const JavaClass &myClass;
jmethodID myId;
};
@ -145,4 +158,7 @@ public:
inline jclass JavaClass::j() const { return myClass; }
inline JNIEnv &Member::env() const { return *myClass.myEnv; }
inline jclass Member::jClass() const { return myClass.myClass; }
#endif /* __JNIENVELOPE_H__ */