Changeset 138 for trunk/src


Ignore:
Timestamp:
06/29/13 19:02:04 (12 years ago)
Author:
epyon
Message:
  • io/std_stream - PROPER std_stream implementation
  • io/std_stream - got rid of memmove
  • formats/obj_loader - no copy on read, properly streamed
Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/formats/obj_loader.cc

    r136 r138  
    66
    77#include "nv/formats/obj_loader.hh"
     8#include "nv/io/std_stream.hh"
    89#include <sstream>
    910
     
    187188        m_mesh = new mesh();
    188189        mesh_obj_reader reader( m_mesh );
    189         size_t size = source.size();
    190         char* data  = new char[ size ];
    191         source.read( data, 1, size );
    192         std::string cache( data, size );
    193         std::istringstream sstream( cache );
     190        std_stream sstream( &source );
    194191        reader.read_stream( sstream );
    195192        m_size = reader.size;
  • trunk/src/io/std_stream.cc

    r135 r138  
    99#include "nv/io/std_stream.hh"
    1010#include <algorithm>
    11 #include <cstring> // TODO: remove, see below
    1211
    1312using namespace nv;
    1413
    15 std_stream::std_stream( stream* source, bool owner /*= false*/, std::size_t bsize /*= 256*/, std::size_t put_back /*= 8 */ )
     14std_streambuf::std_streambuf( stream* source, bool owner /*= false*/, std::size_t bsize /*= 256*/, std::size_t put_back /*= 8 */ )
    1615        : m_stream( source )
    1716        , m_owner( owner )
     
    2322}
    2423
    25 std_stream::~std_stream()
     24std_streambuf::~std_streambuf()
    2625{
    2726        if ( m_owner )
     
    3130}
    3231
    33 std_stream::int_type std_stream::underflow()
     32std_streambuf::int_type std_streambuf::underflow()
    3433{
    3534        if (gptr() < egptr())
     
    4544        {
    4645                // Make arrangements for putback characters
    47                 // TODO: std::copy( egptr() - m_put_back, egptr(), base ); instead?
    48                 std::memmove(base, egptr() - m_put_back, m_put_back);
     46                std::copy( egptr() - m_put_back, egptr(), base );
    4947                start += m_put_back;
    5048        }
Note: See TracChangeset for help on using the changeset viewer.