From dfc78eab058bbbf77f7892f2f49633f09ecac2e4 Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 1 May 2011 17:47:55 +0100 Subject: [PATCH] Mde serialisation independant of volume type. --- library/PolyVoxUtil/include/Serialization.h | 32 +++++++------- library/PolyVoxUtil/include/Serialization.inl | 43 +++++++++---------- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/library/PolyVoxUtil/include/Serialization.h b/library/PolyVoxUtil/include/Serialization.h index ee5894ca..f321bcbf 100644 --- a/library/PolyVoxUtil/include/Serialization.h +++ b/library/PolyVoxUtil/include/Serialization.h @@ -41,29 +41,29 @@ namespace PolyVox //////////////////////////////////////////////////////////////////////////////// // THESE FUNCTIONS ARE DEPRECATED. USE VERSIONED 'loadVolume' AND 'saveVolume' INSTEAD. //////////////////////////////////////////////////////////////////////////////// - template - polyvox_shared_ptr< LargeVolume > loadVolumeRaw(std::istream& stream, VolumeSerializationProgressListener* progressListener = 0); - template - void saveVolumeRaw(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + polyvox_shared_ptr< VolumeType > loadVolumeRaw(std::istream& stream, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + void saveVolumeRaw(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener = 0); - template - polyvox_shared_ptr< LargeVolume > loadVolumeRle(std::istream& stream, VolumeSerializationProgressListener* progressListener = 0); - template - void saveVolumeRle(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + polyvox_shared_ptr< VolumeType > loadVolumeRle(std::istream& stream, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + void saveVolumeRle(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener = 0); //////////////////////////////////////////////////////////////////////////////// // END OF DEPRECATED FUNCTIONS //////////////////////////////////////////////////////////////////////////////// - template - bool loadVolume(std::istream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener = 0); - template - bool saveVolume(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + bool loadVolume(std::istream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + bool saveVolume(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener = 0); - template - bool loadVersion0(std::istream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener = 0); - template - bool saveVersion0(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + bool loadVersion0(std::istream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener = 0); + template< template class VolumeType, typename VoxelType> + bool saveVersion0(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener = 0); } #include "Serialization.inl" diff --git a/library/PolyVoxUtil/include/Serialization.inl b/library/PolyVoxUtil/include/Serialization.inl index 34d10e18..e7fc630b 100644 --- a/library/PolyVoxUtil/include/Serialization.inl +++ b/library/PolyVoxUtil/include/Serialization.inl @@ -21,15 +21,14 @@ freely, subject to the following restrictions: distribution. *******************************************************************************/ -#include "LargeVolume.h" #include "PolyVoxImpl/Utility.h" namespace PolyVox { //Note: we don't do much error handling in here - exceptions will simply be propergated up to the caller. //FIXME - think about pointer ownership issues. Or could return volume by value if the copy constructor is shallow - template - polyvox_shared_ptr< LargeVolume > loadVolumeRaw(std::istream& stream, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + polyvox_shared_ptr< VolumeType > loadVolumeRaw(std::istream& stream, VolumeSerializationProgressListener* progressListener) { assert(false); //THIS FUNCTION IS DEPRECATED. REMOVE THIS ASSERT TO CONTINUE, BUT SWITCH TO 'loadVolume()' ASAP. @@ -46,7 +45,7 @@ namespace PolyVox uint16_t volumeDepth = 0x0001 << volumeDepthPower; //FIXME - need to support non cubic volumes - polyvox_shared_ptr< LargeVolume > volume(new LargeVolume(volumeWidth, volumeHeight, volumeDepth)); + polyvox_shared_ptr< VolumeType > volume(new LargeVolume(volumeWidth, volumeHeight, volumeDepth)); //Read data for(uint16_t z = 0; z < volumeDepth; ++z) @@ -79,8 +78,8 @@ namespace PolyVox return volume; } - template - void saveVolumeRaw(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + void saveVolumeRaw(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener) { assert(false); //THIS FUNCTION IS DEPRECATED. REMOVE THIS ASSERT TO CONTINUE, BUT SWITCH TO 'saveVolume()' ASAP. @@ -98,7 +97,7 @@ namespace PolyVox stream.write(reinterpret_cast(&volumeDepthPower), sizeof(volumeDepthPower)); //Write data - LargeVolume::Sampler volIter(&volume); + VolumeType::Sampler volIter(&volume); for(uint16_t z = 0; z < volumeDepth; ++z) { //Update progress once per slice. @@ -128,8 +127,8 @@ namespace PolyVox //Note: we don't do much error handling in here - exceptions will simply be propergated up to the caller. //FIXME - think about pointer ownership issues. Or could return volume by value if the copy constructor is shallow - template - polyvox_shared_ptr< LargeVolume > loadVolumeRle(std::istream& stream, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + polyvox_shared_ptr< VolumeType > loadVolumeRle(std::istream& stream, VolumeSerializationProgressListener* progressListener) { assert(false); //THIS FUNCTION IS DEPRECATED. REMOVE THIS ASSERT TO CONTINUE, BUT SWITCH TO 'loadVolume()' ASAP. @@ -146,7 +145,7 @@ namespace PolyVox uint16_t volumeDepth = 0x0001 << volumeDepthPower; //FIXME - need to support non cubic volumes - polyvox_shared_ptr< LargeVolume > volume(new LargeVolume(volumeWidth, volumeHeight, volumeDepth)); + polyvox_shared_ptr< VolumeType > volume(new LargeVolume(volumeWidth, volumeHeight, volumeDepth)); //Read data bool firstTime = true; @@ -193,8 +192,8 @@ namespace PolyVox return volume; } - template - void saveVolumeRle(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + void saveVolumeRle(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener) { assert(false); //THIS FUNCTION IS DEPRECATED. REMOVE THIS ASSERT TO CONTINUE, BUT SWITCH TO 'saveVolume()' ASAP. @@ -212,7 +211,7 @@ namespace PolyVox stream.write(reinterpret_cast(&volumeDepthPower), sizeof(volumeDepthPower)); //Write data - LargeVolume::Sampler volIter(&volume); + VolumeType::Sampler volIter(&volume); VoxelType current; uint32_t runLength = 0; bool firstTime = true; @@ -268,8 +267,8 @@ namespace PolyVox // New version of load/save code with versioning //////////////////////////////////////////////////////////////////////////////////////////////////// - template - bool loadVolume(std::istream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + bool loadVolume(std::istream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener) { char pIdentifier[8]; stream.read(pIdentifier, 7); @@ -293,8 +292,8 @@ namespace PolyVox } - template - bool saveVolume(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + bool saveVolume(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener) { char pIdentifier[] = "PolyVox"; stream.write(pIdentifier, 7); @@ -307,8 +306,8 @@ namespace PolyVox //Note: we don't do much error handling in here - exceptions will simply be propergated up to the caller. //FIXME - think about pointer ownership issues. Or could return volume by value if the copy constructor is shallow - template - bool loadVersion0(std::istream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + bool loadVersion0(std::istream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener) { //Read volume dimensions uint16_t volumeWidth = 0; @@ -367,8 +366,8 @@ namespace PolyVox return true; } - template - bool saveVersion0(std::ostream& stream, LargeVolume& volume, VolumeSerializationProgressListener* progressListener) + template< template class VolumeType, typename VoxelType> + bool saveVersion0(std::ostream& stream, VolumeType& volume, VolumeSerializationProgressListener* progressListener) { //Write volume dimensions uint16_t volumeWidth = volume.getWidth(); @@ -380,7 +379,7 @@ namespace PolyVox stream.write(reinterpret_cast(&volumeDepth), sizeof(volumeDepth)); //Write data - LargeVolume::Sampler volIter(&volume); + VolumeType::Sampler volIter(&volume); VoxelType current; uint32_t runLength = 0; bool firstTime = true;