diff options
Diffstat (limited to 'subversion/bindings/javahl/native/VersionExtended.cpp')
-rw-r--r-- | subversion/bindings/javahl/native/VersionExtended.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/subversion/bindings/javahl/native/VersionExtended.cpp b/subversion/bindings/javahl/native/VersionExtended.cpp new file mode 100644 index 0000000..1dc47db --- /dev/null +++ b/subversion/bindings/javahl/native/VersionExtended.cpp @@ -0,0 +1,98 @@ +/** + * @copyright + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + * ==================================================================== + * @endcopyright + * + * @file VersionExtended.cpp + * @brief Implementation of the VersionExtended class + */ + +#include "JNIUtil.h" +#include "VersionExtended.h" + +const VersionExtended * +VersionExtended::getCppObject(jobject jthis) +{ + if (!jthis) + return NULL; + + static jfieldID fid = 0; + jlong cppAddr = SVNBase::findCppAddrForJObject( + jthis, &fid, JAVA_PACKAGE"/types/VersionExtended"); + return (cppAddr == 0 ? NULL : reinterpret_cast<VersionExtended *>(cppAddr)); +} + +namespace { +static jobject getWrapperAddress(jobject jthat, volatile jfieldID *fid) +{ + JNIEnv *const env = JNIUtil::getEnv(); + if (!*fid) + { + *fid = env->GetFieldID(env->GetObjectClass(jthat), "wrapper", + "L"JAVA_PACKAGE"/types/VersionExtended;"); + if (JNIUtil::isJavaExceptionThrown()) + { + *fid = 0; + return 0; + } + } + + jobject jthis = env->GetObjectField(jthat, *fid); + if (JNIUtil::isJavaExceptionThrown()) + return 0; + return jthis; +} +} // anonymous namespace + +const VersionExtended * +VersionExtended::getCppObjectFromLinkedLib(jobject jthat) +{ + static volatile jfieldID fid; + return getCppObject(getWrapperAddress(jthat, &fid)); +} + +const VersionExtended * +VersionExtended::getCppObjectFromLoadedLib(jobject jthat) +{ + static volatile jfieldID fid; + return getCppObject(getWrapperAddress(jthat, &fid)); +} + +const VersionExtended * +VersionExtended::getCppObjectFromLinkedLibIterator(jobject jthat) +{ + static volatile jfieldID fid; + return getCppObject(getWrapperAddress(jthat, &fid)); +} + +const VersionExtended * +VersionExtended::getCppObjectFromLoadedLibIterator(jobject jthat) +{ + static volatile jfieldID fid; + return getCppObject(getWrapperAddress(jthat, &fid)); +} + +VersionExtended::~VersionExtended() {} + +void VersionExtended::dispose(jobject jthis) +{ + static jfieldID fid = 0; + SVNBase::dispose(jthis, &fid, JAVA_PACKAGE"/types/VersionExtended"); +} |