[PPL-devel] [GIT] ppl/ppl(pip): Fixed various bugs in the C interface for PIP_Problem methods.

Patricia Hill p.m.hill at leeds.ac.uk
Sat Oct 10 00:28:07 CEST 2009


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

Author: Patricia Hill <p.m.hill at leeds.ac.uk>
Date:   Fri Oct  9 21:00:56 2009 +0100

Fixed various bugs in the C interface for PIP_Problem methods.

---

 interfaces/C/ppl_c_header.h                 |  138 ++++++---------------------
 interfaces/C/ppl_c_implementation_common.cc |   46 ++++++++-
 2 files changed, 71 insertions(+), 113 deletions(-)

diff --git a/interfaces/C/ppl_c_header.h b/interfaces/C/ppl_c_header.h
index 85ed99e..142431c 100644
--- a/interfaces/C/ppl_c_header.h
+++ b/interfaces/C/ppl_c_header.h
@@ -2609,17 +2609,6 @@ ppl_new_PIP_Problem_from_space_dimension PPL_PROTO((ppl_PIP_Problem_t* pmip,
 						    ppl_dimension_type d));
 
 /*! \relates ppl_PIP_Problem_tag \brief
-  Builds an PIP problem of space dimension \p d having feasible region \p cs,
-  objective function \p le and optimization mode \p m; writes a handle to
-  it at address \p ppip.
-*/
-int
-ppl_new_PIP_Problem PPL_PROTO((ppl_PIP_Problem_t* ppip,
-			       ppl_dimension_type d,
-			       ppl_const_Constraint_System_t cs,
-			       ppl_const_Linear_Expression_t le,
-			       int m));
-/*! \relates ppl_PIP_Problem_tag \brief
   Builds an PIP problem that is a copy of \p pip; writes a handle
   for the newly created system at address \p ppip.
 */
@@ -2654,19 +2643,19 @@ ppl_PIP_Problem_space_dimension
 PPL_PROTO((ppl_const_PIP_Problem_t pip, ppl_dimension_type* m));
 
 /*! \relates ppl_PIP_Problem_tag \brief
-  Writes to \p m the number of integer space dimensions of \p pip.
+  Writes to \p m the number of parameter space dimensions of \p pip.
 */
 int
-ppl_PIP_Problem_number_of_integer_space_dimensions
+ppl_PIP_Problem_number_of_parameter_space_dimensions
 PPL_PROTO((ppl_const_PIP_Problem_t pip, ppl_dimension_type* m));
 
 /*! \relates ppl_PIP_Problem_tag \brief
-  Writes in the first positions of the array \p ds all the integer space
+  Writes in the first positions of the array \p ds all the parameter space
   dimensions of problem \p pip. If the array is not big enough to hold
-  all of the integer space dimensions, the behavior is undefined.
+  all of the parameter space dimensions, the behavior is undefined.
 */
 int
-ppl_PIP_Problem_integer_space_dimensions
+ppl_PIP_Problem_parameter_space_dimensions
 PPL_PROTO((ppl_const_PIP_Problem_t pip, ppl_dimension_type ds[]));
 
 /*! \relates ppl_PIP_Problem_tag \brief
@@ -2685,26 +2674,6 @@ int
 ppl_PIP_Problem_constraint_at_index PPL_PROTO((ppl_const_PIP_Problem_t pip,
 					       ppl_dimension_type i,
 					       ppl_const_Constraint_t* pc));
-
-/*! \relates ppl_PIP_Problem_tag \brief
-  Writes a const handle to the linear expression defining the
-  objective function of the PIP problem \p pip at address \p ple.
-*/
-int
-ppl_PIP_Problem_objective_function
-PPL_PROTO((ppl_const_PIP_Problem_t pip, ppl_const_Linear_Expression_t* ple));
-
-/*! \relates ppl_PIP_Problem_tag \brief
-  Returns the optimization mode of the PIP problem \p pip.
-*/
-int
-ppl_PIP_Problem_optimization_mode PPL_PROTO((ppl_const_PIP_Problem_t pip));
-
-/*! \relates ppl_PIP_Problem_tag \brief
-  Returns a positive integer if \p pip is well formed, i.e., if it
-  satisfies all its implementation invariants; returns 0 and perhaps
-  makes some noise if \p pip is broken.  Useful for debugging purposes.
-*/
 int
 ppl_PIP_Problem_OK PPL_PROTO((ppl_const_PIP_Problem_t pip));
 
