[PPL-devel] [GIT] ppl/ppl(master): The C interface now provides functions of the form

Roberto Bagnara bagnara at cs.unipr.it
Sat Mar 21 19:59:10 CET 2009


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

Author: Roberto Bagnara <bagnara at cs.unipr.it>
Date:   Sat Mar 21 19:58:13 2009 +0100

The C interface now provides functions of the form

  int ppl_io_asprint_Polyhedron(char** strp, P x)

where `P' is any opaque pointer to a const PPL object. These functions
print `x' to a malloc-allocated string, a pointer to which is returned
via `strp'.

---

 NEWS                                             |    8 +++++++
 interfaces/C/C_interface.dox                     |    7 ++++++
 interfaces/C/ppl_c_header.h                      |   25 ++++++++++++++++++---
 interfaces/C/ppl_c_implementation_common.cc      |   12 ++++++++++
 interfaces/C/ppl_c_implementation_common.defs.hh |   14 ++++++++++++
 5 files changed, 62 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index edd6a2c..c704749 100644
--- a/NEWS
+++ b/NEWS
@@ -30,6 +30,14 @@ o  The configuration script now explicitly checks that a recent enough
    enabled (in previous versions this check was not performed and
    building the library could fail in a mysterious way).
 
+o  The C interface now provides functions of the form
+
+     int ppl_io_asprint_Polyhedron(char** strp, P x)
+
+   where `P' is any opaque pointer to a const PPL object. These functions
+   prints `x' to a malloc-allocated string, a pointer to which is returned
+   via `strp'.
+
 
 Bugfixes
 ========
diff --git a/interfaces/C/C_interface.dox b/interfaces/C/C_interface.dox
index 2b3064b..d7ac170 100644
--- a/interfaces/C/C_interface.dox
+++ b/interfaces/C/C_interface.dox
@@ -1084,6 +1084,13 @@ ppl_io_print_Polyhedron(ppl_const_Polyhedron_t x);
 int
 ppl_io_fprint_Polyhedron(FILE* stream, ppl_const_Polyhedron_t x);
 
+/*! \relates ppl_Polyhedron_tag \brief
+  Prints \p x to a malloc-allocated string, a pointer to which
+  is returned via \p strp.
+*/
+int
+ppl_io_asprint_Polyhedron(char** strp, ppl_const_Polyhedron_t x);
+
 /*! \relates ppl_Polyhedron_tag
   \brief Dumps an ascii representation of \p x on \p stream.
 */
diff --git a/interfaces/C/ppl_c_header.h b/interfaces/C/ppl_c_header.h
index d802196..8dd87d9 100644
--- a/interfaces/C/ppl_c_header.h
+++ b/interfaces/C/ppl_c_header.h
@@ -354,14 +354,25 @@ ppl_max_space_dimension PPL_PROTO((ppl_dimension_type* m));
 int
 ppl_not_a_dimension PPL_PROTO((ppl_dimension_type* m));
 
-/*! \brief Pretty-prints \p var to <CODE>stdout</CODE>. */
+/*! \brief
+  Pretty-prints \p var to <CODE>stdout</CODE>.
+*/
 int
 ppl_io_print_variable PPL_PROTO((ppl_dimension_type var));
 
-/*! \brief Pretty-prints \p var to the given output \p stream. */
+/*! \brief
+  Pretty-prints \p var to the given output \p stream.
+*/
 int
 ppl_io_fprint_variable PPL_PROTO((FILE* stream, ppl_dimension_type var));
 
+/*! \relates ppl_Polyhedron_tag \brief
+  Pretty-prints \p var to a malloc-allocated string, a pointer to which
+  is returned via \p strp.
+*/
+int
+ppl_io_asprint_variable PPL_PROTO((char** strp, ppl_dimension_type var));
+
 /*! \brief
   The type of output functions used for printing variables.
 
@@ -562,7 +573,10 @@ int                                                                     \
 ppl_io_print_##Type PPL_PROTO((ppl_const_##Type##_t x));                \
 /*! \relates ppl_##Type##_tag */                                        \
 int                                                                     \
