⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialize.hpp

📁 FreeFem++可以生成高质量的有限元网格。可以用于流体力学
💻 HPP
字号:
// -*- Mode : c++ -*-//// SUMMARY  :      // USAGE    :        // ORG      : // AUTHOR   : Frederic Hecht// E-MAIL   : hecht@ann.jussieu.fr///*  This file is part of Freefem++  Freefem++ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.  Freefem++  is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.  You should have received a copy of the GNU Lesser General Public License along with Freefem++; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */#ifndef SERIALEZE_HPP_#define SERIALEZE_HPP_#include <cstring>#include "endian.hpp"struct MPIrank; class Serialize {     // we store a refcounter in the pointer p a adresse p-sizeof(long)   // so we can use the copy constructor   private:      size_t lg;  const char *what;  char * p;   public:   Serialize(size_t lgg,const char * wht):     lg(lgg), what(wht) , p((new char[lg+sizeof(long)])+sizeof(long))    { //cout << " begin count()=0 " << endl;    count()=0; }    ~Serialize(){ if(count()--==0) delete [] (p-sizeof(long));}  size_t size() const { return lg;}  //  mpi routine  void mpisend(const MPIrank &,long tag);  Serialize(const MPIrank &,const char * wht,long tag);   //  end mpi routine   operator void *() { return p;}   operator char *() { return p;}   bool samewhat(const char * w) const { return strncmp(what,w,8)==0; }  Serialize(const Serialize & s) :    lg(s.lg),    what(s.what) ,      p(s.p)   { count()++; }    template<typename T>  inline void get(size_t & k,T & x) const   {      T xx;//= r_endian(x);     assert(k<=lg+sizeof(T));     memcpy(&xx,p+ k,sizeof(T));     k +=  sizeof(T);     x=r_endian(xx);   }   template<typename T>  inline void put(size_t & k,const T & x)    {      if ( !(k<=lg+sizeof(T)) )       {	 cout << " assert put " << k << " <=" << lg + sizeof(T) << endl;	 assert((k<=lg+sizeof(T)));       }     T xx= w_endian(x);     memcpy( p + k,&xx,sizeof(T));     k += sizeof(T);   }    private:   long & count() const  { return * (long*) (void*) (p-sizeof(long));}   void operator=(Serialize & s) ; // no affectation };#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -