changed: OutStreams<>::streams_map should not have null pointers to StreamType objects
git-svn-id: svn://ttmath.org/publicrep/ezc/trunk@1018 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
0dc807dbff
commit
a1ea2e3ccd
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2007-2014, Tomasz Sowa
|
Copyright (c) 2007-2015, Tomasz Sowa
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1328,27 +1328,26 @@ void Generator<StreamType>::CopyTmpStreamToOutputStreams(Item::Function & fun, S
|
||||||
for(size_t s=0 ; s < fun.parameters.size() ; ++s)
|
for(size_t s=0 ; s < fun.parameters.size() ; ++s)
|
||||||
{
|
{
|
||||||
std::wstring & name = fun.parameters[s]->name;
|
std::wstring & name = fun.parameters[s]->name;
|
||||||
std::pair<typename OutStreams<StreamType>::StreamsMap::iterator, bool> iterator_inserted = output_stream_map->streams_map.insert(std::make_pair(name, (StreamType*)0));
|
auto imap = output_stream_map->streams_map.find(name);
|
||||||
|
|
||||||
StreamType * & stream = iterator_inserted.first->second;
|
if( imap == output_stream_map->streams_map.end() )
|
||||||
bool inserted = iterator_inserted.second;
|
|
||||||
|
|
||||||
if( inserted )
|
|
||||||
{
|
{
|
||||||
if( output_stream_map->streams_map.size() <= output_stream_map->streams_tab.size() )
|
if( output_stream_map->streams_map.size() < output_stream_map->streams_tab.size() )
|
||||||
{
|
{
|
||||||
/* a new stream from the pool (output_stream_tab) has been taken */
|
/* a new stream from the pool (output_stream_tab) is taken */
|
||||||
stream = output_stream_map->streams_tab[ output_stream_map->streams_map.size() - 1 ];
|
StreamType * stream = output_stream_map->streams_tab[ output_stream_map->streams_map.size() ];
|
||||||
|
output_stream_map->streams_map.insert(std::make_pair(name, stream));
|
||||||
ClearStream(*stream);
|
ClearStream(*stream);
|
||||||
stream->write(str.c_str(), str.size());
|
stream->write(str.c_str(), str.size());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CreateMsg(previous_stream, L"limit of output streams has been reached");
|
CreateMsg(previous_stream, L"limit of output streams in OutStreams<> has been reached");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
StreamType * stream = imap->second;
|
||||||
stream->write(str.c_str(), str.size());
|
stream->write(str.c_str(), str.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ class OutStreams
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef std::map<std::wstring, StreamType*> StreamsMap; // can have null pointers
|
typedef std::map<std::wstring, StreamType*> StreamsMap;
|
||||||
typedef std::vector<StreamType*> StreamsTab;
|
typedef std::vector<StreamType*> StreamsTab;
|
||||||
|
|
||||||
StreamsMap streams_map;
|
StreamsMap streams_map;
|
||||||
|
|
Loading…
Reference in New Issue