Introduce typedefs gmio_streamsize_t and gmio_streamoffset_t
This commit is contained in:
parent
82ca359f62
commit
b356ced118
@ -127,7 +127,7 @@ static void allocate_stl_scene(aiScene* pScene)
|
||||
}
|
||||
|
||||
static void func_ascii_begin_solid(
|
||||
void* cookie, size_t stream_size, const char* solid_name)
|
||||
void* cookie, gmio_streamsize_t stream_size, const char* solid_name)
|
||||
{
|
||||
aiSceneHelper* helper = (aiSceneHelper*)cookie;
|
||||
helper->hasToCountTriangle = 1; // true
|
||||
|
@ -77,7 +77,7 @@ typedef struct stl_readwrite_conv
|
||||
} stl_readwrite_conv_t;
|
||||
|
||||
static void readwrite_ascii_begin_solid(
|
||||
void* cookie, size_t stream_size, const char* solid_name)
|
||||
void* cookie, gmio_streamsize_t stream_size, const char* solid_name)
|
||||
{
|
||||
stl_readwrite_conv_t* rw_conv = (stl_readwrite_conv_t*)cookie;
|
||||
gmio_stream_t* stream = &rw_conv->trsf.stream;
|
||||
|
@ -53,7 +53,7 @@ GMIO_INLINE size_t gmio_stream_write(
|
||||
}
|
||||
|
||||
/*! Safe and convenient function for gmio_stream::func_size() */
|
||||
GMIO_INLINE size_t gmio_stream_size(gmio_stream_t* stream)
|
||||
GMIO_INLINE gmio_streamsize_t gmio_stream_size(gmio_stream_t* stream)
|
||||
{
|
||||
if (stream != NULL && stream->func_size != NULL)
|
||||
return stream->func_size(stream->cookie);
|
||||
|
@ -17,17 +17,35 @@
|
||||
#define GMIO_INTERNAL_SAFE_CAST_H
|
||||
|
||||
#include "../global.h"
|
||||
#include "../stream.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
/*! Returns \p val safely casted to unsigned 32b integer */
|
||||
GMIO_INLINE uint32_t gmio_size_to_uint32(size_t val)
|
||||
{
|
||||
#if GMIO_TARGET_ARCH_BIT_SIZE > 32
|
||||
/* TODO : eliminate branch */
|
||||
return val > 0xFFFFFFFF ? 0xFFFFFFFF : (uint32_t)val;
|
||||
#else
|
||||
return val;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define GMIO_MAX_SIZET ((size_t)-1)
|
||||
|
||||
/*! Returns \p val safely casted to \c size_t */
|
||||
GMIO_INLINE size_t gmio_streamsize_to_size(gmio_streamsize_t val)
|
||||
{
|
||||
#if GMIO_TARGET_ARCH_BIT_SIZE < 64 \
|
||||
&& defined(GMIO_HAVE_INT64_TYPE)
|
||||
/* TODO : eliminate branch */
|
||||
const uint64_t uval = val;
|
||||
return uval > GMIO_MAX_SIZET ? GMIO_MAX_SIZET : (size_t)uval;
|
||||
#else
|
||||
return (size_t)val;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* GMIO_INTERNAL_SAFE_CAST_H */
|
||||
|
@ -73,7 +73,7 @@ static size_t gmio_stream_stdio_write(
|
||||
return fwrite(ptr, item_size, item_count, (FILE*)cookie);
|
||||
}
|
||||
|
||||
static size_t gmio_stream_stdio_size(void* cookie)
|
||||
static gmio_streamsize_t gmio_stream_stdio_size(void* cookie)
|
||||
{
|
||||
FILE* file = (FILE*)cookie;
|
||||
|
||||
|
@ -27,6 +27,14 @@
|
||||
#include "stream_pos.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef GMIO_HAVE_INT64_TYPE
|
||||
typedef int64_t gmio_streamsize_t;
|
||||
typedef int64_t gmio_streamoffset_t;
|
||||
#else
|
||||
typedef long gmio_streamsize_t;
|
||||
typedef long gmio_streamoffset_t;
|
||||
#endif
|
||||
|
||||
/*! Stream that can get input from an arbitrary data source or can write
|
||||
* output to an arbitrary data sink.
|
||||
*
|
||||
@ -93,7 +101,7 @@ struct gmio_stream
|
||||
size_t (*func_write)(void* cookie, const void* ptr, size_t size, size_t count);
|
||||
|
||||
/*! Pointer on a function that returns the size(in bytes) of the stream */
|
||||
size_t (*func_size)(void* cookie);
|
||||
gmio_streamsize_t (*func_size)(void* cookie);
|
||||
|
||||
/*! Pointer on a function that retrieves the current position in the stream
|
||||
*
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "global.h"
|
||||
|
||||
/*! Size of the byte array gmio_stream_pos::cookie */
|
||||
enum { GMIO_STREAM_POS_COOKIE_SIZE = 32 }; /* 32 bytes */
|
||||
enum { GMIO_STREAM_POS_COOKIE_SIZE = 32 /* bytes */ };
|
||||
|
||||
/*! Specifies a position within a stream
|
||||
*
|
||||
|
@ -22,7 +22,7 @@
|
||||
* gmio_stl_mesh_creator::func_ascii_begin_solid() */
|
||||
GMIO_INLINE void gmio_stl_mesh_creator_ascii_begin_solid(
|
||||
gmio_stl_mesh_creator_t* creator,
|
||||
size_t stream_size,
|
||||
gmio_streamsize_t stream_size,
|
||||
const char* solid_name)
|
||||
{
|
||||
if (creator != NULL && creator->func_ascii_begin_solid != NULL) {
|
||||
|
@ -30,7 +30,7 @@ typedef void (*gmio_stl_mesh_func_get_triangle_t)(
|
||||
|
||||
/* gmio_stl_mesh_creator */
|
||||
typedef void (*gmio_stl_mesh_creator_func_ascii_begin_solid_t)(
|
||||
void*, size_t, const char*);
|
||||
void*, gmio_streamsize_t, const char*);
|
||||
typedef void (*gmio_stl_mesh_creator_func_binary_begin_solid_t)(
|
||||
void*, uint32_t, const gmio_stlb_header_t*);
|
||||
typedef void (*gmio_stl_mesh_creator_func_add_triangle_t)(
|
||||
|
@ -49,7 +49,7 @@ gmio_stl_format_t gmio_stl_get_format(gmio_stream_t *stream)
|
||||
|
||||
/* Binary STL ? */
|
||||
if (read_size >= (GMIO_STLB_HEADER_SIZE + 4)) {
|
||||
const size_t stream_size = gmio_stream_size(stream);
|
||||
const gmio_streamsize_t stream_size = gmio_stream_size(stream);
|
||||
|
||||
/* Try with little-endian format */
|
||||
uint32_t facet_count =
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "stl_global.h"
|
||||
#include "stl_triangle.h"
|
||||
#include "stlb_header.h"
|
||||
#include "../gmio_core/stream.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
@ -48,7 +49,7 @@ struct gmio_stl_mesh_creator
|
||||
* stream
|
||||
*/
|
||||
void (*func_ascii_begin_solid)(
|
||||
void* cookie, size_t stream_size, const char* solid_name);
|
||||
void* cookie, gmio_streamsize_t stream_size, const char* solid_name);
|
||||
|
||||
/*! Pointer on a function that handles declaration of a mesh with
|
||||
* \p tri_count number of triangles
|
||||
|
@ -134,9 +134,9 @@ typedef struct
|
||||
/* Copy of gmio_stla_read() corresponding argument */
|
||||
gmio_transfer_t* transfer;
|
||||
/* Cache for gmio_stream_size(&transfer->stream) */
|
||||
size_t stream_size;
|
||||
gmio_streamsize_t stream_size;
|
||||
/* Offset (in bytes) from beginning of stream : current position */
|
||||
size_t stream_offset;
|
||||
gmio_streamoffset_t stream_offset;
|
||||
/* Cache for gmio_transfer::func_is_stop_requested() */
|
||||
gmio_bool_t is_stop_requested;
|
||||
} gmio_string_stream_fwd_iterator_cookie_t;
|
||||
|
@ -20,6 +20,10 @@
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __cplusplus
|
||||
# error C++ compiler required
|
||||
#endif
|
||||
|
||||
#ifndef GMIO_SUPPORT_STREAM_CPP_H
|
||||
#define GMIO_SUPPORT_STREAM_CPP_H
|
||||
|
||||
@ -68,7 +72,7 @@ size_t istream_cpp_read(
|
||||
{
|
||||
STREAM* s = static_cast<STREAM*>(cookie);
|
||||
s->read(static_cast<char*>(ptr), item_size * item_count);
|
||||
return s->gcount() / item_size;
|
||||
return static_cast<size_t>(s->gcount() / item_size);
|
||||
}
|
||||
|
||||
template<typename STREAM>
|
||||
@ -82,7 +86,7 @@ size_t ostream_cpp_write(
|
||||
}
|
||||
|
||||
template<typename STREAM>
|
||||
size_t istream_cpp_size(void* cookie)
|
||||
gmio_streamsize_t istream_cpp_size(void* cookie)
|
||||
{
|
||||
STREAM* s = static_cast<STREAM*>(cookie);
|
||||
std::streampos pos = s->tellg();
|
||||
@ -95,7 +99,7 @@ size_t istream_cpp_size(void* cookie)
|
||||
}
|
||||
|
||||
template<typename STREAM>
|
||||
size_t ostream_cpp_size(void* cookie)
|
||||
gmio_streamsize_t ostream_cpp_size(void* cookie)
|
||||
{
|
||||
STREAM* s = static_cast<STREAM*>(cookie);
|
||||
std::streampos pos = s->tellp();
|
||||
|
@ -46,7 +46,7 @@ static size_t gmio_stream_qiodevice_read(
|
||||
{
|
||||
QIODevice* device = static_cast<QIODevice*>(cookie);
|
||||
const qint64 c = device->read(static_cast<char*>(ptr), item_size * item_count);
|
||||
return c / item_size;
|
||||
return static_cast<size_t>(c / item_size);
|
||||
}
|
||||
|
||||
static size_t gmio_stream_qiodevice_write(
|
||||
@ -55,10 +55,10 @@ static size_t gmio_stream_qiodevice_write(
|
||||
QIODevice* device = static_cast<QIODevice*>(cookie);
|
||||
const qint64 c = device->write(
|
||||
static_cast<const char*>(ptr), item_size * item_count);
|
||||
return c / item_size;
|
||||
return static_cast<size_t>(c / item_size);
|
||||
}
|
||||
|
||||
static size_t gmio_stream_qiodevice_size(void* cookie)
|
||||
static gmio_streamsize_t gmio_stream_qiodevice_size(void* cookie)
|
||||
{
|
||||
QIODevice* device = static_cast<QIODevice*>(cookie);
|
||||
return device->size();
|
||||
|
@ -20,6 +20,10 @@
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __cplusplus
|
||||
# error C++ compiler required
|
||||
#endif
|
||||
|
||||
#ifndef GMIO_SUPPORT_STREAM_QT_H
|
||||
#define GMIO_SUPPORT_STREAM_QT_H
|
||||
|
||||
|
@ -44,7 +44,7 @@ gmio_stl_triangle_array_t gmio_stl_triangle_array_malloc(size_t tri_count)
|
||||
}
|
||||
|
||||
static void gmio_stl_data__ascii_begin_solid(
|
||||
void* cookie, size_t stream_size, const char* solid_name)
|
||||
void* cookie, gmio_streamsize_t stream_size, const char* solid_name)
|
||||
{
|
||||
gmio_stl_data_t* data = (gmio_stl_data_t*)cookie;
|
||||
|
||||
@ -59,7 +59,8 @@ static void gmio_stl_data__ascii_begin_solid(
|
||||
* for each face */
|
||||
{
|
||||
const size_t facet_size = 200;
|
||||
const size_t facet_count = GMIO_MAX(1, stream_size / facet_size);
|
||||
const size_t facet_count =
|
||||
gmio_streamsize_to_size(GMIO_MAX(1, stream_size / facet_size));
|
||||
data->tri_array = gmio_stl_triangle_array_malloc(facet_count);
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ static size_t gmio_stream_buffer_write(
|
||||
}
|
||||
}
|
||||
|
||||
static size_t gmio_stream_buffer_size(void* cookie)
|
||||
static gmio_streamsize_t gmio_stream_buffer_size(void* cookie)
|
||||
{
|
||||
const gmio_stream_buffer_t* buff = (const gmio_stream_buffer_t*)cookie;
|
||||
return buff->len;
|
||||
|
@ -132,6 +132,18 @@ const char* test_internal__safe_cast()
|
||||
UTEST_ASSERT(gmio_size_to_uint32(0xFFFFFFFF) == 0xFFFFFFFF);
|
||||
UTEST_ASSERT(gmio_size_to_uint32(100) == 100);
|
||||
#endif
|
||||
|
||||
UTEST_ASSERT(gmio_streamsize_to_size(-1) == ((size_t)-1));
|
||||
#ifdef GMIO_HAVE_INT64_TYPE
|
||||
# if GMIO_TARGET_ARCH_BIT_SIZE < 64
|
||||
const gmio_streamsize_t overMaxSizet =
|
||||
((gmio_streamsize_t)GMIO_MAX_SIZET) + 1;
|
||||
UTEST_ASSERT(gmio_streamsize_to_size(overMaxSizet) == GMIO_MAX_SIZET);
|
||||
# endif
|
||||
UTEST_ASSERT(gmio_streamsize_to_size(GMIO_MAX_SIZET) == GMIO_MAX_SIZET);
|
||||
UTEST_ASSERT(gmio_streamsize_to_size(150) == 150);
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,7 @@ struct stl_testcase_result
|
||||
typedef struct stl_testcase_result stl_testcase_result_t;
|
||||
|
||||
void stl_testcase_result__ascii_begin_solid(
|
||||
void* cookie, size_t stream_size, const char* solid_name)
|
||||
void* cookie, gmio_streamsize_t stream_size, const char* solid_name)
|
||||
{
|
||||
stl_testcase_result_t* res = (stl_testcase_result_t*)cookie;
|
||||
GMIO_UNUSED(stream_size);
|
||||
|
Loading…
Reference in New Issue
Block a user