PPL Configured Java Language Interface  0.12.1
ppl_java_globals.cc
Go to the documentation of this file.
00001 /* PPL Java interface: domain-independent functions.
00002    Copyright (C) 2001-2010 Roberto Bagnara <bagnara@cs.unipr.it>
00003    Copyright (C) 2010-2012 BUGSENG srl (http://bugseng.com)
00004 
00005 This file is part of the Parma Polyhedra Library (PPL).
00006 
00007 The PPL is free software; you can redistribute it and/or modify it
00008 under the terms of the GNU General Public License as published by the
00009 Free Software Foundation; either version 3 of the License, or (at your
00010 option) any later version.
00011 
00012 The PPL is distributed in the hope that it will be useful, but WITHOUT
00013 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00015 for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with this program; if not, write to the Free Software Foundation,
00019 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
00020 
00021 For the most up-to-date information see the Parma Polyhedra Library
00022 site: http://bugseng.com/products/ppl/ . */
00023 
00024 #include "ppl_java_common.defs.hh"
00025 #include "parma_polyhedra_library_Artificial_Parameter.h"
00026 #include "parma_polyhedra_library_Artificial_Parameter_Sequence.h"
00027 #include "parma_polyhedra_library_Bounded_Integer_Type_Overflow.h"
00028 #include "parma_polyhedra_library_Bounded_Integer_Type_Representation.h"
00029 #include "parma_polyhedra_library_Bounded_Integer_Type_Width.h"
00030 #include "parma_polyhedra_library_By_Reference.h"
00031 #include "parma_polyhedra_library_Coefficient.h"
00032 #include "parma_polyhedra_library_Complexity_Class.h"
00033 #include "parma_polyhedra_library_Congruence.h"
00034 #include "parma_polyhedra_library_Congruence_System.h"
00035 #include "parma_polyhedra_library_Constraint.h"
00036 #include "parma_polyhedra_library_Constraint_System.h"
00037 #include "parma_polyhedra_library_Degenerate_Element.h"
00038 #include "parma_polyhedra_library_Generator.h"
00039 #include "parma_polyhedra_library_Generator_System.h"
00040 #include "parma_polyhedra_library_Generator_Type.h"
00041 #include "parma_polyhedra_library_Grid_Generator.h"
00042 #include "parma_polyhedra_library_Grid_Generator_System.h"
00043 #include "parma_polyhedra_library_Grid_Generator_Type.h"
00044 #include "parma_polyhedra_library_IO.h"
00045 #include "parma_polyhedra_library_Linear_Expression.h"
00046 #include "parma_polyhedra_library_Linear_Expression_Coefficient.h"
00047 #include "parma_polyhedra_library_Linear_Expression_Difference.h"
00048 #include "parma_polyhedra_library_Linear_Expression_Sum.h"
00049 #include "parma_polyhedra_library_Linear_Expression_Times.h"
00050 #include "parma_polyhedra_library_Linear_Expression_Unary_Minus.h"
00051 #include "parma_polyhedra_library_Linear_Expression_Variable.h"
00052 #include "parma_polyhedra_library_MIP_Problem.h"
00053 #include "parma_polyhedra_library_MIP_Problem_Status.h"
00054 #include "parma_polyhedra_library_Optimization_Mode.h"
00055 #include "parma_polyhedra_library_Pair.h"
00056 #include "parma_polyhedra_library_Parma_Polyhedra_Library.h"
00057 #include "parma_polyhedra_library_Partial_Function.h"
00058 #include "parma_polyhedra_library_PIP_Problem.h"
00059 #include "parma_polyhedra_library_PIP_Problem_Status.h"
00060 #include "parma_polyhedra_library_PIP_Decision_Node.h"
00061 #include "parma_polyhedra_library_PIP_Solution_Node.h"
00062 #include "parma_polyhedra_library_PIP_Tree_Node.h"
00063 #include "parma_polyhedra_library_Poly_Con_Relation.h"
00064 #include "parma_polyhedra_library_Poly_Gen_Relation.h"
00065 #include "parma_polyhedra_library_PPL_Object.h"
00066 #include "parma_polyhedra_library_Relation_Symbol.h"
00067 #include "parma_polyhedra_library_Variable.h"
00068 #include "parma_polyhedra_library_Variables_Set.h"
00069 
00070 using namespace Parma_Polyhedra_Library;
00071 using namespace Parma_Polyhedra_Library::Interfaces::Java;
00072 
00073 JNIEXPORT void JNICALL
00074 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_initialize_1library
00075 (JNIEnv* env, jclass /* ppl_class */) {
00076   initialize();
00077   cached_classes.init_cache(env);
00078 }
00079 
00080 JNIEXPORT void JNICALL
00081 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_finalize_1library
00082 (JNIEnv* env, jclass /* ppl_class */) {
00083   cached_classes.clear_cache(env);
00084   finalize();
00085 }
00086 
00087 
00088 JNIEXPORT void JNICALL
00089 Java_parma_1polyhedra_1library_By_1Reference_initIDs
00090 (JNIEnv* env, jclass j_by_ref_class) {
00091   jfieldID fID;
00092   fID = env->GetFieldID(j_by_ref_class, "obj", "Ljava/lang/Object;");
00093   CHECK_RESULT_ASSERT(env, fID);
00094   cached_FMIDs.By_Reference_obj_ID = fID;
00095   jmethodID mID;
00096   mID = env->GetMethodID(j_by_ref_class, "<init>", "(Ljava/lang/Object;)V");
00097   CHECK_RESULT_ASSERT(env, mID);
00098   cached_FMIDs.By_Reference_init_ID = mID;
00099 }
00100 
00101 JNIEXPORT jint JNICALL
00102 Java_parma_1polyhedra_1library_Coefficient_bits(JNIEnv*, jclass) {
00103   return PPL_COEFFICIENT_BITS;
00104 }
00105 
00106 JNIEXPORT void JNICALL
00107 Java_parma_1polyhedra_1library_Coefficient_initIDs
00108 (JNIEnv* env, jclass j_coeff_class) {
00109   jfieldID fID;
00110   fID = env->GetFieldID(j_coeff_class, "value", "Ljava/math/BigInteger;");
00111   CHECK_RESULT_ASSERT(env, fID);
00112   cached_FMIDs.Coefficient_value_ID = fID;
00113   jmethodID mID;
00114   mID = env->GetMethodID(j_coeff_class, "<init>", "(Ljava/lang/String;)V");
00115   CHECK_RESULT_ASSERT(env, mID);
00116   cached_FMIDs.Coefficient_init_from_String_ID = mID;
00117   mID = env->GetMethodID(j_coeff_class, "toString", "()Ljava/lang/String;");
00118   CHECK_RESULT_ASSERT(env, mID);
00119   cached_FMIDs.Coefficient_toString_ID = mID;
00120   // Boolean.
00121   mID = env->GetStaticMethodID(cached_classes.Boolean, "valueOf",
00122                                "(Z)Ljava/lang/Boolean;");
00123   CHECK_RESULT_ASSERT(env, mID);
00124   cached_FMIDs.Boolean_valueOf_ID = mID;
00125   // Integer.
00126   mID = env->GetStaticMethodID(cached_classes.Integer, "valueOf",
00127                                "(I)Ljava/lang/Integer;");
00128   CHECK_RESULT_ASSERT(env, mID);
00129   cached_FMIDs.Integer_valueOf_ID = mID;
00130   mID = env->GetMethodID(cached_classes.Integer, "intValue", "()I");
00131   CHECK_RESULT_ASSERT(env, mID);
00132   cached_FMIDs.Integer_intValue_ID = mID;
00133   // Long.
00134   mID = env->GetStaticMethodID(cached_classes.Long, "valueOf",
00135                                "(J)Ljava/lang/Long;");
00136   CHECK_RESULT_ASSERT(env, mID);
00137   cached_FMIDs.Long_valueOf_ID = mID;
00138   mID = env->GetMethodID(cached_classes.Long, "longValue", "()J");
00139   CHECK_RESULT_ASSERT(env, mID);
00140   cached_FMIDs.Long_longValue_ID = mID;
00141 }
00142 
00143 JNIEXPORT void JNICALL
00144 Java_parma_1polyhedra_1library_Complexity_1Class_initIDs
00145 (JNIEnv* env, jclass j_complexity_class) {
00146   jmethodID mID = env->GetMethodID(j_complexity_class, "ordinal", "()I");
00147   CHECK_RESULT_ASSERT(env, mID);
00148   cached_FMIDs.Complexity_Class_ordinal_ID = mID;
00149 }
00150 
00151 JNIEXPORT void JNICALL
00152 Java_parma_1polyhedra_1library_Congruence_initIDs
00153 (JNIEnv* env, jclass j_congruence_class) {
00154   jfieldID fID;
00155   fID = env->GetFieldID(j_congruence_class, "mod",
00156                         "Lparma_polyhedra_library/Coefficient;");
00157   CHECK_RESULT_ASSERT(env, fID);
00158   cached_FMIDs.Congruence_mod_ID = fID;
00159   fID = env->GetFieldID(j_congruence_class, "lhs",
00160                         "Lparma_polyhedra_library/Linear_Expression;");
00161   CHECK_RESULT_ASSERT(env, fID);
00162   cached_FMIDs.Congruence_lhs_ID = fID;
00163   fID = env->GetFieldID(j_congruence_class, "rhs",
00164                         "Lparma_polyhedra_library/Linear_Expression;");
00165   CHECK_RESULT_ASSERT(env, fID);
00166   cached_FMIDs.Congruence_rhs_ID = fID;
00167   jmethodID mID;
00168   mID = env->GetMethodID(j_congruence_class, "<init>",
00169                          "(Lparma_polyhedra_library/Linear_Expression;"
00170                          "Lparma_polyhedra_library/Linear_Expression;"
00171                          "Lparma_polyhedra_library/Coefficient;)V");
00172   CHECK_RESULT_ASSERT(env, mID);
00173   cached_FMIDs.Congruence_init_ID = mID;
00174 }
00175 
00176 JNIEXPORT void JNICALL
00177 Java_parma_1polyhedra_1library_Congruence_1System_initIDs
00178 (JNIEnv* env, jclass j_con_sys_class) {
00179   jmethodID mID;
00180   mID = env->GetMethodID(j_con_sys_class, "<init>", "()V");
00181   CHECK_RESULT_ASSERT(env, mID);
00182   cached_FMIDs.Congruence_System_init_ID = mID;
00183   mID = env->GetMethodID(j_con_sys_class, "add", "(Ljava/lang/Object;)Z");
00184   CHECK_RESULT_ASSERT(env, mID);
00185   cached_FMIDs.Congruence_System_add_ID = mID;
00186 }
00187 
00188 JNIEXPORT void JNICALL
00189 Java_parma_1polyhedra_1library_Constraint_initIDs
00190 (JNIEnv* env, jclass j_constraint_class) {
00191   jfieldID fID;
00192   fID = env->GetFieldID(j_constraint_class, "lhs",
00193                         "Lparma_polyhedra_library/Linear_Expression;");
00194   CHECK_RESULT_ASSERT(env, fID);
00195   cached_FMIDs.Constraint_lhs_ID = fID;
00196   fID = env->GetFieldID(j_constraint_class, "rhs",
00197                         "Lparma_polyhedra_library/Linear_Expression;");
00198   CHECK_RESULT_ASSERT(env, fID);
00199   cached_FMIDs.Constraint_rhs_ID = fID;
00200   fID = env->GetFieldID(j_constraint_class, "kind",
00201                         "Lparma_polyhedra_library/Relation_Symbol;");
00202   CHECK_RESULT_ASSERT(env, fID);
00203   cached_FMIDs.Constraint_kind_ID = fID;
00204   jmethodID mID;
00205   mID = env->GetMethodID(j_constraint_class, "<init>",
00206                          "(Lparma_polyhedra_library/Linear_Expression;"
00207                          "Lparma_polyhedra_library/Relation_Symbol;"
00208                          "Lparma_polyhedra_library/Linear_Expression;)V");
00209   CHECK_RESULT_ASSERT(env, mID);
00210   cached_FMIDs.Constraint_init_ID = mID;
00211 }
00212 
00213 JNIEXPORT void JNICALL
00214 Java_parma_1polyhedra_1library_Constraint_1System_initIDs
00215 (JNIEnv* env, jclass j_con_sys_class) {
00216   jmethodID mID;
00217   mID = env->GetMethodID(j_con_sys_class, "<init>", "()V");
00218   CHECK_RESULT_ASSERT(env, mID);
00219   cached_FMIDs.Constraint_System_init_ID = mID;
00220   mID = env->GetMethodID(j_con_sys_class, "add", "(Ljava/lang/Object;)Z");
00221   CHECK_RESULT_ASSERT(env, mID);
00222   cached_FMIDs.Constraint_System_add_ID = mID;
00223   // NOTE: initialize the iterator method IDs common to all *_System classes.
00224   mID = env->GetMethodID(j_con_sys_class, "iterator",
00225                          "()Ljava/util/Iterator;");
00226   CHECK_RESULT_ASSERT(env, mID);
00227   cached_FMIDs.System_iterator_ID = mID;
00228   mID = env->GetMethodID(cached_classes.Iterator, "hasNext", "()Z");
00229   CHECK_RESULT_ASSERT(env, mID);
00230   cached_FMIDs.System_Iterator_has_next_ID = mID;
00231   assert(cached_classes.Iterator != NULL);
00232   mID = env->GetMethodID(cached_classes.Iterator, "next",
00233                          "()Ljava/lang/Object;");
00234   CHECK_RESULT_ASSERT(env, mID);
00235   cached_FMIDs.System_Iterator_next_ID = mID;
00236 }
00237 
00238 JNIEXPORT void JNICALL
00239 Java_parma_1polyhedra_1library_Degenerate_1Element_initIDs
00240 (JNIEnv* env, jclass j_degenerate_class) {
00241   jmethodID mID = env->GetMethodID(j_degenerate_class, "ordinal", "()I");
00242   CHECK_RESULT_ASSERT(env, mID);
00243   cached_FMIDs.Degenerate_Element_ordinal_ID = mID;
00244 }
00245 
00246 JNIEXPORT void JNICALL
00247 Java_parma_1polyhedra_1library_Generator_initIDs
00248 (JNIEnv* env, jclass j_generator_class) {
00249   jfieldID fID;
00250   fID = env->GetFieldID(j_generator_class, "gt",
00251                         "Lparma_polyhedra_library/Generator_Type;");
00252   CHECK_RESULT_ASSERT(env, fID);
00253   cached_FMIDs.Generator_gt_ID = fID;
00254   fID = env->GetFieldID(j_generator_class, "le",
00255                         "Lparma_polyhedra_library/Linear_Expression;");
00256   CHECK_RESULT_ASSERT(env, fID);
00257   cached_FMIDs.Generator_le_ID = fID;
00258   fID = env->GetFieldID(j_generator_class, "div",
00259                         "Lparma_polyhedra_library/Coefficient;");
00260   CHECK_RESULT_ASSERT(env, fID);
00261   cached_FMIDs.Generator_div_ID = fID;
00262   jmethodID mID;
00263   mID = env->GetStaticMethodID(j_generator_class, "line",
00264                                "(Lparma_polyhedra_library/Linear_Expression;)"
00265                                "Lparma_polyhedra_library/Generator;");
00266   CHECK_RESULT_ASSERT(env, mID);
00267   cached_FMIDs.Generator_line_ID = mID;
00268   mID = env->GetStaticMethodID(j_generator_class, "ray",
00269                                "(Lparma_polyhedra_library/Linear_Expression;)"
00270                                "Lparma_polyhedra_library/Generator;");
00271   CHECK_RESULT_ASSERT(env, mID);
00272   cached_FMIDs.Generator_ray_ID = mID;
00273   mID = env->GetStaticMethodID(j_generator_class, "point",
00274                                "(Lparma_polyhedra_library/Linear_Expression;"
00275                                "Lparma_polyhedra_library/Coefficient;)"
00276                                "Lparma_polyhedra_library/Generator;");
00277   CHECK_RESULT_ASSERT(env, mID);
00278   cached_FMIDs.Generator_point_ID = mID;
00279   mID = env->GetStaticMethodID(j_generator_class, "closure_point",
00280                                "(Lparma_polyhedra_library/Linear_Expression;"
00281                                "Lparma_polyhedra_library/Coefficient;)"
00282                                "Lparma_polyhedra_library/Generator;");
00283   CHECK_RESULT_ASSERT(env, mID);
00284   cached_FMIDs.Generator_closure_point_ID = mID;
00285 }
00286 
00287 JNIEXPORT void JNICALL
00288 Java_parma_1polyhedra_1library_Generator_1System_initIDs
00289 (JNIEnv* env, jclass j_gen_sys_class) {
00290   jmethodID mID;
00291   mID = env->GetMethodID(j_gen_sys_class, "<init>", "()V");
00292   CHECK_RESULT_ASSERT(env, mID);
00293   cached_FMIDs.Generator_System_init_ID = mID;
00294   mID = env->GetMethodID(j_gen_sys_class, "add", "(Ljava/lang/Object;)Z");
00295   CHECK_RESULT_ASSERT(env, mID);
00296   cached_FMIDs.Generator_System_add_ID = mID;
00297 }
00298 
00299 JNIEXPORT void JNICALL
00300 Java_parma_1polyhedra_1library_Generator_1Type_initIDs
00301 (JNIEnv* env, jclass j_gen_type_class) {
00302   jmethodID mID;
00303   mID = env->GetMethodID(j_gen_type_class, "ordinal", "()I");
00304   CHECK_RESULT_ASSERT(env, mID);
00305   cached_FMIDs.Generator_Type_ordinal_ID = mID;
00306 }
00307 
00308 JNIEXPORT void JNICALL
00309 Java_parma_1polyhedra_1library_Grid_1Generator_initIDs
00310 (JNIEnv* env, jclass j_grid_generator_class) {
00311   jfieldID fID;
00312   fID = env->GetFieldID(j_grid_generator_class, "gt",
00313                         "Lparma_polyhedra_library/Grid_Generator_Type;");
00314   CHECK_RESULT_ASSERT(env, fID);
00315   cached_FMIDs.Grid_Generator_gt_ID = fID;
00316   fID = env->GetFieldID(j_grid_generator_class, "le",
00317                         "Lparma_polyhedra_library/Linear_Expression;");
00318   CHECK_RESULT_ASSERT(env, fID);
00319   cached_FMIDs.Grid_Generator_le_ID = fID;
00320   fID = env->GetFieldID(j_grid_generator_class, "div",
00321                         "Lparma_polyhedra_library/Coefficient;");
00322   CHECK_RESULT_ASSERT(env, fID);
00323   cached_FMIDs.Grid_Generator_div_ID = fID;
00324   jmethodID mID;
00325   mID = env->GetStaticMethodID(j_grid_generator_class, "grid_line",
00326                                "(Lparma_polyhedra_library/Linear_Expression;)"
00327                                "Lparma_polyhedra_library/Grid_Generator;");
00328   CHECK_RESULT_ASSERT(env, mID);
00329   cached_FMIDs.Grid_Generator_grid_line_ID = mID;
00330   mID = env->GetStaticMethodID(j_grid_generator_class, "parameter",
00331                                "(Lparma_polyhedra_library/Linear_Expression;"
00332                                "Lparma_polyhedra_library/Coefficient;)"
00333                                "Lparma_polyhedra_library/Grid_Generator;");
00334   CHECK_RESULT_ASSERT(env, mID);
00335   cached_FMIDs.Grid_Generator_parameter_ID = mID;
00336   mID = env->GetStaticMethodID(j_grid_generator_class, "grid_point",
00337                                "(Lparma_polyhedra_library/Linear_Expression;"
00338                                "Lparma_polyhedra_library/Coefficient;)"
00339                                "Lparma_polyhedra_library/Grid_Generator;");
00340   CHECK_RESULT_ASSERT(env, mID);
00341   cached_FMIDs.Grid_Generator_grid_point_ID = mID;
00342 }
00343 
00344 JNIEXPORT void JNICALL
00345 Java_parma_1polyhedra_1library_Grid_1Generator_1System_initIDs
00346 (JNIEnv* env, jclass j_gen_sys_class) {
00347   jmethodID mID;
00348   mID = env->GetMethodID(j_gen_sys_class, "<init>", "()V");
00349   CHECK_RESULT_ASSERT(env, mID);
00350   cached_FMIDs.Grid_Generator_System_init_ID = mID;
00351   mID = env->GetMethodID(j_gen_sys_class, "add", "(Ljava/lang/Object;)Z");
00352   CHECK_RESULT_ASSERT(env, mID);
00353   cached_FMIDs.Grid_Generator_System_add_ID = mID;
00354 }
00355 
00356 JNIEXPORT void JNICALL
00357 Java_parma_1polyhedra_1library_Grid_1Generator_1Type_initIDs
00358 (JNIEnv* env, jclass j_grid_gen_type_class) {
00359   jmethodID mID;
00360   mID = env->GetMethodID(j_grid_gen_type_class, "ordinal", "()I");
00361   CHECK_RESULT_ASSERT(env, mID);
00362   cached_FMIDs.Grid_Generator_Type_ordinal_ID = mID;
00363 }
00364 
00365 JNIEXPORT void JNICALL
00366 Java_parma_1polyhedra_1library_Linear_1Expression_initIDs
00367 (JNIEnv* env, jclass j_le_class) {
00368   jmethodID mID;
00369   mID = env->GetMethodID(j_le_class, "sum",
00370                          "(Lparma_polyhedra_library/Linear_Expression;)"
00371                          "Lparma_polyhedra_library/Linear_Expression;");
00372   CHECK_RESULT_ASSERT(env, mID);
00373   cached_FMIDs.Linear_Expression_sum_ID = mID;
00374   mID = env->GetMethodID(j_le_class, "times",
00375                          "(Lparma_polyhedra_library/Coefficient;)"
00376                          "Lparma_polyhedra_library/Linear_Expression;");
00377   CHECK_RESULT_ASSERT(env, mID);
00378   cached_FMIDs.Linear_Expression_times_ID = mID;
00379 }
00380 
00381 JNIEXPORT void JNICALL
00382 Java_parma_1polyhedra_1library_Linear_1Expression_1Coefficient_initIDs
00383 (JNIEnv* env, jclass j_le_coeff_class) {
00384   jfieldID fID;
00385   fID = env->GetFieldID(j_le_coeff_class, "coeff",
00386                         "Lparma_polyhedra_library/Coefficient;");
00387   CHECK_RESULT_ASSERT(env, fID);
00388   cached_FMIDs.Linear_Expression_Coefficient_coeff_ID = fID;
00389   jmethodID mID;
00390   mID = env->GetMethodID(j_le_coeff_class, "<init>",
00391                          "(Lparma_polyhedra_library/Coefficient;)V");
00392   CHECK_RESULT_ASSERT(env, mID);
00393   cached_FMIDs.Linear_Expression_Coefficient_init_ID = mID;
00394 }
00395 
00396 JNIEXPORT void JNICALL
00397 Java_parma_1polyhedra_1library_Linear_1Expression_1Difference_initIDs
00398 (JNIEnv* env, jclass j_le_diff_class) {
00399   jfieldID fID;
00400   fID = env->GetFieldID(j_le_diff_class, "lhs",
00401                         "Lparma_polyhedra_library/Linear_Expression;");
00402   CHECK_RESULT_ASSERT(env, fID);
00403   cached_FMIDs.Linear_Expression_Difference_lhs_ID = fID;
00404   fID = env->GetFieldID(j_le_diff_class, "rhs",
00405                         "Lparma_polyhedra_library/Linear_Expression;");
00406   CHECK_RESULT_ASSERT(env, fID);
00407   cached_FMIDs.Linear_Expression_Difference_rhs_ID = fID;
00408 }
00409 
00410 JNIEXPORT void JNICALL
00411 Java_parma_1polyhedra_1library_Linear_1Expression_1Sum_initIDs
00412 (JNIEnv* env, jclass j_le_sum_class) {
00413   jfieldID fID;
00414   fID = env->GetFieldID(j_le_sum_class, "lhs",
00415                         "Lparma_polyhedra_library/Linear_Expression;");
00416   CHECK_RESULT_ASSERT(env, fID);
00417   cached_FMIDs.Linear_Expression_Sum_lhs_ID = fID;
00418   fID = env->GetFieldID(j_le_sum_class, "rhs",
00419                         "Lparma_polyhedra_library/Linear_Expression;");
00420   CHECK_RESULT_ASSERT(env, fID);
00421   cached_FMIDs.Linear_Expression_Sum_rhs_ID = fID;
00422 }
00423 
00424 JNIEXPORT void JNICALL
00425 Java_parma_1polyhedra_1library_Linear_1Expression_1Times_initIDs
00426 (JNIEnv* env, jclass j_le_times_class) {
00427   jfieldID fID;
00428   fID = env->GetFieldID(j_le_times_class, "coeff",
00429                         "Lparma_polyhedra_library/Coefficient;");
00430   CHECK_RESULT_ASSERT(env, fID);
00431   cached_FMIDs.Linear_Expression_Times_coeff_ID = fID;
00432   fID = env->GetFieldID(j_le_times_class, "lin_expr",
00433                         "Lparma_polyhedra_library/Linear_Expression;");
00434   CHECK_RESULT_ASSERT(env, fID);
00435   cached_FMIDs.Linear_Expression_Times_lin_expr_ID = fID;
00436   jmethodID mID;
00437   mID = env->GetMethodID(j_le_times_class, "<init>",
00438                          "(Lparma_polyhedra_library/Coefficient;"
00439                          "Lparma_polyhedra_library/Variable;)V");
00440   CHECK_RESULT_ASSERT(env, mID);
00441   cached_FMIDs.Linear_Expression_Times_init_from_coeff_var_ID = mID;
00442 }
00443 
00444 JNIEXPORT void JNICALL
00445 Java_parma_1polyhedra_1library_Linear_1Expression_1Unary_1Minus_initIDs
00446 (JNIEnv* env, jclass j_le_uminus_class) {
00447   jfieldID fID;
00448   fID = env->GetFieldID(j_le_uminus_class, "arg",
00449                         "Lparma_polyhedra_library/Linear_Expression;");
00450   CHECK_RESULT_ASSERT(env, fID);
00451   cached_FMIDs.Linear_Expression_Unary_Minus_arg_ID = fID;
00452 }
00453 
00454 JNIEXPORT void JNICALL
00455 Java_parma_1polyhedra_1library_Linear_1Expression_1Variable_initIDs
00456 (JNIEnv* env, jclass j_le_var_class) {
00457   jmethodID mID;
00458   mID = env->GetMethodID(j_le_var_class, "<init>",
00459                          "(Lparma_polyhedra_library/Variable;)V");
00460   CHECK_RESULT_ASSERT(env, mID);
00461   cached_FMIDs.Linear_Expression_Variable_init_ID = mID;
00462   mID = env->GetMethodID(j_le_var_class, "var_id", "()I");
00463   CHECK_RESULT_ASSERT(env, mID);
00464   cached_FMIDs.Linear_Expression_Variable_var_id_ID = mID;
00465 }
00466 
00467 JNIEXPORT jboolean JNICALL
00468 Java_parma_1polyhedra_1library_Linear_1Expression_is_1zero
00469 (JNIEnv* env, jobject j_this) {
00470   try {
00471     return build_cxx_linear_expression(env, j_this).is_zero();
00472   }
00473   CATCH_ALL
00474   return false;
00475 }
00476 
00477 JNIEXPORT jboolean JNICALL
00478 Java_parma_1polyhedra_1library_Linear_1Expression_all_1homogeneous_1terms_1are_1zero
00479 (JNIEnv* env, jobject j_this) {
00480   try {
00481     return build_cxx_linear_expression(env, j_this).all_homogeneous_terms_are_zero();
00482   }
00483   CATCH_ALL
00484   return false;
00485 }
00486 
00487 JNIEXPORT void JNICALL
00488 Java_parma_1polyhedra_1library_MIP_1Problem_1Status_initIDs
00489 (JNIEnv* env, jclass j_mip_status_class) {
00490   jfieldID fID;
00491   fID = env->GetStaticFieldID(j_mip_status_class, "UNFEASIBLE_MIP_PROBLEM",
00492                               "Lparma_polyhedra_library/MIP_Problem_Status;");
00493   CHECK_RESULT_ASSERT(env, fID);
00494   cached_FMIDs.MIP_Problem_Status_UNFEASIBLE_MIP_PROBLEM_ID = fID;
00495   fID = env->GetStaticFieldID(j_mip_status_class, "UNBOUNDED_MIP_PROBLEM",
00496                               "Lparma_polyhedra_library/MIP_Problem_Status;");
00497   CHECK_RESULT_ASSERT(env, fID);
00498   cached_FMIDs.MIP_Problem_Status_UNBOUNDED_MIP_PROBLEM_ID = fID;
00499   fID = env->GetStaticFieldID(j_mip_status_class, "OPTIMIZED_MIP_PROBLEM",
00500                               "Lparma_polyhedra_library/MIP_Problem_Status;");
00501   CHECK_RESULT_ASSERT(env, fID);
00502   cached_FMIDs.MIP_Problem_Status_OPTIMIZED_MIP_PROBLEM_ID = fID;
00503   jmethodID mID;
00504   mID = env->GetMethodID(j_mip_status_class, "ordinal", "()I");
00505   CHECK_RESULT_ASSERT(env, mID);
00506   cached_FMIDs.MIP_Problem_Status_ordinal_ID = mID;
00507 }
00508 
00509 JNIEXPORT void JNICALL
00510 Java_parma_1polyhedra_1library_PIP_1Problem_1Status_initIDs
00511 (JNIEnv* env, jclass j_mip_status_class) {
00512   jfieldID fID;
00513   fID = env->GetStaticFieldID(j_mip_status_class, "UNFEASIBLE_PIP_PROBLEM",
00514                               "Lparma_polyhedra_library/PIP_Problem_Status;");
00515   CHECK_RESULT_ASSERT(env, fID);
00516   cached_FMIDs.PIP_Problem_Status_UNFEASIBLE_PIP_PROBLEM_ID = fID;
00517   fID = env->GetStaticFieldID(j_mip_status_class, "OPTIMIZED_PIP_PROBLEM",
00518                               "Lparma_polyhedra_library/PIP_Problem_Status;");
00519   CHECK_RESULT_ASSERT(env, fID);
00520   cached_FMIDs.PIP_Problem_Status_OPTIMIZED_PIP_PROBLEM_ID = fID;
00521   jmethodID mID;
00522   mID = env->GetMethodID(j_mip_status_class, "ordinal", "()I");
00523   CHECK_RESULT_ASSERT(env, mID);
00524   cached_FMIDs.PIP_Problem_Status_ordinal_ID = mID;
00525 }
00526 
00527 JNIEXPORT void JNICALL
00528 Java_parma_1polyhedra_1library_Optimization_1Mode_initIDs
00529 (JNIEnv* env, jclass j_opt_mode_class) {
00530   jfieldID fID;
00531   fID = env->GetStaticFieldID(j_opt_mode_class, "MAXIMIZATION",
00532                               "Lparma_polyhedra_library/Optimization_Mode;");
00533   CHECK_RESULT_ASSERT(env, fID);
00534   cached_FMIDs.Optimization_Mode_MAXIMIZATION_ID = fID;
00535   fID = env->GetStaticFieldID(j_opt_mode_class, "MINIMIZATION",
00536                               "Lparma_polyhedra_library/Optimization_Mode;");
00537   CHECK_RESULT_ASSERT(env, fID);
00538   cached_FMIDs.Optimization_Mode_MINIMIZATION_ID = fID;
00539   jmethodID mID;
00540   mID = env->GetMethodID(j_opt_mode_class, "ordinal", "()I");
00541   CHECK_RESULT_ASSERT(env, mID);
00542   cached_FMIDs.Optimization_Mode_ordinal_ID = mID;
00543 }
00544 
00545 JNIEXPORT void JNICALL
00546 Java_parma_1polyhedra_1library_Pair_initIDs
00547 (JNIEnv* env, jclass j_pair_class) {
00548   jfieldID fID;
00549   fID = env->GetFieldID(j_pair_class, "first", "Ljava/lang/Object;");
00550   CHECK_RESULT_ASSERT(env, fID);
00551   cached_FMIDs.Pair_first_ID = fID;
00552   fID = env->GetFieldID(j_pair_class, "second", "Ljava/lang/Object;");
00553   CHECK_RESULT_ASSERT(env, fID);
00554   cached_FMIDs.Pair_second_ID = fID;
00555 }
00556 
00557 JNIEXPORT void JNICALL
00558 Java_parma_1polyhedra_1library_Poly_1Con_1Relation_initIDs
00559 (JNIEnv* env, jclass j_poly_con_relation_class) {
00560   jmethodID mID;
00561   mID = env->GetMethodID(j_poly_con_relation_class, "<init>", "(I)V");
00562   CHECK_RESULT_ASSERT(env, mID);
00563   cached_FMIDs.Poly_Con_Relation_init_ID = mID;
00564 }
00565 
00566 JNIEXPORT void JNICALL
00567 Java_parma_1polyhedra_1library_Poly_1Gen_1Relation_initIDs
00568 (JNIEnv* env, jclass j_poly_gen_relation_class) {
00569   jmethodID mID;
00570   mID = env->GetMethodID(j_poly_gen_relation_class, "<init>", "(I)V");
00571   CHECK_RESULT_ASSERT(env, mID);
00572   cached_FMIDs.Poly_Gen_Relation_init_ID = mID;
00573 }
00574 
00575 JNIEXPORT void JNICALL
00576 Java_parma_1polyhedra_1library_PPL_1Object_initIDs
00577 (JNIEnv* env, jclass j_ppl_object_class) {
00578   jfieldID fID = env->GetFieldID(j_ppl_object_class, "ptr", "J");
00579   CHECK_RESULT_ASSERT(env, fID);
00580   cached_FMIDs.PPL_Object_ptr_ID = fID;
00581 }
00582 
00583 JNIEXPORT void JNICALL
00584 Java_parma_1polyhedra_1library_Relation_1Symbol_initIDs
00585 (JNIEnv* env, jclass j_rel_sym_class) {
00586   jfieldID fID;
00587   fID = env->GetStaticFieldID(j_rel_sym_class, "EQUAL",
00588                               "Lparma_polyhedra_library/Relation_Symbol;");
00589   CHECK_RESULT_ASSERT(env, fID);
00590   cached_FMIDs.Relation_Symbol_EQUAL_ID = fID;
00591   fID = env->GetStaticFieldID(j_rel_sym_class, "GREATER_THAN",
00592                               "Lparma_polyhedra_library/Relation_Symbol;");
00593   CHECK_RESULT_ASSERT(env, fID);
00594   cached_FMIDs.Relation_Symbol_GREATER_THAN_ID = fID;
00595   fID = env->GetStaticFieldID(j_rel_sym_class, "GREATER_OR_EQUAL",
00596                               "Lparma_polyhedra_library/Relation_Symbol;");
00597   CHECK_RESULT_ASSERT(env, fID);
00598   cached_FMIDs.Relation_Symbol_GREATER_OR_EQUAL_ID = fID;
00599   jmethodID mID;
00600   mID = env->GetMethodID(j_rel_sym_class, "ordinal", "()I");
00601   CHECK_RESULT_ASSERT(env, mID);
00602   cached_FMIDs.Relation_Symbol_ordinal_ID = mID;
00603 }
00604 
00605 JNIEXPORT void JNICALL
00606 Java_parma_1polyhedra_1library_Bounded_1Integer_1Type_1Overflow_initIDs
00607 (JNIEnv* env, jclass j_bounded_overflow_class) {
00608   jfieldID fID;
00609   fID = env->GetStaticFieldID(j_bounded_overflow_class, "OVERFLOW_WRAPS",
00610                               "Lparma_polyhedra_library/Bounded_Integer_Type_Overflow;");
00611   CHECK_RESULT_ASSERT(env, fID);
00612   cached_FMIDs.Bounded_Integer_Type_Overflow_OVERFLOW_WRAPS_ID = fID;
00613   fID = env->GetStaticFieldID(j_bounded_overflow_class, "OVERFLOW_UNDEFINED",
00614                               "Lparma_polyhedra_library/Bounded_Integer_Type_Overflow;");
00615   CHECK_RESULT_ASSERT(env, fID);
00616   cached_FMIDs.Bounded_Integer_Type_Overflow_OVERFLOW_UNDEFINED_ID = fID;
00617   fID = env->GetStaticFieldID(j_bounded_overflow_class, "OVERFLOW_IMPOSSIBLE",
00618                               "Lparma_polyhedra_library/Bounded_Integer_Type_Overflow;");
00619   CHECK_RESULT_ASSERT(env, fID);
00620   cached_FMIDs.Bounded_Integer_Type_Overflow_OVERFLOW_IMPOSSIBLE_ID = fID;
00621   jmethodID mID;
00622   mID = env->GetMethodID(j_bounded_overflow_class, "ordinal", "()I");
00623   CHECK_RESULT_ASSERT(env, mID);
00624   cached_FMIDs.Bounded_Integer_Type_Overflow_ordinal_ID = mID;
00625 }
00626 
00627 JNIEXPORT void JNICALL
00628 Java_parma_1polyhedra_1library_Bounded_1Integer_1Type_1Representation_initIDs
00629 (JNIEnv* env, jclass j_bounded_rep_class) {
00630   jfieldID fID;
00631   fID = env->GetStaticFieldID(j_bounded_rep_class, "UNSIGNED",
00632                               "Lparma_polyhedra_library/Bounded_Integer_Type_Representation;");
00633   CHECK_RESULT_ASSERT(env, fID);
00634   cached_FMIDs.Bounded_Integer_Type_Representation_UNSIGNED_ID = fID;
00635   fID = env->GetStaticFieldID(j_bounded_rep_class, "SIGNED_2_COMPLEMENT",
00636                               "Lparma_polyhedra_library/Bounded_Integer_Type_Representation;");
00637   CHECK_RESULT_ASSERT(env, fID);
00638   cached_FMIDs.Bounded_Integer_Type_Representation_SIGNED_2_COMPLEMENT_ID = fID;
00639   jmethodID mID;
00640   mID = env->GetMethodID(j_bounded_rep_class, "ordinal", "()I");
00641   CHECK_RESULT_ASSERT(env, mID);
00642   cached_FMIDs.Bounded_Integer_Type_Representation_ordinal_ID = mID;
00643 }
00644 
00645 JNIEXPORT void JNICALL
00646 Java_parma_1polyhedra_1library_Bounded_1Integer_1Type_1Width_initIDs
00647 (JNIEnv* env, jclass j_bounded_width_class) {
00648   jfieldID fID;
00649   fID = env->GetStaticFieldID(j_bounded_width_class, "BITS_8",
00650                               "Lparma_polyhedra_library/Bounded_Integer_Type_Width;");
00651   CHECK_RESULT_ASSERT(env, fID);
00652   cached_FMIDs.Bounded_Integer_Type_Width_BITS_8_ID = fID;
00653   fID = env->GetStaticFieldID(j_bounded_width_class, "BITS_16",
00654                               "Lparma_polyhedra_library/Bounded_Integer_Type_Width;");
00655   CHECK_RESULT_ASSERT(env, fID);
00656   cached_FMIDs.Bounded_Integer_Type_Width_BITS_16_ID = fID;
00657   fID = env->GetStaticFieldID(j_bounded_width_class, "BITS_32",
00658                               "Lparma_polyhedra_library/Bounded_Integer_Type_Width;");
00659   CHECK_RESULT_ASSERT(env, fID);
00660   cached_FMIDs.Bounded_Integer_Type_Width_BITS_32_ID = fID;
00661   fID = env->GetStaticFieldID(j_bounded_width_class, "BITS_64",
00662                               "Lparma_polyhedra_library/Bounded_Integer_Type_Width;");
00663   CHECK_RESULT_ASSERT(env, fID);
00664   cached_FMIDs.Bounded_Integer_Type_Width_BITS_64_ID = fID;
00665   fID = env->GetStaticFieldID(j_bounded_width_class, "BITS_128",
00666                               "Lparma_polyhedra_library/Bounded_Integer_Type_Width;");
00667   CHECK_RESULT_ASSERT(env, fID);
00668   cached_FMIDs.Bounded_Integer_Type_Width_BITS_128_ID = fID;
00669   jmethodID mID;
00670   mID = env->GetMethodID(j_bounded_width_class, "ordinal", "()I");
00671   CHECK_RESULT_ASSERT(env, mID);
00672   cached_FMIDs.Bounded_Integer_Type_Width_ordinal_ID = mID;
00673 }
00674 
00675 JNIEXPORT void JNICALL
00676 Java_parma_1polyhedra_1library_Variable_initIDs
00677 (JNIEnv* env, jclass j_variable_class) {
00678   jfieldID fID = env->GetFieldID(j_variable_class, "varid", "I");
00679   CHECK_RESULT_ASSERT(env, fID);
00680   cached_FMIDs.Variable_varid_ID = fID;
00681   jmethodID mID = env->GetMethodID(j_variable_class, "<init>", "(I)V");
00682   CHECK_RESULT_ASSERT(env, mID);
00683   cached_FMIDs.Variable_init_ID = mID;
00684 }
00685 
00686 JNIEXPORT void JNICALL
00687 Java_parma_1polyhedra_1library_Variables_1Set_initIDs
00688 (JNIEnv* env, jclass j_vset_class) {
00689   jmethodID mID;
00690   mID = env->GetMethodID(j_vset_class, "<init>", "()V");
00691   CHECK_RESULT_ASSERT(env, mID);
00692   cached_FMIDs.Variables_Set_init_ID = mID;
00693   mID = env->GetMethodID(j_vset_class, "add", "(Ljava/lang/Object;)Z");
00694   CHECK_RESULT_ASSERT(env, mID);
00695   cached_FMIDs.Variables_Set_add_ID = mID;
00696   mID = env->GetMethodID(j_vset_class, "iterator", "()Ljava/util/Iterator;");
00697   CHECK_RESULT_ASSERT(env, mID);
00698   cached_FMIDs.Variables_Set_iterator_ID = mID;
00699   // Iterator on Variables_Set.
00700   jclass j_vset_iter_class = env->FindClass("java/util/Iterator");
00701   CHECK_RESULT_ASSERT(env, j_vset_iter_class);
00702   mID = env->GetMethodID(j_vset_iter_class, "hasNext", "()Z");
00703   CHECK_RESULT_ASSERT(env, mID);
00704   cached_FMIDs.Variables_Set_Iterator_has_next_ID = mID;
00705   mID = env->GetMethodID(j_vset_iter_class, "next", "()Ljava/lang/Object;");
00706   CHECK_RESULT_ASSERT(env, mID);
00707   cached_FMIDs.Variables_Set_Iterator_next_ID = mID;
00708 }
00709 
00710 
00711 JNIEXPORT jint JNICALL
00712 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_version_1major
00713 (JNIEnv *, jclass) {
00714   return version_major();
00715 }
00716 
00717 JNIEXPORT jint JNICALL
00718 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_version_1minor
00719 (JNIEnv *, jclass)  {
00720   return version_minor();
00721 }
00722 
00723 JNIEXPORT jint JNICALL
00724 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_version_1revision
00725 (JNIEnv *, jclass) {
00726   return version_revision();
00727 }
00728 
00729 JNIEXPORT jint JNICALL
00730 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_version_1beta
00731 (JNIEnv *, jclass) {
00732   return version_beta();
00733 }
00734 
00735 JNIEXPORT jstring JNICALL
00736 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_version
00737 (JNIEnv* env, jclass) {
00738 #if defined(__sun) || defined(__sun__)
00739 
00740   // Some versions of Solaris declare a version() function that causes
00741   // the following function call to be ambiguous.
00742   return env->NewStringUTF(Parma_Polyhedra_Library::version());
00743 
00744 #else // !(defined(__sun) || defined(__sun__))
00745 
00746   return env->NewStringUTF(version());
00747 
00748 #endif // !(defined(__sun) || defined(__sun__))
00749 }
00750 
00751 JNIEXPORT jstring JNICALL
00752 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_banner
00753 (JNIEnv* env, jclass) {
00754   return env->NewStringUTF(banner());
00755 }
00756 
00757 JNIEXPORT void JNICALL
00758 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_set_1rounding_1for_1PPL
00759 (JNIEnv* env, jclass) {
00760   try {
00761     set_rounding_for_PPL();
00762   }
00763   CATCH_ALL;
00764 }
00765 
00766 JNIEXPORT void JNICALL
00767 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_restore_1pre_1PPL_1rounding
00768 (JNIEnv* env, jclass) {
00769   try {
00770     restore_pre_PPL_rounding();
00771   }
00772   CATCH_ALL;
00773 }
00774 
00775 JNIEXPORT jint JNICALL
00776 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_irrational_1precision
00777 (JNIEnv* env , jclass) {
00778   try {
00779     return irrational_precision();
00780   }
00781   CATCH_ALL;
00782   return 0;
00783 }
00784 
00785 JNIEXPORT void JNICALL
00786 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_set_1irrational_1precision
00787 (JNIEnv* env , jclass, jint p) {
00788   try {
00789     unsigned cxx_p = jtype_to_unsigned<unsigned>(p);
00790     set_irrational_precision(cxx_p);
00791   }
00792   CATCH_ALL;
00793 }
00794 
00795 JNIEXPORT void JNICALL
00796 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_set_1timeout
00797 (JNIEnv* env, jclass, jint csecs) {
00798   try {
00799     // In case a timeout was already set.
00800     reset_timeout();
00801     assert(csecs > 0);
00802     unsigned cxx_csecs = jtype_to_unsigned<unsigned>(csecs);
00803     assert(cxx_csecs > 0);
00804     static timeout_exception e;
00805     using Parma_Polyhedra_Library::Watchdog;
00806     p_timeout_object
00807       = new Watchdog(cxx_csecs, abandon_expensive_computations, e);
00808   }
00809   CATCH_ALL;
00810 }
00811 
00812 JNIEXPORT void JNICALL
00813 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_reset_1timeout
00814 (JNIEnv* env, jclass) {
00815   try {
00816     reset_timeout();
00817   }
00818   CATCH_ALL;
00819 }
00820 
00821 JNIEXPORT void JNICALL
00822 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_set_1deterministic_1timeout
00823 (JNIEnv* env, jclass, jint unscaled_weight, jint scale) {
00824   try {
00825     // In case a timeout was already set.
00826     reset_deterministic_timeout();
00827     // Note: let `unscaled_weight == 0' result in an exception.
00828     assert(unscaled_weight >= 0 && scale >= 0);
00829     unsigned long cxx_unscaled_weight
00830       = jtype_to_unsigned<unsigned long>(unscaled_weight);
00831     unsigned cxx_scale = jtype_to_unsigned<unsigned>(scale);
00832     static deterministic_timeout_exception e;
00833     typedef Parma_Polyhedra_Library::Weightwatch_Traits Traits;
00834     p_deterministic_timeout_object
00835       = new Weightwatch(Traits::compute_delta(cxx_unscaled_weight, cxx_scale),
00836                         abandon_expensive_computations, e);
00837   }
00838   CATCH_ALL;
00839 }
00840 
00841 JNIEXPORT void JNICALL
00842 Java_parma_1polyhedra_1library_Parma_1Polyhedra_1Library_reset_1deterministic_1timeout
00843 (JNIEnv* env, jclass) {
00844   try {
00845     reset_deterministic_timeout();
00846   }
00847   CATCH_ALL;
00848 }
00849 
00850 JNIEXPORT jlong JNICALL
00851 Java_parma_1polyhedra_1library_MIP_1Problem_max_1space_1dimension
00852 (JNIEnv* env , jobject j_this_mip_problem) {
00853   try {
00854     MIP_Problem* mip
00855       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00856     return mip->max_space_dimension();
00857   }
00858   CATCH_ALL;
00859   return 0;
00860 }
00861 
00862 JNIEXPORT jlong JNICALL
00863 Java_parma_1polyhedra_1library_MIP_1Problem_space_1dimension
00864 (JNIEnv* env , jobject j_this_mip_problem) {
00865   try {
00866     MIP_Problem* mip
00867       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00868     return mip->space_dimension();
00869   }
00870   CATCH_ALL;
00871   return 0;
00872 }
00873 
00874 JNIEXPORT jobject JNICALL
00875 Java_parma_1polyhedra_1library_MIP_1Problem_integer_1space_1dimensions
00876 (JNIEnv* env , jobject j_this_mip_problem) {
00877   try {
00878     MIP_Problem* mip
00879       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00880     return build_java_variables_set(env, mip->integer_space_dimensions());
00881   }
00882   CATCH_ALL;
00883   jobject null = 0;
00884   return null;
00885 }
00886 
00887 JNIEXPORT jobject JNICALL
00888 Java_parma_1polyhedra_1library_MIP_1Problem_objective_1function
00889 (JNIEnv* env , jobject j_this_mip_problem) {
00890   try {
00891     MIP_Problem* mip
00892       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00893     PPL_DIRTY_TEMP_COEFFICIENT(inhomogeneous_term);
00894     inhomogeneous_term = mip->objective_function().inhomogeneous_term();
00895     jobject j_coeff_inhomogeneous_term
00896       = build_java_coeff(env, inhomogeneous_term);
00897     jobject j_le_coeff
00898       = env->NewObject(cached_classes.Linear_Expression_Coefficient,
00899                        cached_FMIDs.Linear_Expression_Coefficient_init_ID,
00900                        j_coeff_inhomogeneous_term);
00901     CHECK_RESULT_RETURN(env, j_le_coeff, 0);
00902 
00903     jobject j_le = build_linear_expression(env, mip->objective_function());
00904     return env->CallObjectMethod(j_le,
00905                                  cached_FMIDs.Linear_Expression_sum_ID,
00906                                  j_le_coeff);
00907   }
00908   CATCH_ALL;
00909   jobject null = 0;
00910   return null;
00911 }
00912 
00913 JNIEXPORT jobject JNICALL
00914 Java_parma_1polyhedra_1library_MIP_1Problem_optimization_1mode
00915 (JNIEnv* env , jobject j_this_mip_problem) {
00916   try {
00917     MIP_Problem* mip
00918       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00919     return build_java_optimization_mode(env, mip->optimization_mode());
00920   }
00921   CATCH_ALL;
00922   jobject null = 0;
00923   return null;
00924 }
00925 
00926 JNIEXPORT jobject JNICALL
00927 Java_parma_1polyhedra_1library_MIP_1Problem_get_1control_1parameter
00928 (JNIEnv* env , jobject j_this_mip_problem,
00929  jobject j_cpn) {
00930   try {
00931     MIP_Problem* mip
00932       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00933     MIP_Problem::Control_Parameter_Name cpn
00934       = build_cxx_control_parameter_name(env, j_cpn);
00935     return
00936       build_java_control_parameter_value(env,
00937                                          mip->get_control_parameter(cpn));
00938   }
00939   CATCH_ALL;
00940   jobject null = 0;
00941   return null;
00942 }
00943 
00944 JNIEXPORT void JNICALL
00945 Java_parma_1polyhedra_1library_MIP_1Problem_set_1control_1parameter
00946 (JNIEnv* env , jobject j_this_mip_problem,
00947  jobject j_cpv) {
00948   try {
00949     MIP_Problem* mip
00950       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00951     MIP_Problem::Control_Parameter_Value cpv
00952       = build_cxx_control_parameter_value(env, j_cpv);
00953     mip->set_control_parameter(cpv);
00954   }
00955   CATCH_ALL;
00956 }
00957 
00958 JNIEXPORT jobject JNICALL
00959 Java_parma_1polyhedra_1library_MIP_1Problem_constraints
00960 (JNIEnv* env, jobject j_this_mip_problem) {
00961   try {
00962     jobject j_cs = env->NewObject(cached_classes.Constraint_System,
00963                                   cached_FMIDs.Constraint_System_init_ID);
00964     CHECK_RESULT_RETURN(env, j_cs, 0);
00965 
00966     MIP_Problem* mip
00967       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00968     for (MIP_Problem::const_iterator cs_it = mip->constraints_begin(),
00969            cs_end = mip->constraints_end(); cs_it != cs_end; ++cs_it) {
00970       jobject j_constraint = build_java_constraint(env, *cs_it);
00971       env->CallBooleanMethod(j_cs,
00972                              cached_FMIDs.Constraint_System_add_ID,
00973                              j_constraint);
00974       CHECK_EXCEPTION_RETURN(env, 0);
00975     }
00976     return j_cs;
00977   }
00978   CATCH_ALL;
00979   jobject null = 0;
00980   return null;
00981 }
00982 
00983 JNIEXPORT void JNICALL
00984 Java_parma_1polyhedra_1library_MIP_1Problem_clear
00985 (JNIEnv* env , jobject j_this_mip_problem) {
00986   try {
00987     MIP_Problem* mip
00988       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
00989     mip->clear();
00990   }
00991   CATCH_ALL;
00992 }
00993 
00994 JNIEXPORT void JNICALL
00995 Java_parma_1polyhedra_1library_MIP_1Problem_add_1space_1dimensions_1and_1embed
00996 (JNIEnv* env , jobject j_this_mip_problem, jlong j_dim) {
00997   try {
00998     MIP_Problem* mip
00999       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01000     dimension_type ppl_dim = jtype_to_unsigned<dimension_type>(j_dim);
01001     mip->add_space_dimensions_and_embed(ppl_dim);
01002   }
01003   CATCH_ALL;
01004 }
01005 
01006 JNIEXPORT void JNICALL
01007 Java_parma_1polyhedra_1library_MIP_1Problem_add_1to_1integer_1space_1dimensions
01008 (JNIEnv* env , jobject j_this_mip_problem, jobject j_vset) {
01009   try {
01010     MIP_Problem* mip
01011       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01012     Variables_Set v_set = build_cxx_variables_set(env, j_vset);
01013     mip->add_to_integer_space_dimensions(v_set);
01014   }
01015   CATCH_ALL;
01016 }
01017 
01018 JNIEXPORT void JNICALL
01019 Java_parma_1polyhedra_1library_MIP_1Problem_add_1constraint
01020 (JNIEnv* env , jobject j_this_mip_problem, jobject j_c) {
01021   try {
01022     MIP_Problem* mip
01023       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01024     Constraint c = build_cxx_constraint(env, j_c);
01025     mip->add_constraint(c);
01026   }
01027   CATCH_ALL;
01028 }
01029 
01030 JNIEXPORT void JNICALL
01031 Java_parma_1polyhedra_1library_MIP_1Problem_add_1constraints
01032 (JNIEnv* env , jobject j_this_mip_problem, jobject j_cs) {
01033   try {
01034     MIP_Problem* mip
01035       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01036     Constraint_System cs = build_cxx_constraint_system(env, j_cs);
01037     mip->add_constraints(cs);
01038   }
01039   CATCH_ALL;
01040 }
01041 
01042 JNIEXPORT void JNICALL
01043 Java_parma_1polyhedra_1library_MIP_1Problem_set_1objective_1function
01044 (JNIEnv* env , jobject j_this_mip_problem, jobject j_le) {
01045   try {
01046     MIP_Problem* mip
01047       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01048     Linear_Expression le = build_cxx_linear_expression(env, j_le);
01049     mip->set_objective_function(le);
01050   }
01051   CATCH_ALL;
01052 }
01053 
01054 JNIEXPORT void JNICALL
01055 Java_parma_1polyhedra_1library_MIP_1Problem_set_1optimization_1mode
01056 (JNIEnv* env , jobject j_this_mip_problem, jobject j_opt_mode) {
01057   try {
01058     MIP_Problem* mip
01059       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01060     Optimization_Mode opt_mode = build_cxx_optimization_mode(env, j_opt_mode);
01061     mip->set_optimization_mode(opt_mode);
01062   }
01063   CATCH_ALL;
01064 }
01065 
01066 JNIEXPORT jboolean JNICALL
01067 Java_parma_1polyhedra_1library_MIP_1Problem_is_1satisfiable
01068 (JNIEnv* env , jobject j_this_mip_problem) {
01069   try {
01070     MIP_Problem* mip
01071       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01072     return mip->is_satisfiable();
01073   }
01074   CATCH_ALL;
01075   return false;
01076 }
01077 
01078 JNIEXPORT jobject JNICALL Java_parma_1polyhedra_1library_MIP_1Problem_solve
01079 (JNIEnv* env , jobject j_this_mip_problem) {
01080   try {
01081     MIP_Problem* mip
01082       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01083     return build_java_mip_status(env, mip->solve());
01084   }
01085   CATCH_ALL;
01086   jobject null = 0;
01087   return null;
01088 }
01089 
01090 JNIEXPORT void JNICALL
01091 Java_parma_1polyhedra_1library_MIP_1Problem_evaluate_1objective_1function
01092 (JNIEnv* env, jobject j_this_mip_problem, jobject j_gen,
01093  jobject j_coeff_num, jobject j_coeff_den) {
01094   try {
01095     MIP_Problem* mip
01096       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01097     Generator g = build_cxx_generator(env, j_gen);
01098     PPL_DIRTY_TEMP_COEFFICIENT(num);
01099     PPL_DIRTY_TEMP_COEFFICIENT(den);
01100     mip->evaluate_objective_function(g, num, den);
01101     set_coefficient(env, j_coeff_num, build_java_coeff(env, num));
01102     set_coefficient(env, j_coeff_den, build_java_coeff(env, den));
01103   }
01104   CATCH_ALL;
01105 }
01106 
01107 JNIEXPORT jobject JNICALL
01108 Java_parma_1polyhedra_1library_MIP_1Problem_feasible_1point
01109 (JNIEnv* env , jobject j_this_mip_problem) {
01110   try {
01111     MIP_Problem* mip
01112       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01113     Generator g = mip->feasible_point();
01114     return build_java_generator(env, g);
01115   }
01116   CATCH_ALL;
01117   jobject null = 0;
01118   return null;
01119 }
01120 
01121 JNIEXPORT jobject JNICALL
01122 Java_parma_1polyhedra_1library_MIP_1Problem_optimizing_1point
01123 (JNIEnv* env , jobject j_this_mip_problem) {
01124   try {
01125     MIP_Problem* mip
01126       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01127     Generator g = mip->optimizing_point();
01128     return build_java_generator(env, g);
01129   }
01130   CATCH_ALL;
01131   jobject null = 0;
01132   return null;
01133 }
01134 
01135 JNIEXPORT void JNICALL
01136 Java_parma_1polyhedra_1library_MIP_1Problem_optimal_1value
01137 (JNIEnv* env, jobject j_this_mip_problem,
01138  jobject j_coeff_num, jobject j_coeff_den) {
01139   try {
01140     PPL_DIRTY_TEMP_COEFFICIENT(coeff_num);
01141     PPL_DIRTY_TEMP_COEFFICIENT(coeff_den);
01142     MIP_Problem* mip
01143       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01144     mip->optimal_value(coeff_num, coeff_den);
01145     set_coefficient(env, j_coeff_num, build_java_coeff(env, coeff_num));
01146     set_coefficient(env, j_coeff_den, build_java_coeff(env, coeff_den));
01147   }
01148   CATCH_ALL;
01149 }
01150 
01151 JNIEXPORT jboolean JNICALL
01152 Java_parma_1polyhedra_1library_MIP_1Problem_OK
01153 (JNIEnv* env , jobject j_this_mip_problem) {
01154   try {
01155     MIP_Problem* mip
01156       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01157     return mip->OK();
01158   }
01159   CATCH_ALL;
01160   return false;
01161 }
01162 
01163 JNIEXPORT void JNICALL
01164 Java_parma_1polyhedra_1library_MIP_1Problem_build_1cpp_1object__J
01165 (JNIEnv* env, jobject j_this_mip_problem, jlong j_dim) {
01166   try {
01167     dimension_type ppl_dim = jtype_to_unsigned<dimension_type>(j_dim);
01168     MIP_Problem* mip_ptr = new MIP_Problem(ppl_dim);
01169     set_ptr(env, j_this_mip_problem,  mip_ptr);
01170   }
01171   CATCH_ALL;
01172 }
01173 
01174 JNIEXPORT void JNICALL
01175 Java_parma_1polyhedra_1library_MIP_1Problem_build_1cpp_1object__JLparma_1polyhedra_1library_Constraint_1System_2Lparma_1polyhedra_1library_Linear_1Expression_2Lparma_1polyhedra_1library_Optimization_1Mode_2
01176 (JNIEnv* env , jobject j_this_mip_problem, jlong j_dim, jobject j_cs,
01177  jobject j_le, jobject j_opt_mode) {
01178   try {
01179     dimension_type ppl_dim = jtype_to_unsigned<dimension_type>(j_dim);
01180     Constraint_System cs = build_cxx_constraint_system(env, j_cs);
01181     Linear_Expression le = build_cxx_linear_expression(env, j_le);
01182     Optimization_Mode opt_mode =  build_cxx_optimization_mode(env, j_opt_mode);
01183     MIP_Problem* mip_ptr = new MIP_Problem(ppl_dim, cs, le, opt_mode);
01184     set_ptr(env, j_this_mip_problem, mip_ptr);
01185   }
01186   CATCH_ALL;
01187 }
01188 
01189 JNIEXPORT void JNICALL
01190 Java_parma_1polyhedra_1library_MIP_1Problem_build_1cpp_1object__Lparma_1polyhedra_1library_MIP_1Problem_2
01191 (JNIEnv* env, jobject  j_this, jobject j_y)
01192 {
01193   MIP_Problem* y_ptr = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_y));
01194   MIP_Problem* this_ptr = new MIP_Problem(*y_ptr);
01195   set_ptr(env, j_this, this_ptr);
01196 }
01197 
01198 JNIEXPORT void JNICALL
01199 Java_parma_1polyhedra_1library_MIP_1Problem_free
01200 (JNIEnv* env, jobject j_this) {
01201   MIP_Problem* mip  = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this));
01202   if (!is_java_marked(env, j_this)) {
01203     delete mip;
01204     void* null_ptr = 0;
01205     set_ptr(env, j_this, null_ptr);
01206   }
01207 }
01208 
01209 JNIEXPORT void JNICALL
01210 Java_parma_1polyhedra_1library_MIP_1Problem_finalize
01211 (JNIEnv* env, jobject j_this) {
01212   MIP_Problem* mip = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this));
01213   if (!is_java_marked(env, j_this))
01214     delete mip;
01215 }
01216 
01217 JNIEXPORT jlong JNICALL
01218 Java_parma_1polyhedra_1library_MIP_1Problem_total_1memory_1in_1bytes
01219 (JNIEnv* env , jobject j_this_mip_problem) {
01220   try {
01221     MIP_Problem* mip
01222       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this_mip_problem));
01223     return mip->total_memory_in_bytes();
01224   }
01225   CATCH_ALL;
01226   return 0;
01227 }
01228 
01229 JNIEXPORT jstring JNICALL
01230 Java_parma_1polyhedra_1library_MIP_1Problem_toString
01231 (JNIEnv* env, jobject j_this) {
01232   MIP_Problem* this_ptr
01233     = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this));
01234   using namespace Parma_Polyhedra_Library::IO_Operators;
01235   std::ostringstream s;
01236   s << *this_ptr;
01237   return env->NewStringUTF(s.str().c_str());
01238 }
01239 
01240 JNIEXPORT jstring JNICALL
01241 Java_parma_1polyhedra_1library_MIP_1Problem_ascii_1dump
01242 (JNIEnv* env, jobject j_this) {
01243   try {
01244     MIP_Problem* this_ptr
01245       = reinterpret_cast<MIP_Problem*>(get_ptr(env, j_this));
01246     std::ostringstream s;
01247     this_ptr->ascii_dump(s);
01248     return env->NewStringUTF(s.str().c_str());
01249   }
01250   CATCH_ALL;
01251   return 0;
01252 }
01253 
01254 JNIEXPORT jstring JNICALL
01255 Java_parma_1polyhedra_1library_Linear_1Expression_toString
01256 (JNIEnv* env, jobject j_this) {
01257   using namespace Parma_Polyhedra_Library::IO_Operators;
01258   Linear_Expression ppl_le = build_cxx_linear_expression(env, j_this);
01259   std::ostringstream s;
01260   s << ppl_le;
01261   return env->NewStringUTF(s.str().c_str());
01262 }
01263 
01264 JNIEXPORT jstring JNICALL
01265 Java_parma_1polyhedra_1library_Linear_1Expression_ascii_1dump
01266 (JNIEnv* env, jobject j_this) {
01267   try {
01268     std::ostringstream s;
01269     Linear_Expression le = build_cxx_linear_expression(env, j_this);
01270     le.ascii_dump(s);
01271     return env->NewStringUTF(s.str().c_str());
01272   }
01273   CATCH_ALL;
01274   return 0;
01275 }
01276 
01277 JNIEXPORT jstring JNICALL
01278 Java_parma_1polyhedra_1library_Generator_toString
01279 (JNIEnv* env, jobject g) {
01280   using namespace Parma_Polyhedra_Library::IO_Operators;
01281   std::ostringstream s;
01282   Generator ppl_g = build_cxx_generator(env, g);
01283   s << ppl_g;
01284   return env->NewStringUTF(s.str().c_str());
01285 }
01286 
01287 JNIEXPORT jstring JNICALL
01288 Java_parma_1polyhedra_1library_Generator_ascii_1dump
01289 (JNIEnv* env, jobject j_this) {
01290   try {
01291     std::ostringstream s;
01292     Generator g = build_cxx_generator(env, j_this);
01293     g.ascii_dump(s);
01294     return env->NewStringUTF(s.str().c_str());
01295   }
01296   CATCH_ALL;
01297   return 0;
01298 }
01299 
01300 JNIEXPORT jstring JNICALL
01301 Java_parma_1polyhedra_1library_Constraint_toString
01302 (JNIEnv* env, jobject c) {
01303   using namespace Parma_Polyhedra_Library::IO_Operators;
01304   std::ostringstream s;
01305   Constraint ppl_c = build_cxx_constraint(env, c);
01306   s << ppl_c;
01307   return env->NewStringUTF(s.str().c_str());
01308 }
01309 
01310 JNIEXPORT jstring JNICALL
01311 Java_parma_1polyhedra_1library_Constraint_ascii_1dump
01312 (JNIEnv* env, jobject j_this) {
01313   try {
01314     std::ostringstream s;
01315     Constraint c = build_cxx_constraint(env, j_this);
01316     c.ascii_dump(s);
01317     return env->NewStringUTF(s.str().c_str());
01318   }
01319   CATCH_ALL;
01320   return 0;
01321 }
01322 
01323 JNIEXPORT jstring JNICALL
01324 Java_parma_1polyhedra_1library_Grid_1Generator_toString
01325 (JNIEnv* env, jobject g) {
01326   using namespace Parma_Polyhedra_Library::IO_Operators;
01327   std::ostringstream s;
01328   Grid_Generator ppl_g = build_cxx_grid_generator(env, g);
01329   s << ppl_g;
01330   return env->NewStringUTF(s.str().c_str());
01331 }
01332 
01333 JNIEXPORT jstring JNICALL
01334 Java_parma_1polyhedra_1library_Grid_1Generator_ascii_1dump
01335 (JNIEnv* env, jobject j_this) {
01336   try {
01337     std::ostringstream s;
01338     Grid_Generator g = build_cxx_grid_generator(env, j_this);
01339     g.ascii_dump(s);
01340     return env->NewStringUTF(s.str().c_str());
01341   }
01342   CATCH_ALL;
01343   return 0;
01344 }
01345 
01346 JNIEXPORT jstring JNICALL
01347 Java_parma_1polyhedra_1library_Congruence_toString
01348 (JNIEnv* env, jobject g) {
01349   using namespace Parma_Polyhedra_Library::IO_Operators;
01350   std::ostringstream s;
01351   Congruence ppl_g = build_cxx_congruence(env, g);
01352   s << ppl_g;
01353   return env->NewStringUTF(s.str().c_str());
01354 }
01355 
01356 JNIEXPORT jstring JNICALL
01357 Java_parma_1polyhedra_1library_Congruence_ascii_1dump
01358 (JNIEnv* env, jobject j_this) {
01359   try {
01360     std::ostringstream s;
01361     Congruence c = build_cxx_congruence(env, j_this);
01362     c.ascii_dump(s);
01363     return env->NewStringUTF(s.str().c_str());
01364   }
01365   CATCH_ALL;
01366   return 0;
01367 }
01368 
01369 JNIEXPORT jstring JNICALL
01370 Java_parma_1polyhedra_1library_Grid_1Generator_1System_toString
01371 (JNIEnv* env, jobject ggs) {
01372   using namespace Parma_Polyhedra_Library::IO_Operators;
01373   std::ostringstream s;
01374   Grid_Generator_System ppl_ggs = build_cxx_grid_generator_system(env, ggs);
01375   s << ppl_ggs;
01376   return env->NewStringUTF(s.str().c_str());
01377 }
01378 
01379 JNIEXPORT jstring JNICALL
01380 Java_parma_1polyhedra_1library_Grid_1Generator_1System_ascii_1dump
01381 (JNIEnv* env, jobject j_this) {
01382   try {
01383     std::ostringstream s;
01384     Grid_Generator_System gs = build_cxx_grid_generator_system(env, j_this);
01385     gs.ascii_dump(s);
01386     return env->NewStringUTF(s.str().c_str());
01387   }
01388   CATCH_ALL;
01389   return 0;
01390 }
01391 
01392 JNIEXPORT jstring JNICALL
01393 Java_parma_1polyhedra_1library_Generator_1System_toString
01394 (JNIEnv* env, jobject gs) {
01395   using namespace Parma_Polyhedra_Library::IO_Operators;
01396   std::ostringstream s;
01397   Generator_System ppl_gs = build_cxx_generator_system(env, gs);
01398   s << ppl_gs;
01399   return env->NewStringUTF(s.str().c_str());
01400 }
01401 
01402 JNIEXPORT jstring JNICALL
01403 Java_parma_1polyhedra_1library_Generator_1System_ascii_1dump
01404 (JNIEnv* env, jobject j_this) {
01405   try {
01406     std::ostringstream s;
01407     Generator_System gs = build_cxx_generator_system(env, j_this);
01408     gs.ascii_dump(s);
01409     return env->NewStringUTF(s.str().c_str());
01410   }
01411   CATCH_ALL;
01412   return 0;
01413 }
01414 
01415 JNIEXPORT jstring JNICALL
01416 Java_parma_1polyhedra_1library_Constraint_1System_toString
01417 (JNIEnv* env, jobject cs) {
01418   using namespace Parma_Polyhedra_Library::IO_Operators;
01419   std::ostringstream s;
01420   Constraint_System ppl_cs = build_cxx_constraint_system(env, cs);
01421   s << ppl_cs;
01422   return env->NewStringUTF(s.str().c_str());
01423 }
01424 
01425 
01426 JNIEXPORT jstring JNICALL
01427 Java_parma_1polyhedra_1library_Constraint_1System_ascii_1dump
01428 (JNIEnv* env, jobject j_this) {
01429   try {
01430     std::ostringstream s;
01431     Constraint_System cs = build_cxx_constraint_system(env, j_this);
01432     cs.ascii_dump(s);
01433     return env->NewStringUTF(s.str().c_str());
01434   }
01435   CATCH_ALL;
01436   return 0;
01437 }
01438 
01439 JNIEXPORT jstring JNICALL
01440 Java_parma_1polyhedra_1library_Congruence_1System_toString
01441 (JNIEnv* env, jobject cgs) {
01442   using namespace Parma_Polyhedra_Library::IO_Operators;
01443   std::ostringstream s;
01444   Congruence_System ppl_cgs = build_cxx_congruence_system(env, cgs);
01445   s << ppl_cgs;
01446   return env->NewStringUTF(s.str().c_str());
01447 }
01448 
01449 JNIEXPORT jstring JNICALL
01450 Java_parma_1polyhedra_1library_Congruence_1System_ascii_1dump
01451 (JNIEnv* env, jobject j_this) {
01452   try {
01453     std::ostringstream s;
01454     Congruence_System cs = build_cxx_congruence_system(env, j_this);
01455     cs.ascii_dump(s);
01456     return env->NewStringUTF(s.str().c_str());
01457   }
01458   CATCH_ALL;
01459   return 0;
01460 }
01461 
01462 JNIEXPORT jstring JNICALL
01463 Java_parma_1polyhedra_1library_IO_wrap_1string
01464 (JNIEnv* env, jclass, jstring str, jint indent_depth,
01465  jint preferred_first_line_length, jint preferred_line_length) {
01466   try {
01467     unsigned ind = jtype_to_unsigned<unsigned int>(indent_depth);
01468     unsigned pfll = jtype_to_unsigned<unsigned int>
01469       (preferred_first_line_length);
01470     unsigned pll = jtype_to_unsigned<unsigned int>(preferred_line_length);
01471     const char* chars = env->GetStringUTFChars(str, 0);
01472     CHECK_RESULT_RETURN(env, chars, 0);
01473     using namespace Parma_Polyhedra_Library::IO_Operators;
01474     std::string s = wrap_string(chars, ind, pfll, pll);
01475     env->ReleaseStringUTFChars(str, chars);
01476     return env->NewStringUTF(s.c_str());
01477   }
01478   CATCH_ALL;
01479   return 0;
01480 }
01481 
01482 JNIEXPORT void JNICALL
01483 Java_parma_1polyhedra_1library_PIP_1Problem_build_1cpp_1object__J
01484 (JNIEnv* env, jobject j_this_pip_problem, jlong j_dim) {
01485   try {
01486     dimension_type ppl_dim = jtype_to_unsigned<dimension_type>(j_dim);
01487     PIP_Problem* pip_ptr = new PIP_Problem(ppl_dim);
01488     set_ptr(env, j_this_pip_problem,  pip_ptr);
01489   }
01490   CATCH_ALL;
01491 }
01492 
01493 JNIEXPORT void JNICALL
01494 Java_parma_1polyhedra_1library_PIP_1Problem_build_1cpp_1object__JLparma_1polyhedra_1library_Constraint_1System_2Lparma_1polyhedra_1library_Variables_1Set_2
01495 (JNIEnv* env , jobject j_this_pip_problem, jlong j_dim,
01496  jobject j_cs, jobject j_vars) {
01497   try {
01498     dimension_type p_dim = jtype_to_unsigned<dimension_type>(j_dim);
01499     Constraint_System p_cs = build_cxx_constraint_system(env, j_cs);
01500     Variables_Set p_vars = build_cxx_variables_set(env, j_vars);
01501     PIP_Problem* pip_ptr = new PIP_Problem(p_dim, p_cs.begin(),
01502                                            p_cs.end(), p_vars);
01503     set_ptr(env, j_this_pip_problem, pip_ptr);
01504   }
01505   CATCH_ALL;
01506 }
01507 
01508 JNIEXPORT void JNICALL
01509 Java_parma_1polyhedra_1library_PIP_1Problem_build_1cpp_1object__Lparma_1polyhedra_1library_PIP_1Problem_2
01510 (JNIEnv* env, jobject  j_this, jobject j_y)
01511 {
01512   PIP_Problem* y_ptr = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_y));
01513   PIP_Problem* this_ptr = new PIP_Problem(*y_ptr);
01514   set_ptr(env, j_this, this_ptr);
01515 }
01516 
01517 JNIEXPORT jboolean JNICALL
01518 Java_parma_1polyhedra_1library_PIP_1Problem_OK
01519 (JNIEnv* env , jobject j_this_pip_problem) {
01520   try {
01521     PIP_Problem* pip
01522       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01523     return pip->OK();
01524   }
01525   CATCH_ALL;
01526   return false;
01527 }
01528 
01529 JNIEXPORT jlong JNICALL
01530 Java_parma_1polyhedra_1library_PIP_1Problem_total_1memory_1in_1bytes
01531 (JNIEnv* env , jobject j_this_pip_problem) {
01532   try {
01533     PIP_Problem* pip
01534       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01535     return pip->total_memory_in_bytes();
01536   }
01537   CATCH_ALL;
01538   return 0;
01539 }
01540 
01541 JNIEXPORT jlong JNICALL
01542 Java_parma_1polyhedra_1library_PIP_1Problem_external_1memory_1in_1bytes
01543 (JNIEnv* env , jobject j_this_pip_problem) {
01544   try {
01545     PIP_Problem* pip
01546       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01547     return pip->external_memory_in_bytes();
01548   }
01549   CATCH_ALL;
01550   return 0;
01551 }
01552 
01553 JNIEXPORT jstring JNICALL
01554 Java_parma_1polyhedra_1library_PIP_1Problem_toString
01555 (JNIEnv* env, jobject j_this) {
01556   PIP_Problem* this_ptr
01557     = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this));
01558   using namespace Parma_Polyhedra_Library::IO_Operators;
01559   std::ostringstream s;
01560   s << *this_ptr;
01561   return env->NewStringUTF(s.str().c_str());
01562 }
01563 
01564 JNIEXPORT jstring JNICALL
01565 Java_parma_1polyhedra_1library_PIP_1Problem_ascii_1dump
01566 (JNIEnv* env, jobject j_this) {
01567   try {
01568     PIP_Problem* this_ptr
01569       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this));
01570     std::ostringstream s;
01571     this_ptr->ascii_dump(s);
01572     return env->NewStringUTF(s.str().c_str());
01573   }
01574   CATCH_ALL;
01575   return 0;
01576 }
01577 
01578 JNIEXPORT void JNICALL
01579 Java_parma_1polyhedra_1library_PIP_1Problem_free
01580 (JNIEnv* env, jobject j_this) {
01581   PIP_Problem* pip  = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this));
01582   if (!is_java_marked(env, j_this)) {
01583     delete pip;
01584     void* null_ptr = 0;
01585     set_ptr(env, j_this, null_ptr);
01586   }
01587 }
01588 
01589 JNIEXPORT void JNICALL
01590 Java_parma_1polyhedra_1library_PIP_1_problem_finalize
01591 (JNIEnv* env, jobject j_this) {
01592   PIP_Problem* pip = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this));
01593   if (!is_java_marked(env, j_this))
01594     delete pip;
01595 }
01596 
01597 JNIEXPORT jlong JNICALL
01598 Java_parma_1polyhedra_1library_PIP_1Problem_max_1space_1dimension
01599 (JNIEnv* env , jobject j_this_pip_problem) {
01600   try {
01601     PIP_Problem* pip
01602       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01603     return pip->max_space_dimension();
01604   }
01605   CATCH_ALL;
01606   return 0;
01607 }
01608 
01609 JNIEXPORT jlong JNICALL
01610 Java_parma_1polyhedra_1library_PIP_1Problem_space_1dimension
01611 (JNIEnv* env , jobject j_this_pip_problem) {
01612   try {
01613     PIP_Problem* pip
01614       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01615     return pip->space_dimension();
01616   }
01617   CATCH_ALL;
01618   return 0;
01619 }
01620 
01621 JNIEXPORT jlong JNICALL
01622 Java_parma_1polyhedra_1library_PIP_1Problem_get_1big_1parameter_1dimension
01623 (JNIEnv* env , jobject j_this_pip_problem) {
01624   try {
01625     PIP_Problem* pip
01626       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01627     return pip->get_big_parameter_dimension();
01628   }
01629   CATCH_ALL;
01630   return 0;
01631 }
01632 
01633 JNIEXPORT jobject JNICALL
01634 Java_parma_1polyhedra_1library_PIP_1Problem_parameter_1space_1dimensions
01635 (JNIEnv* env , jobject j_this_pip_problem) {
01636   try {
01637     PIP_Problem* pip
01638       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01639     return build_java_variables_set(env, pip->parameter_space_dimensions());
01640   }
01641   CATCH_ALL;
01642   jobject null = 0;
01643   return null;
01644 }
01645 
01646 JNIEXPORT void JNICALL
01647 Java_parma_1polyhedra_1library_PIP_1Problem_set_1big_1parameter_1dimension
01648 (JNIEnv* env , jobject j_this_pip_problem, jlong j_dim) {
01649   try {
01650     PIP_Problem* pip
01651       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01652     dimension_type ppl_dim = jtype_to_unsigned<dimension_type>(j_dim);
01653     pip->set_big_parameter_dimension(ppl_dim);
01654   }
01655   CATCH_ALL;
01656 }
01657 
01658 JNIEXPORT jlong JNICALL
01659 Java_parma_1polyhedra_1library_PIP_1Problem_number_1of_1parameter_1space_1dimensions
01660 (JNIEnv* env , jobject j_this_pip_problem) {
01661   try {
01662     PIP_Problem* pip
01663       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01664     return pip->parameter_space_dimensions().size();
01665   }
01666   CATCH_ALL;
01667   return 0;
01668 }
01669 
01670 JNIEXPORT void JNICALL
01671 Java_parma_1polyhedra_1library_PIP_1Problem_add_1space_1dimensions_1and_1embed
01672 (JNIEnv* env , jobject j_this_pip_problem, jlong j_dim_vars, jlong j_dim_pars) {
01673   try {
01674     PIP_Problem* pip
01675       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01676     dimension_type ppl_dim_vars = jtype_to_unsigned<dimension_type>(j_dim_vars);
01677     dimension_type ppl_dim_pars = jtype_to_unsigned<dimension_type>(j_dim_pars);
01678     pip->add_space_dimensions_and_embed(ppl_dim_vars, ppl_dim_pars);
01679   }
01680   CATCH_ALL;
01681 }
01682 
01683 JNIEXPORT void JNICALL
01684 Java_parma_1polyhedra_1library_PIP_1Problem_add_1to_1parameter_1space_1dimensions
01685 (JNIEnv* env , jobject j_this_pip_problem, jobject j_vars) {
01686   try {
01687     PIP_Problem* pip
01688       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01689     Variables_Set ppl_vars = build_cxx_variables_set(env, j_vars);
01690     pip->add_to_parameter_space_dimensions(ppl_vars);
01691   }
01692   CATCH_ALL;
01693 }
01694 
01695 JNIEXPORT jlong JNICALL
01696 Java_parma_1polyhedra_1library_PIP_1Problem_number_1of_1constraints
01697 (JNIEnv* env , jobject j_this_pip_problem) {
01698   try {
01699     PIP_Problem* pip
01700       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01701     return pip->constraints_end() - pip->constraints_begin();
01702   }
01703   CATCH_ALL;
01704   return 0;
01705 }
01706 
01707 JNIEXPORT void JNICALL
01708 Java_parma_1polyhedra_1library_PIP_1Problem_add_1constraint
01709 (JNIEnv* env , jobject j_this_pip_problem, jobject j_c) {
01710   try {
01711     PIP_Problem* pip
01712       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01713     Constraint c = build_cxx_constraint(env, j_c);
01714     pip->add_constraint(c);
01715   }
01716   CATCH_ALL;
01717 }
01718 
01719 JNIEXPORT void JNICALL
01720 Java_parma_1polyhedra_1library_PIP_1Problem_add_1constraints
01721 (JNIEnv* env , jobject j_this_pip_problem, jobject j_cs) {
01722   try {
01723     PIP_Problem* pip
01724       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01725     Constraint_System cs = build_cxx_constraint_system(env, j_cs);
01726     pip->add_constraints(cs);
01727   }
01728   CATCH_ALL;
01729 }
01730 
01731 JNIEXPORT jboolean JNICALL
01732 Java_parma_1polyhedra_1library_PIP_1Problem_is_1satisfiable
01733 (JNIEnv* env , jobject j_this_pip_problem) {
01734   try {
01735     PIP_Problem* pip
01736       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01737     return pip->is_satisfiable();
01738   }
01739   CATCH_ALL;
01740   return false;
01741 }
01742 
01743 JNIEXPORT jobject JNICALL Java_parma_1polyhedra_1library_PIP_1Problem_solve
01744 (JNIEnv* env , jobject j_this_pip_problem) {
01745   try {
01746     PIP_Problem* pip
01747       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01748     return build_java_pip_status(env, pip->solve());
01749   }
01750   CATCH_ALL;
01751   jobject null = 0;
01752   return null;
01753 }
01754 
01755 JNIEXPORT jobject JNICALL Java_parma_1polyhedra_1library_PIP_1Problem_solution
01756 (JNIEnv* env , jobject j_this_pip_problem) {
01757   try {
01758     PIP_Problem* pip
01759       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01760     const PIP_Tree_Node* solution = pip->solution();
01761 
01762     jclass j_class_s = env->FindClass("parma_polyhedra_library/PIP_Tree_Node");
01763     CHECK_RESULT_ASSERT(env, j_class_s);
01764     jmethodID j_ctr_id_s = env->GetMethodID(j_class_s, "<init>", "()V");
01765     CHECK_RESULT_ASSERT(env, j_ctr_id_s);
01766     jobject j_obj_s = env->NewObject(j_class_s, j_ctr_id_s);
01767     CHECK_RESULT_RETURN(env, j_obj_s, 0);
01768     set_ptr(env, j_obj_s, solution);
01769     return j_obj_s;
01770   }
01771   CATCH_ALL;
01772   jobject null = 0;
01773   return null;
01774 }
01775 
01776 JNIEXPORT jobject JNICALL
01777 Java_parma_1polyhedra_1library_PIP_1Problem_optimizing_1solution
01778 (JNIEnv* env , jobject j_this_pip_problem) {
01779   try {
01780     PIP_Problem* pip
01781       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01782     const PIP_Tree_Node* solution = pip->optimizing_solution();
01783 
01784     jclass j_class_s = env->FindClass("parma_polyhedra_library/PIP_Tree_Node");
01785     CHECK_RESULT_ASSERT(env, j_class_s);
01786     jmethodID j_ctr_id_s = env->GetMethodID(j_class_s, "<init>", "()V");
01787     CHECK_RESULT_ASSERT(env, j_ctr_id_s);
01788     jobject j_obj_s = env->NewObject(j_class_s, j_ctr_id_s);
01789     CHECK_RESULT_RETURN(env, j_obj_s, 0);
01790     set_ptr(env, j_obj_s, solution);
01791     return j_obj_s;
01792   }
01793   CATCH_ALL;
01794   jobject null = 0;
01795   return null;
01796 }
01797 
01798 JNIEXPORT jobject JNICALL
01799 Java_parma_1polyhedra_1library_PIP_1Problem_get_1pip_1problem_1control_1parameter
01800 (JNIEnv* env , jobject j_this_pip_problem,
01801  jobject j_cpn) {
01802   try {
01803     PIP_Problem* pip
01804       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01805     PIP_Problem::Control_Parameter_Name ppl_cpn
01806       = build_cxx_pip_problem_control_parameter_name(env, j_cpn);
01807     return
01808       build_java_pip_problem_control_parameter_value
01809         (env, pip->get_control_parameter(ppl_cpn));
01810   }
01811   CATCH_ALL;
01812   jobject null = 0;
01813   return null;
01814 }
01815 
01816 JNIEXPORT jobject JNICALL
01817 Java_parma_1polyhedra_1library_PIP_1Problem_constraint_1at_1index
01818 (JNIEnv* env, jobject j_this_pip_problem, jlong j_index) {
01819   try {
01820     PIP_Problem* pip
01821       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01822     dimension_type p_index = jtype_to_unsigned<dimension_type>(j_index);
01823     return build_java_constraint(env, *(pip->constraints_begin() + p_index));
01824   }
01825   CATCH_ALL;
01826   jobject null = 0;
01827   return null;
01828 }
01829 
01830 JNIEXPORT jobject JNICALL
01831 Java_parma_1polyhedra_1library_PIP_1Problem_constraints
01832 (JNIEnv* env, jobject j_this_pip_problem) {
01833   try {
01834     jobject j_cs = env->NewObject(cached_classes.Constraint_System,
01835                                   cached_FMIDs.Constraint_System_init_ID);
01836     CHECK_RESULT_RETURN(env, j_cs, 0);
01837 
01838     PIP_Problem* pip
01839       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01840     for (PIP_Problem::const_iterator cs_it = pip->constraints_begin(),
01841            cs_end = pip->constraints_end(); cs_it != cs_end; ++cs_it) {
01842       jobject j_constraint = build_java_constraint(env, *cs_it);
01843       env->CallBooleanMethod(j_cs,
01844                              cached_FMIDs.Constraint_System_add_ID,
01845                              j_constraint);
01846       CHECK_EXCEPTION_RETURN(env, 0);
01847     }
01848     return j_cs;
01849   }
01850   CATCH_ALL;
01851   jobject null = 0;
01852   return null;
01853 }
01854 
01855 JNIEXPORT void JNICALL
01856 Java_parma_1polyhedra_1library_PIP_1Problem_set_1pip_1problem_1control_1parameter
01857 (JNIEnv* env, jobject j_this_pip_problem, jobject j_cpv) {
01858   try {
01859     PIP_Problem* pip
01860       = reinterpret_cast<PIP_Problem*>(get_ptr(env, j_this_pip_problem));
01861     PIP_Problem::Control_Parameter_Value ppl_cpv
01862       = build_cxx_pip_problem_control_parameter_value(env, j_cpv);
01863     pip->set_control_parameter(ppl_cpv);
01864   }
01865   CATCH_ALL;
01866 }
01867 
01868 JNIEXPORT jboolean JNICALL
01869 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_OK
01870 (JNIEnv* env, jobject j_this_pip_tree) {
01871   try {
01872     PIP_Tree_Node* pip
01873       = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this_pip_tree));
01874     return pip->OK();
01875   }
01876   CATCH_ALL;
01877   return false;
01878 }
01879 
01880 JNIEXPORT void JNICALL
01881 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_free
01882 (JNIEnv* env, jobject j_this) {
01883   PIP_Tree_Node* pip  = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this));
01884   if (!is_java_marked(env, j_this)) {
01885     delete pip;
01886     void* null_ptr = 0;
01887     set_ptr(env, j_this, null_ptr);
01888   }
01889 }
01890 
01891 JNIEXPORT void JNICALL
01892 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_finalize
01893 (JNIEnv* env, jobject j_this) {
01894   PIP_Tree_Node* pip = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this));
01895   if (!is_java_marked(env, j_this))
01896     delete pip;
01897 }
01898 
01899 JNIEXPORT jobject JNICALL
01900 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_constraints
01901 (JNIEnv* env, jobject j_this_pip_node) {
01902   try {
01903     jobject j_cs = env->NewObject(cached_classes.Constraint_System,
01904                                   cached_FMIDs.Constraint_System_init_ID);
01905     CHECK_RESULT_RETURN(env, j_cs, 0);
01906 
01907     PIP_Tree_Node* pip
01908       = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this_pip_node));
01909     return build_java_constraint_system(env, pip->constraints());
01910   }
01911   CATCH_ALL;
01912   jobject null = 0;
01913   return null;
01914 }
01915 
01916 JNIEXPORT jobject JNICALL
01917 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_as_1solution
01918 (JNIEnv* env, jobject j_this) {
01919   try {
01920     PIP_Tree_Node* pip = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this));
01921     const PIP_Solution_Node* solution = pip->as_solution();
01922     if (solution == 0) {
01923       jobject null = 0;
01924       return null;
01925     }
01926     // Here we have a solution node.
01927     jclass j_class_s
01928       = env->FindClass("parma_polyhedra_library/PIP_Solution_Node");
01929     CHECK_RESULT_ASSERT(env, j_class_s);
01930     jmethodID j_ctr_id_s = env->GetMethodID(j_class_s, "<init>", "()V");
01931     CHECK_RESULT_ASSERT(env, j_ctr_id_s);
01932     jobject j_obj_s = env->NewObject(j_class_s, j_ctr_id_s);
01933     CHECK_RESULT_RETURN(env, j_obj_s, 0);
01934     set_ptr(env, j_obj_s, solution);
01935     return j_obj_s;
01936   }
01937   CATCH_ALL;
01938   jobject null = 0;
01939   return null;
01940 }
01941 
01942 JNIEXPORT jobject JNICALL
01943 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_as_1decision
01944 (JNIEnv* env, jobject j_this) {
01945   try {
01946     PIP_Tree_Node* pip = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this));
01947     const PIP_Decision_Node* decision = pip->as_decision();
01948     if (decision == 0) {
01949       jobject null = 0;
01950       return null;
01951     }
01952     // Here we have a decision node.
01953     jclass j_class_d
01954       = env->FindClass("parma_polyhedra_library/PIP_Decision_Node");
01955     CHECK_RESULT_ASSERT(env, j_class_d);
01956     jmethodID j_ctr_id_d = env->GetMethodID(j_class_d, "<init>", "()V");
01957     CHECK_RESULT_ASSERT(env, j_ctr_id_d);
01958     jobject j_obj_d = env->NewObject(j_class_d, j_ctr_id_d);
01959     CHECK_RESULT_RETURN(env, j_obj_d, 0);
01960     set_ptr(env, j_obj_d, decision);
01961     return j_obj_d;
01962   }
01963   CATCH_ALL;
01964   jobject null = 0;
01965   return null;
01966 }
01967 
01968 JNIEXPORT jlong JNICALL
01969 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_number_1of_1artificials
01970 (JNIEnv* env , jobject j_this) {
01971   try {
01972     PIP_Tree_Node* pip = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this));
01973     return pip->art_parameter_count();
01974   }
01975   CATCH_ALL;
01976   return 0;
01977 }
01978 
01979 JNIEXPORT jobject JNICALL
01980 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_artificials
01981 (JNIEnv* env, jobject j_this_pip_node) {
01982   try {
01983     jobject j_arts
01984       = env->NewObject(cached_classes.Artificial_Parameter_Sequence,
01985                        cached_FMIDs.Artificial_Parameter_Sequence_init_ID);
01986     CHECK_RESULT_RETURN(env, j_arts, 0);
01987 
01988     const PIP_Tree_Node* pip_node
01989       = reinterpret_cast<const PIP_Tree_Node*>(get_ptr(env, j_this_pip_node));
01990     for (PIP_Tree_Node::Artificial_Parameter_Sequence::const_iterator
01991            i = pip_node->art_parameter_begin(),
01992            i_end = pip_node->art_parameter_end(); i != i_end; ++i) {
01993       jobject j_art = build_java_artificial_parameter(env, *i);
01994       env->CallBooleanMethod(j_arts,
01995                              cached_FMIDs.Artificial_Parameter_Sequence_add_ID,
01996                              j_art);
01997       CHECK_EXCEPTION_RETURN(env, 0);
01998     }
01999     return j_arts;
02000   }
02001   CATCH_ALL;
02002   jobject null = 0;
02003   return null;
02004 }
02005 
02006 JNIEXPORT jstring JNICALL
02007 Java_parma_1polyhedra_1library_PIP_1Tree_1Node_toString
02008 (JNIEnv* env, jobject j_this) {
02009   PIP_Tree_Node* this_ptr
02010     = reinterpret_cast<PIP_Tree_Node*>(get_ptr(env, j_this));
02011   using namespace Parma_Polyhedra_Library::IO_Operators;
02012   std::ostringstream s;
02013   s << *this_ptr;
02014   return env->NewStringUTF(s.str().c_str());
02015 }
02016 
02017 JNIEXPORT jobject JNICALL
02018 Java_parma_1polyhedra_1library_PIP_1Decision_1Node_child_1node
02019 (JNIEnv* env, jobject j_this, jboolean j_branch) {
02020   try {
02021     PIP_Decision_Node* dec_node
02022       = reinterpret_cast<PIP_Decision_Node*>(get_ptr(env, j_this));
02023     const PIP_Tree_Node* child = dec_node->child_node(j_branch);
02024     if (child == 0) {
02025       jobject null = 0;
02026       return null;
02027     }
02028     jclass j_class_s = env->FindClass("parma_polyhedra_library/PIP_Tree_Node");
02029     CHECK_RESULT_ASSERT(env, j_class_s);
02030     jmethodID j_ctr_id_s = env->GetMethodID(j_class_s, "<init>", "()V");
02031     CHECK_RESULT_ASSERT(env, j_ctr_id_s);
02032     jobject j_obj_s = env->NewObject(j_class_s, j_ctr_id_s);
02033     CHECK_RESULT_RETURN(env, j_obj_s, 0);
02034     set_ptr(env, j_obj_s, child);
02035     return j_obj_s;
02036   }
02037   CATCH_ALL;
02038   jobject null = 0;
02039   return null;
02040 }
02041 
02042 JNIEXPORT jobject JNICALL
02043 Java_parma_1polyhedra_1library_PIP_1Solution_1Node_parametric_1values
02044 (JNIEnv* env, jobject j_this, jobject j_var) {
02045   PIP_Solution_Node* pip
02046     = reinterpret_cast<PIP_Solution_Node*>(get_ptr(env, j_this));
02047   Variable v = build_cxx_variable(env, j_var);
02048   return build_linear_expression(env, pip->parametric_values(v));
02049 }
02050 
02051 JNIEXPORT void JNICALL
02052 Java_parma_1polyhedra_1library_Artificial_1Parameter_initIDs
02053 (JNIEnv* env, jclass j_artificial_parameter_class) {
02054   jfieldID fID;
02055   fID = env->GetFieldID(j_artificial_parameter_class, "le",
02056                         "Lparma_polyhedra_library/Linear_Expression;");
02057   CHECK_RESULT_ASSERT(env, fID);
02058   cached_FMIDs.Artificial_Parameter_le_ID = fID;
02059   fID = env->GetFieldID(j_artificial_parameter_class, "den",
02060                         "Lparma_polyhedra_library/Coefficient;");
02061   CHECK_RESULT_ASSERT(env, fID);
02062   cached_FMIDs.Artificial_Parameter_den_ID = fID;
02063   jmethodID mID;
02064   mID = env->GetMethodID(j_artificial_parameter_class, "<init>",
02065                          "(Lparma_polyhedra_library/Linear_Expression;"
02066                          "Lparma_polyhedra_library/Coefficient;)V");
02067   CHECK_RESULT_ASSERT(env, mID);
02068   cached_FMIDs.Artificial_Parameter_init_ID = mID;
02069 }
02070 
02071 JNIEXPORT jstring JNICALL
02072 Java_parma_1polyhedra_1library_Artificial_1Parameter_ascii_1dump
02073 (JNIEnv* env, jobject j_this) {
02074   try {
02075     std::ostringstream s;
02076     PIP_Tree_Node::Artificial_Parameter art
02077       = build_cxx_artificial_parameter(env, j_this);
02078     art.ascii_dump(s);
02079     return env->NewStringUTF(s.str().c_str());
02080   }
02081   CATCH_ALL;
02082   return 0;
02083 }
02084 
02085 JNIEXPORT jstring JNICALL
02086 Java_parma_1polyhedra_1library_Artificial_1Parameter_toString
02087 (JNIEnv* env, jobject j_this) {
02088   using namespace Parma_Polyhedra_Library::IO_Operators;
02089   std::ostringstream s;
02090   PIP_Tree_Node::Artificial_Parameter ppl_art
02091     = build_cxx_artificial_parameter(env, j_this);
02092   s << ppl_art;
02093   return env->NewStringUTF(s.str().c_str());
02094 }
02095 
02096 JNIEXPORT void JNICALL
02097 Java_parma_1polyhedra_1library_Artificial_1Parameter_1Sequence_initIDs
02098 (JNIEnv* env, jclass j_aps_class) {
02099   jmethodID mID;
02100   mID = env->GetMethodID(j_aps_class, "<init>", "()V");
02101   CHECK_RESULT_ASSERT(env, mID);
02102   cached_FMIDs.Artificial_Parameter_Sequence_init_ID = mID;
02103   mID = env->GetMethodID(j_aps_class, "add", "(Ljava/lang/Object;)Z");
02104   CHECK_RESULT_ASSERT(env, mID);
02105   cached_FMIDs.Artificial_Parameter_Sequence_add_ID = mID;
02106 }
02107 
02108 
02109 JNIEXPORT void JNICALL
02110 Java_parma_1polyhedra_1library_Partial_1Function_build_1cpp_1object
02111 (JNIEnv* env, jobject j_this_pfunc) {
02112   try {
02113     Partial_Function* pfunc_ptr = new Partial_Function;
02114     set_ptr(env, j_this_pfunc,  pfunc_ptr);
02115   }
02116   CATCH_ALL;
02117 }
02118 
02119 JNIEXPORT jboolean JNICALL
02120 Java_parma_1polyhedra_1library_Partial_1Function_has_1empty_1codomain
02121 (JNIEnv* env , jobject j_this_pfunc) {
02122   try {
02123     Partial_Function* pfunc
02124       = reinterpret_cast<Partial_Function*>(get_ptr(env, j_this_pfunc));
02125     return pfunc->has_empty_codomain();
02126   }
02127   CATCH_ALL;
02128   return 0;
02129 }
02130 
02131 JNIEXPORT jlong JNICALL
02132 Java_parma_1polyhedra_1library_Partial_1Function_max_1in_1codomain
02133 (JNIEnv* env , jobject j_this_pfunc) {
02134   try {
02135     Partial_Function* pfunc
02136       = reinterpret_cast<Partial_Function*>(get_ptr(env, j_this_pfunc));
02137     return pfunc->max_in_codomain();
02138   }
02139   CATCH_ALL;
02140   return 0;
02141 }
02142 
02143 JNIEXPORT jlong JNICALL
02144 Java_parma_1polyhedra_1library_Partial_1Function_maps
02145 (JNIEnv* env, jobject j_this_pfunc, jlong j_i) {
02146   Partial_Function* pfunc
02147     = reinterpret_cast<Partial_Function*>(get_ptr(env, j_this_pfunc));
02148   dimension_type i = jtype_to_unsigned<dimension_type>(j_i);
02149   dimension_type j;
02150   if (pfunc->maps(i, j))
02151     return j;
02152   else
02153     return -1;
02154 }
02155 
02156 JNIEXPORT void JNICALL
02157 Java_parma_1polyhedra_1library_Partial_1Function_insert
02158 (JNIEnv* env , jobject j_this_pfunc, jlong i, jlong j) {
02159   try {
02160     Partial_Function* pfunc
02161       = reinterpret_cast<Partial_Function*>(get_ptr(env, j_this_pfunc));
02162     pfunc->insert(i, j);
02163   }
02164   CATCH_ALL;
02165 }
02166 
02167 JNIEXPORT void JNICALL
02168 Java_parma_1polyhedra_1library_Partial_1Function_free
02169 (JNIEnv* env, jobject j_this) {
02170   Partial_Function* pfunc
02171     = reinterpret_cast<Partial_Function*>(get_ptr(env, j_this));
02172   if (!is_java_marked(env, j_this)) {
02173     delete pfunc;
02174     void* null_ptr = 0;
02175     set_ptr(env, j_this, null_ptr);
02176   }
02177 }
02178 
02179 JNIEXPORT void JNICALL
02180 Java_parma_1polyhedra_1library_Partial_1Function_finalize
02181 (JNIEnv* env, jobject j_this) {
02182   Partial_Function* pfunc
02183     = reinterpret_cast<Partial_Function*>(get_ptr(env, j_this));
02184   if (!is_java_marked(env, j_this))
02185     delete pfunc;
02186 }