mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #453 from babrodtk/bugfix_backup_restore
Fix bug reading directly into data owned by std::string
This commit is contained in:
commit
61f49793fb
@ -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( reinterpret_cast<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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user