Fixed bug reading directly into data owned by string

This commit is contained in:
babrodtk 2015-09-02 14:18:52 +02:00
parent 009ae54523
commit e1632b8522

View File

@ -86,11 +86,27 @@ namespace Opm {
assert( int(size) == int(n) );
}
template <class Container>
void readData(std::istream& stream, Container& container, size_t datasize)
{
stream.read( (char*) container.data(), datasize );
}
//We need to be careful with string, because string.data() returns something that
//"A program shall not alter any of the characters in this sequence."
template <>
void readData<std::string>(std::istream& stream, std::string& string, size_t datasize)
{
std::vector<char> raw_data(datasize);
readData(stream, raw_data, datasize);
string = std::string(raw_data.data(), datasize);
}
template <class Container>
void readContainerImpl( std::istream& stream, Container& container, const bool adjustSize )
{
typedef typename Container :: value_type T;
unsigned int dataSize = 0;
size_t dataSize = 0;
readValue( stream, dataSize );
if( adjustSize && dataSize > 0 ) {
resizeContainer( container, dataSize/sizeof(T) );
@ -103,7 +119,7 @@ namespace Opm {
<< dataSize << " " << (container.size() * sizeof( T )) );
}
if( dataSize > 0 ) {
stream.read( (char *) container.data(), dataSize );
readData(stream, container, dataSize);
}
}