[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