From: stephan b. <st...@wa...> - 2002-02-27 20:36:37
|
Man, i've wanted this feature of AGES, and it was made simple by some code written back in 1997, left lying around on a web page who's "Last Updated" date is also in '97. Old stuff, but it works great: SerialTree::saveToXMLFile( const QString &fn ) { ... QString xml = toString(); ozipstream ostr( fn ); ostr << xml; ostr.close(); ... } That's all it took to compress all saved data (minus error checking and other boring stuff). Object size comparisions with and without compression: tray with 14 different single-sided pieces: uncompressed: 14705 bytes compressed: 1217 bytes Board with 5 copies of the above tray: uncompressed: 79020 bytes compressed: 2254 bytes (!!!!!!!) Funny story: After saving my first object i wanted to see if it was really gzipped: less Board.board WHAT??? Not compressed? After several minutes of piddling with it i finally remembered that less automatically decompresses files compressed with zlib, and realized it had been compressed all along :/. <some time later...> Loading works now, too. All file-based serialization now uses zlib compression. This means the config file is a pain in the butt to edit by hand :/ (and the config editor is broken, but that's unrelated). It can still load uncompressed files, too (but only because the zip streamer passes non-gzipped data through as-is). The loading support is in SerialTree::loadFromXMLFile(), SerialTree-qxml.cpp. see ya! ----- st...@wa... http://qub.sourceforge.net - http://radioaqtiph.sourceforge.net http://www.countermoves.net - http://stephan.rootonfire.org "Now I'm not normally the kind of person who likes to trespass, but sometimes you just find yourself over the line." -- Bob Dylan |