-ppl_io_fprint_##Type PPL_PROTO((FILE* stream, ppl_const_##Type##_t x));
+ppl_io_fprint_##Type PPL_PROTO((FILE* stream, ppl_const_##Type##_t x)); \
+/*! \relates ppl_##Type##_tag */                                        \
+int                                                                     \
+ppl_io_asprint_##Type PPL_PROTO((char** strp, ppl_const_##Type##_t x));
 
 #define PPL_DECLARE_ASCII_DUMP_LOAD_FUNCTIONS(Type) \
 /*! \relates ppl_##Type##_tag */                    \
@@ -584,7 +598,10 @@ int                                                                     \
 ppl_io_print_##Type PPL_PROTO((ppl_const_##Type##_t x));                \
 /*! \relates ppl_##Type##_tag \brief Prints \p x to the given output \p stream. */ \
 int                                                                     \
-ppl_io_fprint_##Type PPL_PROTO((FILE* stream, ppl_const_##Type##_t x));
+ppl_io_fprint_##Type PPL_PROTO((FILE* stream, ppl_const_##Type##_t x)); \
+/*! \relates ppl_##Type##_tag \brief Pretty-prints \p x to a malloc-allocated string, a pointer to which is returned via \p strp. */ \
+int                                                                     \
+ppl_io_asprint_##Type PPL_PROTO((char** strp, ppl_const_##Type##_t x));
 
 
 #define PPL_DECLARE_AND_DOCUMENT_ASCII_DUMP_LOAD_FUNCTIONS(Type) \
diff --git a/interfaces/C/ppl_c_implementation_common.cc b/interfaces/C/ppl_c_implementation_common.cc
index 15be348..7eb8147 100644
--- a/interfaces/C/ppl_c_implementation_common.cc
+++ b/interfaces/C/ppl_c_implementation_common.cc
@@ -1991,6 +1991,18 @@ ppl_io_fprint_variable(FILE* stream, ppl_dimension_type var) try {
 }
 CATCH_ALL
 
+int
+ppl_io_asprint_variable(char** strp, ppl_dimension_type var) try {
+  const char* b = c_variable_output_function(var);
+  if (b == 0)
+    return PPL_STDIO_ERROR;
+  *strp = strdup(b);
+  if (*strp == 0)
+    return PPL_ERROR_OUT_OF_MEMORY;
+  return 0;
+}
+CATCH_ALL
+
 /* No ascii dump for Coefficient. */
 DEFINE_PRINT_FUNCTIONS(Coefficient)
 
diff --git a/interfaces/C/ppl_c_implementation_common.defs.hh b/interfaces/C/ppl_c_implementation_common.defs.hh
index 6d8be11..b85c443 100644
--- a/interfaces/C/ppl_c_implementation_common.defs.hh
+++ b/interfaces/C/ppl_c_implementation_common.defs.hh
@@ -164,6 +164,20 @@ catch (...) {						     \
       return PPL_STDIO_ERROR;                                           \
     return 0;                                                           \
   }                                                                     \
+  CATCH_ALL                                                             \
+                                                                        \
+  int                                                                   \
+  ppl_io_asprint_##Type(char** strp, ppl_const_##Type##_t x) try {      \
+    using namespace IO_Operators;                                       \
+    std::ostringstream os;                                              \
+    os << *to_const(x);                                                 \
+    if (!os)                                                            \
+      return PPL_STDIO_ERROR;                                           \
+    *strp = strdup(os.str().c_str());                                   \
+    if (*strp == 0)                                                     \
+      return PPL_ERROR_OUT_OF_MEMORY;                                   \
+    return 0;                                                           \
+  }                                                                     \
   CATCH_ALL
 
 #define DEFINE_ASCII_DUMP_FUNCTIONS(Type)                               \




More information about the PPL-devel mailing list