@@ -2720,12 +2689,34 @@ int
 ppl_PIP_Problem_clear PPL_PROTO((ppl_PIP_Problem_t pip));
 
 /*! \relates ppl_PIP_Problem_tag \brief
-  Adds \p d new dimensions to the space enclosing the PIP problem \p pip
-  and to \p pip itself.
+  Adds <CODE>m_pip_vars + m_pip_params</CODE> new space dimensions
+  and embeds the PIP problem \p pip in the new vector space.
+
+  \param pip
+
+  \param pip_vars
+  The number of space dimensions to add that are interpreted as
+  PIP problem variables (i.e., non parameters). These are added
+  \e before adding the \p pip_params parameters.
+
+  \param pip_params
+  The number of space dimensions to add that are interpreted as
+  PIP problem parameters. These are added \e after having added the
+  \p pip_vars problem variables.
+
+  \exception std::length_error
+  Thrown if adding <CODE>pip_vars + pip_params</CODE> new space
+  dimensions would cause the vector space to exceed dimension
+  <CODE>max_space_dimension()</CODE>.
+
+  The new space dimensions will be those having the highest indexes
+  in the new PIP problem; they are initially unconstrained.
 */
 int
 ppl_PIP_Problem_add_space_dimensions_and_embed
-PPL_PROTO((ppl_PIP_Problem_t pip, ppl_dimension_type d));
+PPL_PROTO((ppl_PIP_Problem_t pip,
+           ppl_dimension_type pip_vars,
+           ppl_dimension_type pip_params));
 
 /*! \relates ppl_PIP_Problem_tag \brief
   Sets the space dimensions that are specified in first \p n positions
@@ -2752,20 +2743,6 @@ int
 ppl_PIP_Problem_add_constraints PPL_PROTO((ppl_PIP_Problem_t pip,
 					   ppl_const_Constraint_System_t cs));
 
-/*! \relates ppl_PIP_Problem_tag \brief
-  Sets the objective function of the PIP problem \p pip to a copy of \p le.
-*/
-int
-ppl_PIP_Problem_set_objective_function
-PPL_PROTO((ppl_PIP_Problem_t pip, ppl_const_Linear_Expression_t le));
-
-/*! \relates ppl_PIP_Problem_tag \brief
-  Sets the optimization mode of the PIP problem \p pip to \p mode.
-*/
-int
-ppl_PIP_Problem_set_optimization_mode PPL_PROTO((ppl_PIP_Problem_t pip,
-						 int mode));
-
 /*@}*/ /* Functions that May Modify the PIP_Problem */
 
 /*! \brief \name Computing the Solution of the PIP_Problem */
@@ -2824,59 +2801,6 @@ ppl_PPL_Problem_optimizing_solution
 PPL_PROTO((ppl_const_PIP_Problem_t pip,
            ppl_const_PIP_Tree_Node_t* pip_tree));
 
-/*! \relates ppl_PIP_Problem_tag \brief
-  Evaluates the objective function of \p pip on point \p g.
-
-  \param pip
-  The PIP problem defining the objective function;
-
-  \param g
-  The generator on which the objective function will be evaluated;
-
-  \param num
-  Will be assigned the numerator of the objective function value;
-
-  \param den
-  Will be assigned the denominator of the objective function value;
-*/
-int
-ppl_PIP_Problem_evaluate_objective_function
-PPL_PROTO((ppl_const_PIP_Problem_t pip, ppl_const_Generator_t g,
-	   ppl_Coefficient_t num, ppl_Coefficient_t den));
-
-/*! \relates ppl_PIP_Problem_tag \brief
-  Writes a const handle to a feasible point for the PIP problem \p pip
-  at address \p pg.
-*/
-int
-ppl_PIP_Problem_feasible_point PPL_PROTO((ppl_const_PIP_Problem_t pip,
-					  ppl_const_Generator_t* pg));
-
-/*! \relates ppl_PIP_Problem_tag \brief
-  Writes a const handle to an optimizing point for the PIP problem \p pip
-  at address \p pg.
-*/
-int
-ppl_PIP_Problem_optimizing_point PPL_PROTO((ppl_const_PIP_Problem_t pip,
-					    ppl_const_Generator_t* pg));
-
-/*! \relates ppl_PIP_Problem_tag \brief
-  Returns the optimal value for \p pip.
-
-  \param pip
-  The PIP problem;
-
-  \param num
-  Will be assigned the numerator of the optimal value;
-
-  \param den
-  Will be assigned the denominator of the optimal value.
-*/
-int
-ppl_PIP_Problem_optimal_value
-PPL_PROTO((ppl_const_PIP_Problem_t pip,
-	   ppl_Coefficient_t num, ppl_Coefficient_t den));
-
 /*@}*/ /* Computing the Solution of the PIP_Problem */
 
 /*! \brief \name Querying/Setting Control Parameters */
