@@ -99,8 +99,13 @@ struct StreamState
9999 int halfFloat;
100100 int mappedFile;
101101 int metadata;
102+ };
103+
104+ inline StreamState& GetSteamState ()
105+ {
106+ static StreamState sStreamState ;
107+ return sStreamState ;
102108}
103- sStreamState ;
104109
105110const long StreamState::MAGIC_NUMBER =
106111 long ((uint64_t (OPENVDB_MAGIC) << 32 ) | (uint64_t (OPENVDB_MAGIC)));
@@ -654,14 +659,14 @@ uint32_t
654659getFormatVersion (std::ios_base& is)
655660{
656661 // / @todo get from StreamMetadata
657- return static_cast <uint32_t >(is.iword (sStreamState .fileVersion ));
662+ return static_cast <uint32_t >(is.iword (GetSteamState () .fileVersion ));
658663}
659664
660665
661666void
662667Archive::setFormatVersion (std::istream& is)
663668{
664- is.iword (sStreamState .fileVersion ) = mFileVersion ; // /< @todo remove
669+ is.iword (GetSteamState () .fileVersion ) = mFileVersion ; // /< @todo remove
665670 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (is)) {
666671 meta->setFileVersion (mFileVersion );
667672 }
@@ -673,17 +678,17 @@ getLibraryVersion(std::ios_base& is)
673678{
674679 // / @todo get from StreamMetadata
675680 VersionId version;
676- version.first = static_cast <uint32_t >(is.iword (sStreamState .libraryMajorVersion ));
677- version.second = static_cast <uint32_t >(is.iword (sStreamState .libraryMinorVersion ));
681+ version.first = static_cast <uint32_t >(is.iword (GetSteamState () .libraryMajorVersion ));
682+ version.second = static_cast <uint32_t >(is.iword (GetSteamState () .libraryMinorVersion ));
678683 return version;
679684}
680685
681686
682687void
683688Archive::setLibraryVersion (std::istream& is)
684689{
685- is.iword (sStreamState .libraryMajorVersion ) = mLibraryVersion .first ; // /< @todo remove
686- is.iword (sStreamState .libraryMinorVersion ) = mLibraryVersion .second ; // /< @todo remove
690+ is.iword (GetSteamState () .libraryMajorVersion ) = mLibraryVersion .first ; // /< @todo remove
691+ is.iword (GetSteamState () .libraryMinorVersion ) = mLibraryVersion .second ; // /< @todo remove
687692 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (is)) {
688693 meta->setLibraryVersion (mLibraryVersion );
689694 }
@@ -703,9 +708,9 @@ getVersion(std::ios_base& is)
703708void
704709setCurrentVersion (std::istream& is)
705710{
706- is.iword (sStreamState .fileVersion ) = OPENVDB_FILE_VERSION; // /< @todo remove
707- is.iword (sStreamState .libraryMajorVersion ) = OPENVDB_LIBRARY_MAJOR_VERSION; // /< @todo remove
708- is.iword (sStreamState .libraryMinorVersion ) = OPENVDB_LIBRARY_MINOR_VERSION; // /< @todo remove
711+ is.iword (GetSteamState () .fileVersion ) = OPENVDB_FILE_VERSION; // /< @todo remove
712+ is.iword (GetSteamState () .libraryMajorVersion ) = OPENVDB_LIBRARY_MAJOR_VERSION; // /< @todo remove
713+ is.iword (GetSteamState () .libraryMinorVersion ) = OPENVDB_LIBRARY_MINOR_VERSION; // /< @todo remove
709714 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (is)) {
710715 meta->setFileVersion (OPENVDB_FILE_VERSION);
711716 meta->setLibraryVersion (VersionId (
@@ -717,9 +722,9 @@ setCurrentVersion(std::istream& is)
717722void
718723setVersion (std::ios_base& strm, const VersionId& libraryVersion, uint32_t fileVersion)
719724{
720- strm.iword (sStreamState .fileVersion ) = fileVersion; // /< @todo remove
721- strm.iword (sStreamState .libraryMajorVersion ) = libraryVersion.first ; // /< @todo remove
722- strm.iword (sStreamState .libraryMinorVersion ) = libraryVersion.second ; // /< @todo remove
725+ strm.iword (GetSteamState () .fileVersion ) = fileVersion; // /< @todo remove
726+ strm.iword (GetSteamState () .libraryMajorVersion ) = libraryVersion.first ; // /< @todo remove
727+ strm.iword (GetSteamState () .libraryMinorVersion ) = libraryVersion.second ; // /< @todo remove
723728 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (strm)) {
724729 meta->setFileVersion (fileVersion);
725730 meta->setLibraryVersion (libraryVersion);
@@ -743,14 +748,14 @@ uint32_t
743748getDataCompression (std::ios_base& strm)
744749{
745750 // / @todo get from StreamMetadata
746- return uint32_t (strm.iword (sStreamState .dataCompression ));
751+ return uint32_t (strm.iword (GetSteamState () .dataCompression ));
747752}
748753
749754
750755void
751756setDataCompression (std::ios_base& strm, uint32_t c)
752757{
753- strm.iword (sStreamState .dataCompression ) = c; // /< @todo remove
758+ strm.iword (GetSteamState () .dataCompression ) = c; // /< @todo remove
754759 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (strm)) {
755760 meta->setCompression (c);
756761 }
@@ -832,14 +837,14 @@ bool
832837getWriteGridStatsMetadata (std::ios_base& strm)
833838{
834839 // / @todo get from StreamMetadata
835- return strm.iword (sStreamState .writeGridStatsMetadata ) != 0 ;
840+ return strm.iword (GetSteamState () .writeGridStatsMetadata ) != 0 ;
836841}
837842
838843
839844void
840845setWriteGridStatsMetadata (std::ios_base& strm, bool writeGridStats)
841846{
842- strm.iword (sStreamState .writeGridStatsMetadata ) = writeGridStats; // /< @todo remove
847+ strm.iword (GetSteamState () .writeGridStatsMetadata ) = writeGridStats; // /< @todo remove
843848 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (strm)) {
844849 meta->setWriteGridStats (writeGridStats);
845850 }
@@ -853,7 +858,7 @@ uint32_t
853858getGridClass (std::ios_base& strm)
854859{
855860 // / @todo get from StreamMetadata
856- const uint32_t val = static_cast <uint32_t >(strm.iword (sStreamState .gridClass ));
861+ const uint32_t val = static_cast <uint32_t >(strm.iword (GetSteamState () .gridClass ));
857862 if (val >= NUM_GRID_CLASSES) return GRID_UNKNOWN;
858863 return val;
859864}
@@ -862,7 +867,7 @@ getGridClass(std::ios_base& strm)
862867void
863868setGridClass (std::ios_base& strm, uint32_t cls)
864869{
865- strm.iword (sStreamState .gridClass ) = long (cls); // /< @todo remove
870+ strm.iword (GetSteamState () .gridClass ) = long (cls); // /< @todo remove
866871 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (strm)) {
867872 meta->setGridClass (cls);
868873 }
@@ -873,14 +878,14 @@ bool
873878getHalfFloat (std::ios_base& strm)
874879{
875880 // / @todo get from StreamMetadata
876- return strm.iword (sStreamState .halfFloat ) != 0 ;
881+ return strm.iword (GetSteamState () .halfFloat ) != 0 ;
877882}
878883
879884
880885void
881886setHalfFloat (std::ios_base& strm, bool halfFloat)
882887{
883- strm.iword (sStreamState .halfFloat ) = halfFloat; // /< @todo remove
888+ strm.iword (GetSteamState () .halfFloat ) = halfFloat; // /< @todo remove
884889 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (strm)) {
885890 meta->setHalfFloat (halfFloat);
886891 }
@@ -891,14 +896,14 @@ const void*
891896getGridBackgroundValuePtr (std::ios_base& strm)
892897{
893898 // / @todo get from StreamMetadata
894- return strm.pword (sStreamState .gridBackground );
899+ return strm.pword (GetSteamState () .gridBackground );
895900}
896901
897902
898903void
899904setGridBackgroundValuePtr (std::ios_base& strm, const void * background)
900905{
901- strm.pword (sStreamState .gridBackground ) = const_cast <void *>(background); // /< @todo remove
906+ strm.pword (GetSteamState () .gridBackground ) = const_cast <void *>(background); // /< @todo remove
902907 if (StreamMetadata::Ptr meta = getStreamMetadataPtr (strm)) {
903908 meta->setBackgroundPtr (background);
904909 }
@@ -909,7 +914,7 @@ setGridBackgroundValuePtr(std::ios_base& strm, const void* background)
909914MappedFile::Ptr
910915getMappedFilePtr (std::ios_base& strm)
911916{
912- if (const void * ptr = strm.pword (sStreamState .mappedFile )) {
917+ if (const void * ptr = strm.pword (GetSteamState () .mappedFile )) {
913918 return *static_cast <const MappedFile::Ptr*>(ptr);
914919 }
915920 return MappedFile::Ptr ();
@@ -919,15 +924,15 @@ getMappedFilePtr(std::ios_base& strm)
919924void
920925setMappedFilePtr (std::ios_base& strm, io::MappedFile::Ptr& mappedFile)
921926{
922- strm.pword (sStreamState .mappedFile ) = &mappedFile;
927+ strm.pword (GetSteamState () .mappedFile ) = &mappedFile;
923928}
924929#endif // OPENVDB_USE_DELAYED_LOADING
925930
926931
927932StreamMetadata::Ptr
928933getStreamMetadataPtr (std::ios_base& strm)
929934{
930- if (const void * ptr = strm.pword (sStreamState .metadata )) {
935+ if (const void * ptr = strm.pword (GetSteamState () .metadata )) {
931936 return *static_cast <const StreamMetadata::Ptr*>(ptr);
932937 }
933938 return StreamMetadata::Ptr ();
@@ -937,7 +942,7 @@ getStreamMetadataPtr(std::ios_base& strm)
937942void
938943setStreamMetadataPtr (std::ios_base& strm, StreamMetadata::Ptr& meta, bool transfer)
939944{
940- strm.pword (sStreamState .metadata ) = &meta;
945+ strm.pword (GetSteamState () .metadata ) = &meta;
941946 if (transfer && meta) meta->transferTo (strm);
942947}
943948
@@ -946,7 +951,7 @@ StreamMetadata::Ptr
946951clearStreamMetadataPtr (std::ios_base& strm)
947952{
948953 StreamMetadata::Ptr result = getStreamMetadataPtr (strm);
949- strm.pword (sStreamState .metadata ) = nullptr ;
954+ strm.pword (GetSteamState () .metadata ) = nullptr ;
950955 return result;
951956}
952957
@@ -1201,8 +1206,8 @@ doReadGrid(GridBase::Ptr grid, const GridDescriptor& gd, std::istream& is, const
12011206
12021207 // Restore the file-level stream metadata on exit.
12031208 struct OnExit {
1204- OnExit (std::ios_base& strm_): strm(&strm_), ptr(strm_.pword(sStreamState .metadata)) {}
1205- ~OnExit () { strm->pword (sStreamState .metadata ) = ptr; }
1209+ OnExit (std::ios_base& strm_): strm(&strm_), ptr(strm_.pword(GetSteamState() .metadata)) {}
1210+ ~OnExit () { strm->pword (GetSteamState () .metadata ) = ptr; }
12061211 std::ios_base* strm;
12071212 void * ptr;
12081213 };
@@ -1426,8 +1431,8 @@ Archive::writeGrid(GridDescriptor& gd, GridBase::ConstPtr grid,
14261431{
14271432 // Restore file-level stream metadata on exit.
14281433 struct OnExit {
1429- OnExit (std::ios_base& strm_): strm(&strm_), ptr(strm_.pword(sStreamState .metadata)) {}
1430- ~OnExit () { strm->pword (sStreamState .metadata ) = ptr; }
1434+ OnExit (std::ios_base& strm_): strm(&strm_), ptr(strm_.pword(GetSteamState() .metadata)) {}
1435+ ~OnExit () { strm->pword (GetSteamState () .metadata ) = ptr; }
14311436 std::ios_base* strm;
14321437 void * ptr;
14331438 };
0 commit comments