Mercurial > hg > orthanc-java
annotate CodeGeneration/CppNativeSDK.mustache @ 37:14af12f73fb5
added CodeGeneration/README.txt
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 02 Jul 2024 17:05:56 +0200 |
parents | 15dc698243ac |
children |
rev | line source |
---|---|
0 | 1 /** |
18 | 2 * SPDX-FileCopyrightText: 2023-2024 Sebastien Jodogne, UCLouvain, Belgium |
0 | 3 * SPDX-License-Identifier: GPL-3.0-or-later |
4 */ | |
5 | |
6 /** | |
7 * Java plugin for Orthanc | |
18 | 8 * Copyright (C) 2023-2024 Sebastien Jodogne, UCLouvain, Belgium |
0 | 9 * |
10 * This program is free software: you can redistribute it and/or | |
11 * modify it under the terms of the GNU General Public License as | |
12 * published by the Free Software Foundation, either version 3 of the | |
13 * License, or (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, but | |
16 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 * General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
22 **/ | |
23 | |
24 | |
8
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
25 // WARNING: Auto-generated file. Do not modify it by hand. |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
26 |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
27 #include "JavaBytes.h" |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
28 #include "JavaEnvironment.h" |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
29 #include "JavaString.h" |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
30 #include "OrthancBytes.h" |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
31 #include "OrthancString.h" |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
32 |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
33 #include <orthanc/OrthancCPlugin.h> |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
34 |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
35 #include <stdexcept> |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
36 |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
37 extern OrthancPluginContext* context_; |
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
38 |
0 | 39 {{#functions}} |
40 | |
41 JNIEXPORT {{return.c_type}} JNI_{{c_function}}(JNIEnv* env, jobject sdkObject{{#class_name}}, jlong self{{/class_name}}{{#args}}, {{c_type}} {{name}}{{/args}}) | |
42 { | |
43 try | |
44 { | |
45 {{#args}} | |
46 {{#convert_string}} | |
47 JavaString c_{{name}}(env, {{name}}); | |
48 {{/convert_string}} | |
49 {{#convert_bytes}} | |
50 JavaBytes c_{{name}}(env, {{name}}); | |
51 {{/convert_bytes}} | |
52 {{/args}} | |
53 | |
54 {{#return.is_void}} | |
55 {{c_function}}(context_ | |
56 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
57 {{#args}}, {{c_accessor}}{{/args}}); | |
58 {{/return.is_void}} | |
59 | |
60 {{#return.is_exception}} | |
61 OrthancPluginErrorCode code = {{c_function}}(context_ | |
62 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
63 {{#args}}, {{c_accessor}}{{/args}}); | |
64 if (code != OrthancPluginErrorCode_Success) | |
65 { | |
5 | 66 JavaEnvironment::ThrowOrthancException(env, code); |
0 | 67 } |
68 {{/return.is_exception}} | |
69 | |
70 {{#return.is_number}} | |
71 return {{c_function}}(context_ | |
72 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
73 {{#args}}, {{c_accessor}}{{/args}}); | |
74 {{/return.is_number}} | |
75 | |
76 {{#return.is_static_string}} | |
77 const char* s = {{c_function}}(context_ | |
78 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
79 {{#args}}, {{c_accessor}}{{/args}}); | |
80 if (s == NULL) | |
81 { | |
5 | 82 JavaEnvironment::ThrowOrthancException(env, OrthancPluginErrorCode_Plugin); |
0 | 83 return NULL; |
84 } | |
85 else | |
86 { | |
87 return env->NewStringUTF(s); | |
88 } | |
89 {{/return.is_static_string}} | |
90 | |
91 {{#return.is_dynamic_string}} | |
92 OrthancString s({{c_function}}(context_ | |
93 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
94 {{#args}}, {{c_accessor}}{{/args}})); | |
95 if (s.GetValue() == NULL) | |
96 { | |
5 | 97 JavaEnvironment::ThrowOrthancException(env, OrthancPluginErrorCode_Plugin); |
0 | 98 return NULL; |
99 } | |
100 else | |
101 { | |
102 jstring t = env->NewStringUTF(s.GetValue()); | |
103 if (t == NULL) | |
104 { | |
5 | 105 JavaEnvironment::ThrowOrthancException(env, OrthancPluginErrorCode_NotEnoughMemory); |
0 | 106 return NULL; |
107 } | |
108 else | |
109 { | |
110 return t; | |
111 } | |
112 } | |
113 {{/return.is_dynamic_string}} | |
114 | |
115 {{#return.is_bytes}} | |
116 OrthancBytes b; | |
117 OrthancPluginErrorCode code = {{c_function}}(context_, b.GetMemoryBuffer() | |
118 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
119 {{#args}}, {{c_accessor}}{{/args}}); | |
120 if (code == OrthancPluginErrorCode_Success) | |
121 { | |
122 jbyteArray answer = env->NewByteArray(b.GetSize()); | |
123 if (answer == NULL) | |
124 { | |
5 | 125 JavaEnvironment::ThrowOrthancException(env, OrthancPluginErrorCode_NotEnoughMemory); |
0 | 126 return NULL; |
127 } | |
128 else | |
129 { | |
130 env->SetByteArrayRegion(answer, 0, b.GetSize(), reinterpret_cast<const jbyte*>(b.GetData())); | |
131 return answer; | |
132 } | |
133 } | |
134 else | |
135 { | |
5 | 136 JavaEnvironment::ThrowOrthancException(env, code); |
0 | 137 return NULL; |
138 } | |
139 {{/return.is_bytes}} | |
140 | |
141 {{#return.is_object}} | |
142 {{return.class_name}}* answer = {{c_function}}(context_ | |
143 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
144 {{#args}}, {{c_accessor}}{{/args}}); | |
145 if (answer == NULL) | |
146 { | |
5 | 147 JavaEnvironment::ThrowOrthancException(env, OrthancPluginErrorCode_Plugin); |
0 | 148 return 0; |
149 } | |
150 else | |
151 { | |
152 return reinterpret_cast<intptr_t>(answer); | |
153 } | |
154 {{/return.is_object}} | |
155 | |
156 {{#return.is_enumeration}} | |
157 return {{c_function}}(context_ | |
158 {{#class_name}}, reinterpret_cast<{{class_name}}*>(static_cast<intptr_t>(self)){{/class_name}} | |
159 {{#args}}, {{c_accessor}}{{/args}}); | |
160 {{/return.is_enumeration}} | |
161 } | |
162 catch (std::runtime_error& e) | |
163 { | |
5 | 164 JavaEnvironment::ThrowOrthancException(env, e.what()); |
0 | 165 {{#return.default_value}}return {{return.default_value}};{{/return.default_value}} |
166 } | |
167 catch (...) | |
168 { | |
5 | 169 JavaEnvironment::ThrowOrthancException(env, OrthancPluginErrorCode_Plugin); |
0 | 170 {{#return.default_value}}return {{return.default_value}};{{/return.default_value}} |
171 } | |
172 } | |
173 | |
174 {{/functions}} | |
175 | |
8
26c08ff926a3
added warning about auto-generated files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
5
diff
changeset
|
176 void JNI_LoadNatives(std::vector<JNINativeMethod>& methods) |
0 | 177 { |
178 methods.clear(); | |
179 {{#functions}} | |
180 | |
181 {{#java_signature}} | |
182 methods.push_back((JNINativeMethod) { | |
183 const_cast<char*>("{{c_function}}"), | |
184 const_cast<char*>("{{java_signature}}"), | |
185 (void*) JNI_{{c_function}} | |
186 }); | |
187 {{/java_signature}} | |
188 {{/functions}} | |
189 } |