@@ -2968,7 +2892,7 @@ PPL_PROTO((ppl_const_PIP_Tree_Node_t pip_tree,
 */
 int
 ppl_PIP_Tree_Node_insert_artificials
-PPL_PROTO((ppl_const_PIP_Tree_Node_t pip,
+PPL_PROTO((ppl_const_PIP_Tree_Node_t pip_tree,
            ppl_dimension_type ds[],
            size_t n,
            ppl_dimension_type space_dim,
diff --git a/interfaces/C/ppl_c_implementation_common.cc b/interfaces/C/ppl_c_implementation_common.cc
index d5331ee..9ff417c 100644
--- a/interfaces/C/ppl_c_implementation_common.cc
+++ b/interfaces/C/ppl_c_implementation_common.cc
@@ -2109,12 +2109,6 @@ ppl_new_PIP_Problem_from_PIP_Problem(ppl_PIP_Problem_t* dpip,
 }
 CATCH_ALL
 */
-int
-ppl_delete_PIP_Problem(ppl_const_PIP_Problem_t pip) try {
-  delete to_const(pip);
-  return 0;
-}
-CATCH_ALL
 /* FIXME: Waiting for c++ method for operator=() to be implemented.
 int
 ppl_assign_PIP_Problem_from_PIP_Problem(ppl_PIP_Problem_t dst,
@@ -2127,6 +2121,12 @@ ppl_assign_PIP_Problem_from_PIP_Problem(ppl_PIP_Problem_t dst,
 CATCH_ALL
 */
 int
+ppl_delete_PIP_Problem(ppl_const_PIP_Problem_t pip) try {
+  delete to_const(pip);
+  return 0;
+}
+CATCH_ALL
+int
 ppl_PIP_Problem_space_dimension(ppl_const_PIP_Problem_t pip,
 				ppl_dimension_type* m) try {
   *m = to_const(pip)->space_dimension();
@@ -2186,6 +2186,16 @@ ppl_PIP_Problem_clear(ppl_PIP_Problem_t pip) try {
 }
 CATCH_ALL
 int
+ppl_PIP_Problem_add_space_dimensions_and_embed(ppl_PIP_Problem_t pip,
+					       ppl_dimension_type pip_vars,
+					       ppl_dimension_type pip_params)
+  try {
+  PIP_Problem& spip = *to_nonconst(pip);
+  spip.add_space_dimensions_and_embed(pip_vars,pip_params);
+  return 0;
+}
+CATCH_ALL
+int
 ppl_PIP_Problem_add_constraint(ppl_PIP_Problem_t pip,
 			       ppl_const_Constraint_t c) try {
   const Constraint& cc = *to_const(c);
@@ -2287,6 +2297,30 @@ ppl_PIP_Tree_Node_begin(ppl_const_PIP_Tree_Node_t pip_tree,
 CATCH_ALL
 
 int
+ppl_PIP_Tree_Node_end(ppl_const_PIP_Tree_Node_t pip_tree,
+ ppl_Artificial_Parameter_Sequence_const_iterator_t pit) try {
+  PIP_Tree_Node::Artificial_Parameter_Sequence::const_iterator& spit
+    = *to_nonconst(pit);
+  spit = to_const(pip_tree)->art_parameter_end();
+  return 0;
+}
+CATCH_ALL
+int
+ppl_PIP_Tree_Node_insert_artificials(ppl_const_PIP_Tree_Node_t pip_tree,
+                                     ppl_dimension_type ds[],
+                                     size_t n,
+                                     ppl_dimension_type space_dim,
+                                     ppl_dimension_type inserted) try {
+  const PIP_Tree_Node& spip_tree = *to_const(pip_tree);
+  Variables_Set vars;
+  for (ppl_dimension_type i = n; i-- > 0; )
+    vars.insert(ds[i]);
+  inserted = spip_tree.insert_artificials(vars,space_dim);
+  return 0;
+}
+CATCH_ALL
+
+int
 ppl_new_Artificial_Parameter(ppl_Artificial_Parameter_t* pap) try {
   *pap = to_nonconst(new Artificial_Parameter());
   return 0;




More information about the PPL-devel mailing list