From e7757fcbdab271ce9c793cc6a77b6dcd2cf3cfaf Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Thu, 19 Mar 2015 16:34:53 +0100 Subject: [PATCH] Add some utility variant API functions --- src/gmio_core/stream.c | 13 +++++++++++++ src/gmio_core/stream.h | 6 ++++++ src/gmio_support/occ_libstl.cpp | 21 ++++++++++++++++----- src/gmio_support/occ_libstl.h | 28 +++++++++++++++++++++++++--- src/gmio_support/qt_stream.cpp | 9 +++++++-- src/gmio_support/qt_stream.h | 8 ++++++-- 6 files changed, 73 insertions(+), 12 deletions(-) diff --git a/src/gmio_core/stream.c b/src/gmio_core/stream.c index 9c40b13..730414a 100644 --- a/src/gmio_core/stream.c +++ b/src/gmio_core/stream.c @@ -24,6 +24,12 @@ void gmio_stream_set_null(gmio_stream_t* stream) memset(stream, 0, sizeof(gmio_stream_t)); } +gmio_stream_t gmio_stream_null() +{ + gmio_stream_t null_stream = { 0 }; + return null_stream; +} + static gmio_bool_t gmio_stream_stdio_at_end(void* cookie) { return feof((FILE*) cookie); @@ -54,3 +60,10 @@ void gmio_stream_set_stdio(gmio_stream_t* stream, FILE* file) stream->read_func = gmio_stream_stdio_read; stream->write_func = gmio_stream_stdio_write; } + +gmio_stream_t gmio_stream_stdio(FILE* file) +{ + gmio_stream_t stdio_stream = { 0 }; + gmio_stream_set_stdio(&stdio_stream, file); + return stdio_stream; +} diff --git a/src/gmio_core/stream.h b/src/gmio_core/stream.h index d289eba..f3f8056 100644 --- a/src/gmio_core/stream.h +++ b/src/gmio_core/stream.h @@ -98,9 +98,15 @@ GMIO_C_LINKAGE_BEGIN /*! Installs a null stream */ GMIO_LIB_EXPORT void gmio_stream_set_null(gmio_stream_t* stream); +/*! Returns a null stream */ +GMIO_LIB_EXPORT gmio_stream_t gmio_stream_null(); + /*! Configures \p stream for standard FILE* (cookie will hold \p file) */ GMIO_LIB_EXPORT void gmio_stream_set_stdio(gmio_stream_t* stream, FILE* file); +/*! Returns a stream for standard FILE* (cookie will hold \p file) */ +GMIO_LIB_EXPORT gmio_stream_t gmio_stream_stdio(FILE* file); + GMIO_C_LINKAGE_END #endif /* GMIO_STREAM_H */ diff --git a/src/gmio_support/occ_libstl.cpp b/src/gmio_support/occ_libstl.cpp index 94073f1..81d8e37 100644 --- a/src/gmio_support/occ_libstl.cpp +++ b/src/gmio_support/occ_libstl.cpp @@ -15,9 +15,6 @@ #include -#include -#include - #include #include #include @@ -86,7 +83,7 @@ static void occmesh_get_triangle(const void* cookie, } // namespace internal -void gmio_stl_occmesh(gmio_stl_mesh_t *mesh, const gmio_OccStlMeshDomain &meshCookie) +void gmio_stl_set_occmesh(gmio_stl_mesh_t *mesh, const gmio_OccStlMeshDomain &meshCookie) { std::memset(mesh, 0, sizeof(gmio_stl_mesh_t)); mesh->cookie = &meshCookie; @@ -94,13 +91,27 @@ void gmio_stl_occmesh(gmio_stl_mesh_t *mesh, const gmio_OccStlMeshDomain &meshCo mesh->get_triangle_func = internal::occmesh_get_triangle; } -void gmio_stl_occmesh_creator(gmio_stl_mesh_creator_t *creator, const Handle_StlMesh_Mesh &mesh) +gmio_stl_mesh gmio_stl_occmesh(const gmio_OccStlMeshDomain &meshCookie) +{ + gmio_stl_mesh occmesh = { 0 }; + gmio_stl_set_occmesh(&occmesh, meshCookie); + return occmesh; +} + +void gmio_stl_set_occmesh_creator(gmio_stl_mesh_creator_t *creator, const Handle_StlMesh_Mesh &mesh) { std::memset(creator, 0, sizeof(gmio_stl_mesh_creator_t)); creator->cookie = internal::occMeshPtr(mesh); creator->add_triangle_func = internal::occmesh_add_triangle; } +gmio_stl_mesh_creator gmio_stl_occmesh_creator(const Handle_StlMesh_Mesh &mesh) +{ + gmio_stl_mesh_creator occ_creator = { 0 }; + gmio_stl_set_occmesh_creator(&occ_creator, mesh); + return occ_creator; +} + gmio_OccStlMeshDomain::gmio_OccStlMeshDomain(const Handle_StlMesh_Mesh &stlMesh, int domId) : m_mesh(stlMesh), m_domainId(domId) diff --git a/src/gmio_support/occ_libstl.h b/src/gmio_support/occ_libstl.h index ef7c4e0..dc02326 100644 --- a/src/gmio_support/occ_libstl.h +++ b/src/gmio_support/occ_libstl.h @@ -21,6 +21,9 @@ #define GMIO_SUPPORT_OCC_LIBSTL_H #include "support_global.h" +#include "../gmio_stl/stl_mesh.h" +#include "../gmio_stl/stl_mesh_creator.h" + #include struct gmio_stl_mesh; struct gmio_stl_mesh_creator; @@ -50,13 +53,32 @@ private: * \c mesh->cookie will point to \p meshCookie */ GMIO_LIBSUPPORT_EXPORT -void gmio_stl_occmesh(gmio_stl_mesh* mesh, const gmio_OccStlMeshDomain& meshCookie); +void gmio_stl_set_occmesh( + gmio_stl_mesh* mesh, const gmio_OccStlMeshDomain& meshCookie); + +/*! Returns a gmio_stl_mesh mapped to domain in StlMesh_Mesh + * + * The mesh's cookie will point to \p meshCookie + */ +GMIO_LIBSUPPORT_EXPORT +gmio_stl_mesh gmio_stl_occmesh(const gmio_OccStlMeshDomain& meshCookie); /*! Initializes \p creator to build a new domain in a StlMesh_Mesh object * - * \c creator->cookie will point to the internal data(ie. StlMesh_Mesh*) of handle \p mesh + * \c creator->cookie will point to the internal data(ie StlMesh_Mesh*) of + * handle \p mesh */ GMIO_LIBSUPPORT_EXPORT -void gmio_stl_occmesh_creator(gmio_stl_mesh_creator* creator, const Handle_StlMesh_Mesh& mesh); +void gmio_stl_set_occmesh_creator( + gmio_stl_mesh_creator* creator, const Handle_StlMesh_Mesh& mesh); + +/*! Returns a gmio_stl_mesh_creator that will build a new domain in a + * StlMesh_Mesh object + * + * The creator's cookie will point to the internal data(ie StlMesh_Mesh*) of + * handle \p mesh + */ +GMIO_LIBSUPPORT_EXPORT +gmio_stl_mesh_creator gmio_stl_occmesh_creator(const Handle_StlMesh_Mesh& mesh); #endif /* GMIO_SUPPORT_OCC_LIBSTL_H */ diff --git a/src/gmio_support/qt_stream.cpp b/src/gmio_support/qt_stream.cpp index 3798348..f3b2219 100644 --- a/src/gmio_support/qt_stream.cpp +++ b/src/gmio_support/qt_stream.cpp @@ -15,8 +15,6 @@ #include -#include - #include #include @@ -69,3 +67,10 @@ void gmio_stream_set_qiodevice(gmio_stream_t* stream, QIODevice* device) stream->read_func = gmio_stream_qiodevice_read; stream->write_func = gmio_stream_qiodevice_write; } + +gmio_stream_t gmio_stream_qiodevice(QIODevice* device) +{ + gmio_stream_t qtstream = { 0 }; + gmio_stream_set_qiodevice(&qtstream, device); + return qtstream; +} diff --git a/src/gmio_support/qt_stream.h b/src/gmio_support/qt_stream.h index 83db31c..6a72a92 100644 --- a/src/gmio_support/qt_stream.h +++ b/src/gmio_support/qt_stream.h @@ -21,9 +21,9 @@ #define GMIO_SUPPORT_QT_STREAM_H #include "support_global.h" +#include "../gmio_core/stream.h" #include -struct gmio_stream; QT_BEGIN_NAMESPACE class QIODevice; QT_END_NAMESPACE @@ -31,6 +31,10 @@ QT_END_NAMESPACE /*! Configures \p stream for \c QIODevice* (cookie will hold \p device) */ GMIO_LIBSUPPORT_EXPORT void gmio_stream_set_qiodevice( - struct gmio_stream* stream, QT_PREPEND_NAMESPACE(QIODevice)* device); + gmio_stream_t* stream, QT_PREPEND_NAMESPACE(QIODevice)* device); + +/*! Returns a gmio_stream for \c QIODevice* (cookie will hold \p device) */ +GMIO_LIBSUPPORT_EXPORT +gmio_stream_t gmio_stream_qiodevice(QT_PREPEND_NAMESPACE(QIODevice)* device); #endif /* GMIO_SUPPORT_QT_STREAM_H */