[PPL-devel] [GIT] ppl/ppl(master): Avoid useless boxing of builtins when interfacing the wrap_assign().

Enea Zaffanella zaffanella at cs.unipr.it
Mon Apr 5 16:33:52 CEST 2010


Module: ppl/ppl
Branch: master
Commit: a0e0437138194a515fcdc03024d34f9d08a290cc
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=a0e0437138194a515fcdc03024d34f9d08a290cc

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Mon Apr  5 16:28:14 2010 +0200

Avoid useless boxing of builtins when interfacing the wrap_assign().
Got rid of buggy j_boolean_to_bool() helper.
Helper bool_to_j_boolean() renamed to bool_to_j_boolean_class() for clarity,
as it builds a boxed Java Boolean value.

---

 ...ppl_interface_generator_java_classes_cc_code.m4 |   18 ++++++++----------
 interfaces/Java/jni/ppl_java_common.cc             |   10 +---------
 interfaces/Java/jni/ppl_java_common.defs.hh        |    6 +-----
 ...l_interface_generator_java_classes_java_code.m4 |   15 +++++++--------
 4 files changed, 17 insertions(+), 32 deletions(-)

diff --git a/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4 b/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4
index 256acec..36f8938 100644
--- a/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4
+++ b/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4
@@ -528,7 +528,7 @@ Java_parma_1polyhedra_1library_ at 1CLASS@_ at 1MAXMIN@__Lparma_1polyhedra_1library_Li
     if (this_ptr->@MAXMIN@(le, num, den, b_value)) {
       set_coefficient(env, j_num, build_java_coeff(env, num));
       set_coefficient(env, j_den, build_java_coeff(env, den));
-      jobject j_boolean = bool_to_j_boolean(env, b_value);
+      jobject j_boolean = bool_to_j_boolean_class(env, b_value);
       set_by_reference(env, j_ref_boolean, j_boolean);
       return true;
     }
