浏览代码

more windows fixes

Former-commit-id: 0a1bb1517852e807dbbaf0f5ae6572739f877cde
Daniele Panozzo 10 年之前
父节点
当前提交
e4a4e37c39
共有 2 个文件被更改,包括 18 次插入27 次删除
  1. 16 21
      include/igl/serialize.cpp
  2. 2 6
      include/igl/serialize.h

+ 16 - 21
include/igl/serialize.cpp

@@ -32,7 +32,7 @@ namespace igl
 
 
         buffer.resize(size);
         buffer.resize(size);
         file.read(&buffer[0],size);
         file.read(&buffer[0],size);
-        
+
         file.close();
         file.close();
       }
       }
     }
     }
@@ -61,7 +61,8 @@ namespace igl
     // serialize object data
     // serialize object data
     size_t size = detail::getByteSize(obj);
     size_t size = detail::getByteSize(obj);
     std::vector<char> tmp(size);
     std::vector<char> tmp(size);
-    detail::serialize(obj,tmp,tmp.begin());
+    std::vector<char>::iterator it = tmp.begin();
+    detail::serialize(obj,tmp,it);
 
 
     std::string objectType(typeid(obj).name());
     std::string objectType(typeid(obj).name());
     size_t newObjectSize = tmp.size();
     size_t newObjectSize = tmp.size();
@@ -70,36 +71,37 @@ namespace igl
     size_t oldHeaderSize = 0;
     size_t oldHeaderSize = 0;
 
 
     // find object header
     // find object header
-    std::vector<char>::iterator iter = buffer.begin();
-    while(iter != buffer.end())
+    std::vector<char>::const_iterator citer = buffer.cbegin();
+    while(citer != buffer.cend())
     {
     {
-      std::vector<char>::iterator iterTemp = iter;
+      std::vector<char>::const_iterator citerTemp = citer;
 
 
       std::string name;
       std::string name;
       std::string type;
       std::string type;
-      detail::deserialize(name,iter);
-      detail::deserialize(type,iter);
-      detail::deserialize(oldObjectSize,iter);
+      detail::deserialize(name,citer);
+      detail::deserialize(type,citer);
+      detail::deserialize(oldObjectSize,citer);
 
 
       if(name == objectName)
       if(name == objectName)
       {
       {
         if(type != typeid(obj).name())
         if(type != typeid(obj).name())
           std::cout << "object " + objectName + " was overwriten with different data type!" << std::endl;
           std::cout << "object " + objectName + " was overwriten with different data type!" << std::endl;
 
 
-        oldHeaderSize = iter - iterTemp;
-        iter = iterTemp;
+        oldHeaderSize = citer - citerTemp;
+        citer = citerTemp;
         break;
         break;
       }
       }
       else
       else
-        iter+=oldObjectSize;
+        citer+=oldObjectSize;
     }
     }
 
 
+    std::vector<char>::iterator iter = buffer.begin() + (citer-buffer.cbegin());
     if(iter != buffer.end())
     if(iter != buffer.end())
     {
     {
       std::vector<char>::iterator iterEndPart = iter+oldHeaderSize+oldObjectSize;
       std::vector<char>::iterator iterEndPart = iter+oldHeaderSize+oldObjectSize;
       size_t startPartSize = iter - buffer.begin();
       size_t startPartSize = iter - buffer.begin();
       size_t endPartSize = buffer.end()-iterEndPart;
       size_t endPartSize = buffer.end()-iterEndPart;
-      
+
       // copy end part of buffer
       // copy end part of buffer
       std::vector<char> endPartBuffer(endPartSize);
       std::vector<char> endPartBuffer(endPartSize);
       std::copy(iterEndPart,buffer.end(),endPartBuffer.begin());
       std::copy(iterEndPart,buffer.end(),endPartBuffer.begin());
@@ -120,7 +122,7 @@ namespace igl
       std::copy(endPartBuffer.begin(),endPartBuffer.end(),iter);
       std::copy(endPartBuffer.begin(),endPartBuffer.end(),iter);
     }
     }
     else
     else
-    { 
+    {
       size_t curSize = buffer.size();
       size_t curSize = buffer.size();
       size_t newSize = curSize + newHeaderSize + newObjectSize;
       size_t newSize = curSize + newHeaderSize + newObjectSize;
 
 
@@ -502,7 +504,7 @@ namespace igl
     IGL_INLINE size_t getByteSize(const Eigen::Matrix<T,R,C,P,MR,MC>& obj)
     IGL_INLINE size_t getByteSize(const Eigen::Matrix<T,R,C,P,MR,MC>& obj)
     {
     {
       // space for numbers of rows,cols and data
       // space for numbers of rows,cols and data
-      return 2*sizeof(Eigen::Matrix<T,R,C,P,MR,MC>::Index)+sizeof(T)*obj.rows()*obj.cols();
+      return 2*sizeof(typename Eigen::Matrix<T,R,C,P,MR,MC>::Index)+sizeof(T)*obj.rows()*obj.cols();
     }
     }
 
 
     template<typename T,int R,int C,int P,int MR,int MC>
     template<typename T,int R,int C,int P,int MR,int MC>
@@ -629,12 +631,5 @@ namespace igl
       }
       }
     }
     }
 
 
-    template <typename T>
-    std::vector<char>::iterator findObject(const T& obj,const std::string objectName, std::vector<char>& buffer)
-    {
-      
-
-      return iter;
-    }
   }
   }
 }
 }

+ 2 - 6
include/igl/serialize.h

@@ -89,7 +89,7 @@ namespace igl
   // };
   // };
 
 
   // Base interface for user defined types
   // Base interface for user defined types
-  struct SerializableBase 
+  struct SerializableBase
   {
   {
     virtual void Serialize(std::vector<char>& buffer) const = 0;
     virtual void Serialize(std::vector<char>& buffer) const = 0;
     virtual void Deserialize(const std::vector<char>& buffer) = 0;
     virtual void Deserialize(const std::vector<char>& buffer) = 0;
@@ -118,7 +118,7 @@ namespace igl
 
 
     mutable bool initialized;
     mutable bool initialized;
     mutable std::vector<SerializableBase*> objects;
     mutable std::vector<SerializableBase*> objects;
-  
+
   public:
   public:
 
 
     // Override this function to add your member variables which should be serialized
     // Override this function to add your member variables which should be serialized
@@ -226,10 +226,6 @@ namespace igl
     template <typename T>
     template <typename T>
     IGL_INLINE typename std::enable_if<std::is_pointer<T>::value>::type deserialize(T& obj,std::vector<char>::const_iterator& iter);
     IGL_INLINE typename std::enable_if<std::is_pointer<T>::value>::type deserialize(T& obj,std::vector<char>::const_iterator& iter);
 
 
-    // helper functions
-    template <typename T>
-    std::vector<char>::iterator findObject(const T& obj,const std::string objectName,std::vector<char>& buffer);
-
     // compile time type serializable check
     // compile time type serializable check
     template <typename T>
     template <typename T>
     struct is_stl_container { static const bool value = false; };
     struct is_stl_container { static const bool value = false; };