Commit 0da753df authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Fixed comparison between signed and unsigned types in TNL::File

parent 58e7adde
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ enum tnlIOMode { tnlUndefinedMode = 0,
 * http://wiki.accelereyes.com/wiki/index.php/GPU_Memory_Transfer
 * Similar constant is defined in tnlLonegVectorCUDA
 */
const int tnlFileGPUvsCPUTransferBufferSize = 5 * 2<<20;
const size_t tnlFileGPUvsCPUTransferBufferSize = 5 * 2<<20;

/*
 * This file is aimed mainly for the binary data. It supports transparent compression.
@@ -49,9 +49,9 @@ class File

   String fileName;

   long int writtenElements;
   size_t writtenElements;

   long int readElements;
   size_t readElements;

   public:

+23 −13
Original line number Diff line number Diff line
@@ -27,10 +27,15 @@ bool File :: write( const Type* buffer )

template< typename Type, typename Device, typename Index >
bool File :: read( Type* buffer,
                      const Index& elements )
                   const Index& _elements )
{
   Assert( elements >= 0,
              std::cerr << " elements = " << elements << std::endl; );
   Assert( _elements >= 0,
           std::cerr << " elements = " << _elements << std::endl; );

   // convert _elements from Index to size_t, which is *unsigned* type
   // (expected by fread etc)
   size_t elements = (size_t) _elements;

   if( ! elements )
      return true;
   if( ! fileOK )
@@ -44,7 +49,7 @@ bool File :: read( Type* buffer,
      return false;
   }
   this->readElements = 0;
   const Index host_buffer_size = std::min( ( Index ) ( tnlFileGPUvsCPUTransferBufferSize / sizeof( Type ) ),
   const size_t host_buffer_size = std::min( tnlFileGPUvsCPUTransferBufferSize / sizeof( Type ),
                                             elements );
   void* host_buffer( 0 );
   if( std::is_same< Device, Devices::Host >::value )
@@ -84,7 +89,7 @@ bool File :: read( Type* buffer,

      while( readElements < elements )
      {
         int transfer = :: min( ( Index ) ( elements - readElements ), host_buffer_size );
         size_t transfer = std::min( elements - readElements, host_buffer_size );
         size_t transfered = fread( host_buffer, sizeof( Type ), transfer, file );
         if( transfered != transfer )
         {
@@ -119,10 +124,15 @@ bool File :: read( Type* buffer,

template< class Type, typename Device, typename Index >
bool File :: write( const Type* buffer,
                        const Index elements )
                    const Index _elements )
{
   Assert( elements >= 0,
              std::cerr << " elements = " << elements << std::endl; );
   Assert( _elements >= 0,
           std::cerr << " elements = " << _elements << std::endl; );

   // convert _elements from Index to size_t, which is *unsigned* type
   // (expected by fread etc)
   size_t elements = (size_t) _elements;

   if( ! elements )
      return true;
   if( ! fileOK )
@@ -139,7 +149,7 @@ bool File :: write( const Type* buffer,
   Type* buf = const_cast< Type* >( buffer );
   void* host_buffer( 0 );
   this->writtenElements = 0;
   const long int host_buffer_size = std::min( ( Index ) ( tnlFileGPUvsCPUTransferBufferSize / sizeof( Type ) ),
   const size_t host_buffer_size = std::min( tnlFileGPUvsCPUTransferBufferSize / sizeof( Type ),
                                             elements );
   if( std::is_same< Device, Devices::Host >::value )
   {
@@ -176,7 +186,7 @@ bool File :: write( const Type* buffer,

         while( this->writtenElements < elements )
         {
            Index transfer = min( elements - this->writtenElements, host_buffer_size );
            size_t transfer = std::min( elements - this->writtenElements, host_buffer_size );
            cudaMemcpy( host_buffer,
                       ( void* ) & ( buffer[ this->writtenElements ] ),
                       transfer * sizeof( Type ),