@@ -559,7 +559,7 @@ Java_parma_1polyhedra_1library_ at 1CLASS@_ at 1MAXMIN@__Lparma_1polyhedra_1library_Li
     if (this_ptr->@MAXMIN@(le, num, den, b_value, g)) {
       set_coefficient(env, j_num, build_java_coeff(env, num));
       set_coefficient(env, j_den, build_java_coeff(env, den));
-      jobject j_boolean = bool_to_j_boolean(env, b_value);
+      jobject j_boolean = bool_to_j_boolean_class(env, b_value);
       set_by_reference(env, j_ref_boolean, j_boolean);
       jobject j_g_result = build_java_generator(env, g);
       set_generator(env, j_g, j_g_result);
@@ -882,9 +882,9 @@ m4_define(`ppl_ at CLASS@_wrap_assign_code',
 `dnl
 JNIEXPORT void JNICALL
 Java_parma_1polyhedra_1library_ at 1CLASS@_wrap_1assign
-(JNIEnv* env, jobject j_this,
- jobject j_vars, jobject j_w, jobject j_r, jobject j_o, jobject j_cs,
-         jobject j_cx, jobject j_ind) try {
+(JNIEnv* env, jobject j_this, jobject j_vars,
+ jobject j_w, jobject j_r, jobject j_o, jobject j_cs,
+ jlong j_cx, jboolean j_wrap_individually) try {
   @CPP_CLASS@* this_ptr
     = reinterpret_cast<@CPP_CLASS@*>(get_ptr(env, j_this));
   Variables_Set vars = build_cxx_variables_set(env, j_vars);
@@ -892,10 +892,8 @@ Java_parma_1polyhedra_1library_ at 1CLASS@_wrap_1assign
   Bounded_Integer_Type_Representation r = build_cxx_bounded_rep(env, j_r);
   Bounded_Integer_Type_Overflow o = build_cxx_bounded_overflow(env, j_o);
   Constraint_System cs = build_cxx_constraint_system(env, j_cs);
-  unsigned cx = jtype_to_unsigned<unsigned>(j_integer_to_j_int(env, j_cx));
-  bool ind = (j_boolean_to_bool(env, j_ind));
-
-  this_ptr->wrap_assign(vars, w, r, o, &cs, cx, ind);
+  unsigned cx = jtype_to_unsigned<unsigned int>(j_cx);
+  this_ptr->wrap_assign(vars, w, r, o, &cs, cx, j_wrap_individually);
 }
 CATCH_ALL
 
@@ -1368,7 +1366,7 @@ Java_parma_1polyhedra_1library_ at 1CLASS@_approximate_1 at PARTITION@
     set_ptr(env, j_obj_r2, r2);
     set_pair_element(env, j_pair_obj, 0, j_obj_r1);
     set_pair_element(env, j_pair_obj, 1, j_obj_r2);
-    jobject j_finite_bool = bool_to_j_boolean(env, b_finite_val);
+    jobject j_finite_bool = bool_to_j_boolean_class(env, b_finite_val);
     set_by_reference(env, j_ref_finite_bool, j_finite_bool);
     return j_pair_obj;
   }
diff --git a/interfaces/Java/jni/ppl_java_common.cc b/interfaces/Java/jni/ppl_java_common.cc
index 0b61539..1829283 100644
--- a/interfaces/Java/jni/ppl_java_common.cc
+++ b/interfaces/Java/jni/ppl_java_common.cc
@@ -407,7 +407,7 @@ build_cxx_artificial_parameter(JNIEnv* env, jobject j_artificial_parameter) {
 }
 
 jobject
-bool_to_j_boolean(JNIEnv* env, const bool value) {
+bool_to_j_boolean_class(JNIEnv* env, const bool value) {
   jobject ret = env->CallStaticObjectMethod(cached_classes.Boolean,
                                             cached_FMIDs.Boolean_valueOf_ID,
                                             value);
@@ -415,14 +415,6 @@ bool_to_j_boolean(JNIEnv* env, const bool value) {
   return ret;
 }
 
-/* FIXME: Code is buggy - needs fixing. */
-bool
-j_boolean_to_bool(JNIEnv* env, jobject j_boolean) {
-  bool b = env->CallIntMethod(j_boolean, cached_FMIDs.Boolean_boolValue_ID);
-  CHECK_EXCEPTION_ASSERT(env);
-  return b;
-}
-
 jobject
 j_long_to_j_long_class(JNIEnv* env, jlong jlong_value) {
   jobject ret = env->CallStaticObjectMethod(cached_classes.Long,
diff --git a/interfaces/Java/jni/ppl_java_common.defs.hh b/interfaces/Java/jni/ppl_java_common.defs.hh
index deda755..d064642 100644
--- a/interfaces/Java/jni/ppl_java_common.defs.hh
+++ b/interfaces/Java/jni/ppl_java_common.defs.hh
@@ -434,11 +434,7 @@ jtype_to_unsigned(const V& value);
 
 //! Builds a Java Boolean from C++ bool \p value.
 jobject
-bool_to_j_boolean(JNIEnv* env, const bool value);
-
-//! Returns the Java bool stored in Java Boolean \p j_boolean.
-bool
-j_boolean_to_bool(JNIEnv* env, jobject j_boolean);
+bool_to_j_boolean_class(JNIEnv* env, const bool value);
 
 //! Returns the Java int stored in Java Integer \p j_integer.
 jint
diff --git a/interfaces/Java/parma_polyhedra_library/ppl_interface_generator_java_classes_java_code.m4 b/interfaces/Java/parma_polyhedra_library/ppl_interface_generator_java_classes_java_code.m4
index 9db9a17..e4c7f55 100644
--- a/interfaces/Java/parma_polyhedra_library/ppl_interface_generator_java_classes_java_code.m4
+++ b/interfaces/Java/parma_polyhedra_library/ppl_interface_generator_java_classes_java_code.m4
@@ -424,12 +424,12 @@ m4_define(`ppl_ at CLASS@_wrap_assign_code',
 ___END_OF_FILE___
 ___BEGIN_OF_FILE___ @CLASS at .java << ___END_OF_FILE___
     public native void wrap_assign(Variables_Set vars,
-				Bounded_Integer_Type_Width w,
-				Bounded_Integer_Type_Representation r,
-                                Bounded_Integer_Type_Overflow o,
-                                Constraint_System cs,
-                                Integer complexity_threshold,
-                                Boolean wrap_individually);
+				   Bounded_Integer_Type_Width w,
+				   Bounded_Integer_Type_Representation r,
+                                   Bounded_Integer_Type_Overflow o,
+                                   Constraint_System cs,
+                                   long complexity_threshold,
+                                   boolean wrap_individually);
 
 ')
 
@@ -501,8 +501,7 @@ m4_define(`ppl_ at CLASS@_remove_higher_space_dimensions_code',
 `dnl
 ___END_OF_FILE___
 ___BEGIN_OF_FILE___ @CLASS at .java << ___END_OF_FILE___
-    public native void remove_higher_space_dimensions(long
-						      new_dimension);
+    public native void remove_higher_space_dimensions(long new_dimension);
 
 ')
 




More information about the PPL-devel mailing list