[geos-commits] r3073 - in trunk: capi tests/unit/capi

svn_geos at osgeo.org svn_geos at osgeo.org
Thu Jun 24 09:58:47 EDT 2010


Author: warmerdam
Date: 2010-06-24 13:58:47 +0000 (Thu, 24 Jun 2010)
New Revision: 3073

Modified:
   trunk/capi/geos_c.cpp
   trunk/capi/geos_c.h.in
   trunk/capi/geos_ts_c.cpp
   trunk/tests/unit/capi/GEOSGeomToWKTTest.cpp
Log:
added GEOSWKTWriter_getOutputDimension and test (#354)

Modified: trunk/capi/geos_c.cpp
===================================================================
--- trunk/capi/geos_c.cpp	2010-06-24 09:42:39 UTC (rev 3072)
+++ trunk/capi/geos_c.cpp	2010-06-24 13:58:47 UTC (rev 3073)
@@ -841,6 +841,12 @@
 	GEOSWKTWriter_setOutputDimension_r(handle, writer, dim);
 }
 
+int
+GEOSWKTWriter_getOutputDimension(WKTWriter *writer)
+{
+	return GEOSWKTWriter_getOutputDimension_r(handle, writer);
+}
+
 void
 GEOSWKTWriter_setOld3D(WKTWriter *writer, int useOld3D)
 {

Modified: trunk/capi/geos_c.h.in
===================================================================
--- trunk/capi/geos_c.h.in	2010-06-24 09:42:39 UTC (rev 3072)
+++ trunk/capi/geos_c.h.in	2010-06-24 13:58:47 UTC (rev 3073)
@@ -1007,6 +1007,7 @@
 extern void GEOS_DLL GEOSWKTWriter_setTrim(GEOSWKTWriter *writer, char trim);
 extern void GEOS_DLL GEOSWKTWriter_setRoundingPrecision(GEOSWKTWriter *writer, int precision);
 extern void GEOS_DLL GEOSWKTWriter_setOutputDimension(GEOSWKTWriter *writer, int dim);
+extern int  GEOS_DLL GEOSWKTWriter_getOutputDimension(GEOSWKTWriter *writer);
 extern void GEOS_DLL GEOSWKTWriter_setOld3D(GEOSWKTWriter *writer, int useOld3D);
 
 extern GEOSWKTWriter GEOS_DLL *GEOSWKTWriter_create_r(
@@ -1025,6 +1026,8 @@
 extern void GEOS_DLL GEOSWKTWriter_setOutputDimension_r(GEOSContextHandle_t handle,
                                                         GEOSWKTWriter *writer,
                                                         int dim);
+extern int  GEOS_DLL GEOSWKTWriter_getOutputDimension_r(GEOSContextHandle_t handle,
+                                                        GEOSWKTWriter *writer);
 extern void GEOS_DLL GEOSWKTWriter_setOld3D_r(GEOSContextHandle_t handle,
                                               GEOSWKTWriter *writer,
                                               int useOld3D);

Modified: trunk/capi/geos_ts_c.cpp
===================================================================
--- trunk/capi/geos_ts_c.cpp	2010-06-24 09:42:39 UTC (rev 3072)
+++ trunk/capi/geos_ts_c.cpp	2010-06-24 13:58:47 UTC (rev 3073)
@@ -4131,6 +4131,41 @@
     }
 }
 
+int
+GEOSWKTWriter_getOutputDimension_r(GEOSContextHandle_t extHandle, WKTWriter *writer)
+{
+    assert(0 != writer);
+
+    if ( 0 == extHandle )
+    {
+        return -1;
+    }
+
+    GEOSContextHandleInternal_t *handle = 0;
+    handle = reinterpret_cast<GEOSContextHandleInternal_t*>(extHandle);
+    if ( 0 == handle->initialized )
+    {
+        return -1;
+    }
+
+    int  dim = -1;
+
+    try
+    {
+        dim = writer->getOutputDimension();
+    }
+    catch (const std::exception &e)
+    {
+        handle->ERROR_MESSAGE("%s", e.what());
+    }
+    catch (...)
+    {
+        handle->ERROR_MESSAGE("Unknown exception thrown");
+    }
+
+    return dim;
+}
+
 void
 GEOSWKTWriter_setOld3D_r(GEOSContextHandle_t extHandle, WKTWriter *writer, int useOld3D)
 {

Modified: trunk/tests/unit/capi/GEOSGeomToWKTTest.cpp
===================================================================
--- trunk/tests/unit/capi/GEOSGeomToWKTTest.cpp	2010-06-24 09:42:39 UTC (rev 3072)
+++ trunk/tests/unit/capi/GEOSGeomToWKTTest.cpp	2010-06-24 13:58:47 UTC (rev 3073)
@@ -71,6 +71,18 @@
 
             ensure_equals(out.substr(0, n), wkt.substr(0, n));
         }
+
+        void test_writer_wkt(GEOSWKTWriter *writer, std::string const& wkt)
+        {
+            geom1_ = GEOSGeomFromWKT(wkt.c_str());
+            ensure ( 0 != geom1_ );
+
+            char* wkt_c = GEOSWKTWriter_write(writer,geom1_);
+            std::string out(wkt_c); 
+            free(wkt_c);
+
+            ensure_equals(out, wkt);
+        }
     };
 
     typedef test_group<test_capigeosgeomtowkt_data> group;
@@ -169,6 +181,24 @@
         test_wkt("MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2)),((60 60, 60 50, 70 40, 60 60)))", 17);
     }
 
+    // Test the WKTWriter API instead of the quicky function.
 
+    template<>
+    template<>
+    void object::test<13>()
+    {
+        GEOSWKTWriter *writer = GEOSWKTWriter_create();
+
+        ensure( "getOutputDimension_1", 
+                GEOSWKTWriter_getOutputDimension(writer) == 2 );
+
+        GEOSWKTWriter_setTrim( writer, 1 );
+        GEOSWKTWriter_setOutputDimension( writer, 3 );
+        ensure( "getOutputDimension_2", 
+                GEOSWKTWriter_getOutputDimension(writer) == 3 );
+
+        test_writer_wkt(writer, "POINT Z (10 13 3)");
+    }
+
 } // namespace tut
 



More information about the geos-commits mailing list