Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1805 - trunk/Core/Persistent


Chronological Thread 
  • From: sparker@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1805 - trunk/Core/Persistent
  • Date: Fri, 2 Nov 2007 17:05:51 -0600 (MDT)

Author: sparker
Date: Fri Nov  2 17:05:51 2007
New Revision: 1805

Modified:
   trunk/Core/Persistent/Archive.cc
Log:
Fixed problem with static initialization order (I think)


Modified: trunk/Core/Persistent/Archive.cc
==============================================================================
--- trunk/Core/Persistent/Archive.cc    (original)
+++ trunk/Core/Persistent/Archive.cc    Fri Nov  2 17:05:51 2007
@@ -15,7 +15,7 @@
   Archive* (*writeopener)(const std::string&);
 };
 
-static ArchiveType archiveTypes[10];
+static ArchiveType* archiveTypes[10];
 static int numArchiveTypes = 0;
 
 bool Archive::registerArchiveType(const std::string& name,
@@ -25,9 +25,10 @@
   int maxArchiveTypes = sizeof(archiveTypes)/sizeof(ArchiveType);
   if(numArchiveTypes >= maxArchiveTypes)
     throw InternalError("Maximum number of archive types exceeded", 
__FILE__, __LINE__);
-  archiveTypes[numArchiveTypes].name = name;
-  archiveTypes[numArchiveTypes].readopener = readopener;
-  archiveTypes[numArchiveTypes].writeopener = writeopener;
+  archiveTypes[numArchiveTypes] = new ArchiveType();
+  archiveTypes[numArchiveTypes]->name = name;
+  archiveTypes[numArchiveTypes]->readopener = readopener;
+  archiveTypes[numArchiveTypes]->writeopener = writeopener;
   numArchiveTypes++;
   return true;
 }
@@ -35,7 +36,7 @@
 Archive* Archive::openForReading(const std::string& filename)
 {
   for(int i=0;i<numArchiveTypes;i++){
-    Archive* (*readopener)(const std::string&) = archiveTypes[i].readopener;
+    Archive* (*readopener)(const std::string&) = archiveTypes[i]->readopener;
     if(readopener){
       Archive* archive = (*readopener)(filename);
       if(archive)
@@ -49,7 +50,7 @@
 {
   Archive* result = 0;
   for(int i=0;i<numArchiveTypes;i++){
-    Archive* (*writeopener)(const std::string&) = 
archiveTypes[i].writeopener;
+    Archive* (*writeopener)(const std::string&) = 
archiveTypes[i]->writeopener;
     if(writeopener){
       Archive* archive = (*writeopener)(filename);
       if(archive){




  • [Manta] r1805 - trunk/Core/Persistent, sparker, 11/02/2007

Archive powered by MHonArc 2.6.16.

Top of page