46f39d5fbd
Add an alternate constructor to each of the following classes: ZlibAbstractIStreambuf, ZlibCompressorIStreambuf, ZlibDecompressorIStreambuf, ZlibCompressorIStream and ZlibDecompressorIStream. These new constructors are passed the source std::istream wrapped inside an std::unique_ptr instead of by reference, and store the unique_ptr object as an instance member. This ensures that the source std::istream object is available as long as the ZlibDecompressorIStreambuf, etc. instance is alive (which is necessary for its getInputData() method) without any additional work for callers, and that it is automatically destroyed afterwards. This is particularly useful when writing functions that create and return an object 'zobj' whose type is a subclass of ZlibAbstractIStreambuf, when the source std::istream is only of interest for its role of feeding data to 'zobj'. For instance: std::unique_ptr<simgear::ZlibCompressorIStream> myZlibCompressorIStreamProducer(std::string str) { std::unique_ptr<std::istringstream> iss(new std::istringstream(str)); return std::unique_ptr<simgear::ZlibCompressorIStream>( new simgear::ZlibCompressorIStream(std::move(iss))); // new ctor here } Callers of such a function get access to a new ZlibCompressorIStream instance fed by an std::istringstream object ('iss'), but they don't even have to know this detail, nor to take any measure to ensure that 'iss' lives at least as long as the ZlibCompressorIStream object. The std::unique_ptr<std::istream> pointing to 'iss' and stored as a member of the ZlibCompressorIStream object by its constructor automatically takes care of this lifetime problem. |
||
---|---|---|
3rdparty | ||
CMakeModules | ||
package | ||
simgear | ||
.gitignore | ||
AUTHORS | ||
ChangeLog | ||
CMakeLists.txt | ||
COPYING | ||
Doxyfile | ||
DoxygenMain.cxx | ||
INSTALL | ||
NEWS | ||
README | ||
README.cmake | ||
README.OpenAL | ||
README.OSG | ||
README.zlib | ||
SimGear.spec.in | ||
SimGearConfig.cmake.in | ||
Thanks | ||
version |
SimGear - Simulator Construction Tools ====================================== http://www.flightgear.org SimGear is a set of open-source libraries designed to be used as building blocks for quickly assembling 3d simulations, games, and visualization applications. SimGear is developed by the FlightGear project and also provides the base for the FlightGear Flight Simulator. Source code for SimGear is released under the GNU Library General Public License (LGPL) - see COPYING for license details. See INSTALL file for help on building SimGear.