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

📄 translate.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
字号:
// translate.cc//// Copyright (C) 1997 Limit Point Systems, Inc.//// Author: Curtis Janssen <cljanss@limitpt.com>// Maintainer: LPS//// This file is part of the SC Toolkit.//// The SC Toolkit is free software; you can redistribute it and/or modify// it under the terms of the GNU Library General Public License as published by// the Free Software Foundation; either version 2, or (at your option)// any later version.//// The SC Toolkit 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 Library General Public License for more details.//// You should have received a copy of the GNU Library General Public License// along with the SC Toolkit; see the file COPYING.LIB.  If not, write to// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.//// The U.S. Government is granted a limited license as per AL 91-7.//#include <util/state/state.h>#include <util/state/translate.h>#include <util/state/stateio.h>using namespace sc;////////////////////////////////////////////////////////////////////////static inline voidswap(char *d, int c1, int c2){  char tmp = d[c1];  d[c1] = d[c2];  d[c2] = tmp;}static inline voidswap(char *d, const char *e, int c1, int c2){  d[c1] = e[c2];  d[c2] = e[c1];}static inline voidbyte_swap2(char*d){  swap(d,0,1);}static inline voidbyte_swap2(char*d, const char *e){  swap(d,e,0,1);}static inline voidbyte_swap4(char*d){  swap(d,0,3);  swap(d,1,2);}static inline voidbyte_swap4(char*d, const char *e){  swap(d,e,0,3);  swap(d,e,1,2);}static inline voidbyte_swap8(char*d){  swap(d,0,7);  swap(d,1,6);  swap(d,2,5);  swap(d,3,4);}static inline voidbyte_swap8(char*d, const char *e){  swap(d,e,0,7);  swap(d,e,1,6);  swap(d,e,2,5);  swap(d,e,3,4);}static inline voidbyte_swap16(char*d){  swap(d,0,15);  swap(d,1,14);  swap(d,2,13);  swap(d,3,12);  swap(d,4,11);  swap(d,5,10);  swap(d,6, 9);  swap(d,7, 8);}static inline voidbyte_swap16(char*d, const char *e){  swap(d,e,0,15);  swap(d,e,1,14);  swap(d,e,2,13);  swap(d,e,3,12);  swap(d,e,4,11);  swap(d,e,5,10);  swap(d,e,6, 9);  swap(d,e,7, 8);}static inline voidbyte_swap2(void*data,int n){  char *d = (char*)data;  for (int i=0; i<n; i++) byte_swap2(&d[i<<1]);}static inline voidbyte_swap2(void*data,const void*edata,int n){  char *d = (char*)data;  char *e = (char*)edata;  for (int i=0; i<n; i++) byte_swap2(&d[i<<1],&e[i<<1]);}static inline voidbyte_swap4(void*data,int n){  char *d = (char*)data;  for (int i=0; i<n; i++) byte_swap4(&d[i<<2]);}static inline voidbyte_swap4(void*data,const void*edata,int n){  char *d = (char*)data;  char *e = (char*)edata;  for (int i=0; i<n; i++) byte_swap4(&d[i<<2],&e[i<<2]);}static inline voidbyte_swap8(void*data,int n){  char *d = (char*)data;  for (int i=0; i<n; i++) byte_swap8(&d[i<<3]);}static inline voidbyte_swap8(void*data,const void*edata,int n){  char *d = (char*)data;  char *e = (char*)edata;  for (int i=0; i<n; i++) byte_swap8(&d[i<<3],&e[i<<3]);}static inline voidbyte_swap16(void*data,int n){  char *d = (char*)data;  for (int i=0; i<n; i++) byte_swap16(&d[i<<4]);}static inline voidbyte_swap16(void*data,const void*edata,int n){  char *d = (char*)data;  char *e = (char*)edata;  for (int i=0; i<n; i++) byte_swap16(&d[i<<4],&e[i<<4]);}#define BST(T) \static inline void byte_swap(T*d,int n) \{ \  if (sizeof(T) == 2) byte_swap2(d,n); \  else if (sizeof(T) == 4) byte_swap4(d,n); \  else if (sizeof(T) == 8) byte_swap8(d,n); \  else if (sizeof(T) == 16) byte_swap16(d,n); \}#define BSTV(T) \static inline void byte_swap(T*d,const void*e,int n) \{ \  if (sizeof(T) == 2) byte_swap2(d,e,n); \  else if (sizeof(T) == 4) byte_swap4(d,e,n); \  else if (sizeof(T) == 8) byte_swap8(d,e,n); \  else if (sizeof(T) == 16) byte_swap16(d,e,n); \}#define BSVT(T) \static inline void byte_swap(void*d,const T*e,int n) \{ \  if (sizeof(T) == 2) byte_swap2(d,e,n); \  else if (sizeof(T) == 4) byte_swap4(d,e,n); \  else if (sizeof(T) == 8) byte_swap8(d,e,n); \  else if (sizeof(T) == 16) byte_swap16(d,e,n); \}BSVT(short);BSVT(unsigned int);BSVT(int);BSVT(long);BSVT(float);BSVT(double);BSTV(short);BSTV(unsigned int);BSTV(int);BSTV(long);BSTV(float);BSTV(double);BST(short);BST(unsigned int);BST(int);BST(long);BST(float);BST(double);////////////////////////////////////////////////////////////////////////TranslateData::TranslateData() {}TranslateData::~TranslateData() {}charTranslateData::format_code(){#if BIGENDIAN  return 'b';#else  return 'l';#endif}TranslateData *TranslateData::vctor(char code){  if (code == 'b') return new TranslateDataBigEndian;  if (code == 'l') return new TranslateDataLittleEndian;  return 0;}void TranslateData::to_native  (char *,   int n) {}void TranslateData::to_external(char *,   int n) {}void TranslateData::to_native  (short *,  int n) {}void TranslateData::to_external(short *,  int n) {}void TranslateData::to_native  (unsigned int *, int n) {}void TranslateData::to_external(unsigned int *, int n) {}void TranslateData::to_native  (int *,    int n) {}void TranslateData::to_external(int *,    int n) {}void TranslateData::to_native  (long *,   int n) {}void TranslateData::to_external(long *,   int n) {}void TranslateData::to_native  (float *,  int n) {}void TranslateData::to_external(float *,  int n) {}void TranslateData::to_native  (double *, int n) {}void TranslateData::to_external(double *, int n) {}void TranslateData::to_native  (char *d,   const void *s,   int n){ memcpy(d,s,n); }void TranslateData::to_external(void *d,   const char *s,   int n){ memcpy(d,s,n); }void TranslateData::to_native  (short *d,  const void *s,   int n){ memcpy(d,s,n*sizeof(short)); }void TranslateData::to_external(void *d,   const short *s,  int n){ memcpy(d,s,n*sizeof(short)); }void TranslateData::to_native  (unsigned int *d, const void *s, int n){ memcpy(d,s,n*sizeof(unsigned int)); }void TranslateData::to_external(void *d, const unsigned int *s, int n){ memcpy(d,s,n*sizeof(unsigned int)); }void TranslateData::to_native  (int *d,    const void *s,   int n){ memcpy(d,s,n*sizeof(int)); }void TranslateData::to_external(void *d,   const int *s,    int n){ memcpy(d,s,n*sizeof(int)); }void TranslateData::to_native  (long *d,   const void *s,   int n){ memcpy(d,s,n*sizeof(long)); }void TranslateData::to_external(void *d,   const long *s,   int n){ memcpy(d,s,n*sizeof(long)); }void TranslateData::to_native  (float *d,  const void *s,   int n){ memcpy(d,s,n*sizeof(float)); }void TranslateData::to_external(void *d,   const float *s,  int n){ memcpy(d,s,n*sizeof(float)); }void TranslateData::to_native  (double *d, const void *s,   int n){ memcpy(d,s,n*sizeof(double)); }void TranslateData::to_external(void *d,   const double *s, int n){ memcpy(d,s,n*sizeof(double)); }////////////////////////////////////////////////////////////////////////TranslateDataByteSwap::TranslateDataByteSwap() {}TranslateDataByteSwap::~TranslateDataByteSwap() {}charTranslateDataByteSwap::format_code(){#if BIGENDIAN  return 'l';#else  return 'b';#endif}void TranslateDataByteSwap::to_native  (char *d,   int n) {}void TranslateDataByteSwap::to_external(char *d,   int n) {}void TranslateDataByteSwap::to_native  (short *d,  int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_external(short *d,  int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_native  (unsigned int *d,    int n){ byte_swap(d,n); }void TranslateDataByteSwap::to_external(unsigned int *d,    int n){ byte_swap(d,n); }void TranslateDataByteSwap::to_native  (int *d,    int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_external(int *d,    int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_native  (long *d,   int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_external(long *d,   int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_native  (float *d,  int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_external(float *d,  int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_native  (double *d, int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_external(double *d, int n) { byte_swap(d,n); }void TranslateDataByteSwap::to_native  (char *d,   const void *s,   int n){ memcpy(d,s,n); }void TranslateDataByteSwap::to_external(void *d,   const char *s,   int n){ memcpy(d,s,n); }void TranslateDataByteSwap::to_native  (short *d,  const void *s,   int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_external(void *d,   const short *s,  int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_native  (unsigned int *d, const void *s, int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_external(void *d, const unsigned int *s, int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_native  (int *d,    const void *s,   int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_external(void *d,   const int *s,    int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_native  (long *d,   const void *s,   int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_external(void *d,   const long *s,   int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_native  (float *d,  const void *s,   int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_external(void *d,   const float *s,  int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_native  (double *d, const void *s,   int n){ byte_swap(d,s,n); }void TranslateDataByteSwap::to_external(void *d,   const double *s, int n){ byte_swap(d,s,n); }////////////////////////////////////////////////////////////////////////TranslateDataOut::TranslateDataOut(StateOut*so, TranslateData*t):  so_(so),  translate_(t){}TranslateDataOut::~TranslateDataOut(){  delete translate_;}inline intTranslateDataOut::putv(const void*d,int s){  return so_->put_array_void(d,s);}intTranslateDataOut::put(const char*d,int s){  const int bsize = bufsize;  int o=0,r=0;  while (s) {      int l = (s>bsize?bsize:s);      translate_->to_external(buf_,&d[o],l);      r += putv(buf_,l);      s-=l;      o+=l;    }  return r;}intTranslateDataOut::put(const short*d,int s){  const int bsize = bufsize/sizeof(*d);  int o=0,r=0;  while (s) {      int l = (s>bsize?bsize:s);      translate_->to_external(buf_,&d[o],l);      r += putv(buf_,l*sizeof(*d));      s-=l;      o+=l;    }  return r;}intTranslateDataOut::put(const unsigned int*d,int s){  const int bsize = bufsize/sizeof(*d);  int o=0,r=0;  while (s) {      int l = (s>bsize?bsize:s);      translate_->to_external(buf_,&d[o],l);      r += putv(buf_,l*sizeof(*d));      s-=l;      o+=l;    }  return r;}intTranslateDataOut::put(const int*d,int s){  const int bsize = bufsize/sizeof(*d);  int o=0,r=0;  while (s) {      int l = (s>bsize?bsize:s);      translate_->to_external(buf_,&d[o],l);      r += putv(buf_,l*sizeof(*d));      s-=l;      o+=l;    }  return r;}intTranslateDataOut::put(const long*d,int s){  const int bsize = bufsize/sizeof(*d);  int o=0,r=0;  while (s) {      int l = (s>bsize?bsize:s);      translate_->to_external(buf_,&d[o],l);      r += putv(buf_,l*sizeof(*d));      s-=l;      o+=l;    }  return r;}intTranslateDataOut::put(const float*d,int s){  const int bsize = bufsize/sizeof(*d);  int o=0,r=0;  while (s) {      int l = (s>bsize?bsize:s);      translate_->to_external(buf_,&d[o],l);      r += putv(buf_,l*sizeof(*d));      s-=l;      o+=l;    }  return r;}intTranslateDataOut::put(const double*d,int s){  const int bsize = bufsize/sizeof(*d);  int o=0,r=0;  while (s) {      int l = (s>bsize?bsize:s);      translate_->to_external(buf_,&d[o],l);      r += putv(buf_,l*sizeof(*d));      s-=l;      o+=l;    }  return r;}////////////////////////////////////////////////////////////////////////TranslateDataIn::TranslateDataIn(StateIn*si,TranslateData *t):  si_(si),  translate_(t){}TranslateDataIn::~TranslateDataIn(){  delete translate_;}inline intTranslateDataIn::getv(void*d,int s){  return si_->get_array_void(d,s);}intTranslateDataIn::get(char*d,int s){  int r = getv(d,s);  translate_->to_native(d,s);  return r;}intTranslateDataIn::get(short*d,int s){  int r = getv(d,s*sizeof(short));  translate_->to_native(d,s);  return r;}intTranslateDataIn::get(unsigned int*d,int s){  int r = getv(d,s*sizeof(unsigned int));  translate_->to_native(d,s);  return r;}intTranslateDataIn::get(int*d,int s){  int r = getv(d,s*sizeof(int));  translate_->to_native(d,s);  return r;}intTranslateDataIn::get(long*d,int s){  int r = getv(d,s*sizeof(long));  translate_->to_native(d,s);  return r;}intTranslateDataIn::get(float*d,int s){  int r = getv(d,s*sizeof(float));  translate_->to_native(d,s);  return r;}intTranslateDataIn::get(double*d,int s){  int r = getv(d,s*sizeof(double));  translate_->to_native(d,s);  return r;}////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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