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

📄 ipv2_data.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
字号:
//// ipv2_data.cc//// Copyright (C) 1996 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 <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include <util/keyval/ipv2.h>using namespace std;using namespace sc;IPV2::StatusIPV2::boolean(const char *keyword,int *boolean,int n,...){  va_list args;  int i;  int *v;  Status r;  if (n==0) {    return boolean_v(keyword,boolean,n,NULL);    }  else {    v = (int *) malloc(sizeof(int)*n);    if (!v) return Malloc;    va_start(args, n);    for (i=0; i<n; i++) {      v[i] = va_arg(args,int);      }    va_end(args);    r = boolean_v(keyword,boolean,n,v);    free(v);    return r;    }  }IPV2::StatusIPV2::boolean_v(const char* keyword,int* boolean,int n,int* v){  const char *val;  Status errcod;  char copy[10],*s;  if ((errcod = value_v(keyword,&val,n,v)) !=0) return errcod;  strncpy(copy,val,10);  copy[9] = '\0';  /* Convert the string to uppercase. */  for (s=copy; *s!='\0'; s++) {    if (*s>='a' && *s <='z') *s = *s + 'A' - 'a';    }    if (!strcmp(copy,"YES")) *boolean = 1;  else if (!strcmp(copy,"NO")) *boolean = 0;  else if (!strcmp(copy,"1")) *boolean = 1;  else if (!strcmp(copy,"0")) *boolean = 0;  else if (!strcmp(copy,"TRUE")) *boolean = 1;  else if (!strcmp(copy,"FALSE")) *boolean = 0;  else if (!strcmp(copy,"ON")) *boolean = 1;  else if (!strcmp(copy,"OFF")) *boolean = 0;  else return Type;  return OK;  }/* n should always be zero in this version of libip. */intIPV2::exist(const char *keyword,int n,...){  va_list args;  int i;  int *v;  int r;  if (n==0) {    return exist_v(keyword,n,NULL);    }  else {    v = (int *) malloc(sizeof(int)*n);    if (!v) {      warn("IPV2::exist: problem malloc");      return 0;      }    va_start(args, n);    for (i=0; i<n; i++) {      v[i] = va_arg(args,int);      }    va_end(args);    r = exist_v(keyword,n,v);    free(v);    return r;    }  }/* n should always be zero in this version of libip. */intIPV2::exist_v(const char* keyword,int n,int* v){  if (n!=0) {    *ip_out << "IPV2::exist_v: n must be zero n = " << n << endl;    abort();    }  if (ip_cwk_descend_tree(keyword)) return 1;  return 0;  }IPV2::StatusIPV2::data(const char *keyword,const char *conv,void *value,int n,...){  va_list args;  int i;  int *v;  Status r;  if (n==0) {    return data_v(keyword,conv,value,n,NULL);    }  else {    v = (int *) malloc(sizeof(int)*n);    if (!v) return Malloc;    va_start(args, n);    for (i=0; i<n; i++) {      v[i] = va_arg(args,int);      }    va_end(args);    r = data_v(keyword,conv,value,n,v);    free(v);    return r;    }  }IPV2::StatusIPV2::data_v(const char* keyword,const char* conv,void* value,int n,int*v){  const char *val;  Status errcod;  if ((errcod = value_v(keyword,&val,n,v))!=0) return errcod;  if (sscanf(val,conv,value) != 1) return Type;  return OK;  }IPV2::StatusIPV2::classname(const char *keyword,const char **name,int n,...){  va_list args;  int i;  int *v;  Status r;  if (n==0) {    return classname_v(keyword,name,n,NULL);    }  else {    v = (int *) malloc(sizeof(int)*n);    if (!v) return Malloc;    va_start(args, n);    for (i=0; i<n; i++) {      v[i] = va_arg(args,int);      }    va_end(args);    r = classname_v(keyword,name,n,v);    free(v);    return r;    }  }IPV2::StatusIPV2::classname_v(const char* keyword,const char** name,int n,int *v){  ip_keyword_tree_t *kt;  static char newkey[KEYWORD_LENGTH];  Status errcod;  if ((errcod = construct_key_v(keyword,newkey,n,v))!=OK) return errcod;  kt = ip_cwk_descend_tree(newkey);  if (!kt) {    ip_lastkeyword(keyword);    *name = 0;    return KeyNotFound;    }  ip_lastkeywordtree(kt);  *name = kt->classname;  return OK;  }IPV2::StatusIPV2::truekeyword(const char *keyword,const char **name,int n,...){  va_list args;  int i;  int *v;  Status r;  if (n==0) {    return truekeyword_v(keyword,name,n,NULL);    }  else {    v = (int *) malloc(sizeof(int)*n);    if (!v) return Malloc;    va_start(args, n);    for (i=0; i<n; i++) {      v[i] = va_arg(args,int);      }    va_end(args);    r = truekeyword_v(keyword,name,n,v);    free(v);    return r;    }  }static char*get_name(ip_keyword_tree_t*kt,char*currentname){  if (!kt) return currentname;  char*newname;  if (currentname) {      newname = (char*)malloc(strlen(currentname)+strlen(kt->keyword)+2);      sprintf(newname,"%s:%s",kt->keyword,currentname);      free(currentname);    }  else newname = strcpy((char*)malloc(strlen(kt->keyword)+1),kt->keyword);  return get_name(kt->up,newname);}char*IPV2::get_truename(ip_keyword_tree_t*kt){  return get_name(kt,0);}IPV2::StatusIPV2::truekeyword_v(const char* keyword,const char** name,int n,int *v){  ip_keyword_tree_t *kt;  static char newkey[KEYWORD_LENGTH];  Status errcod;  if ((errcod = construct_key_v(keyword,newkey,n,v))!=OK) return errcod;  kt = ip_cwk_descend_tree(newkey);  if (!kt) {    ip_lastkeyword(keyword);    *name = 0;    return KeyNotFound;    }  ip_lastkeywordtree(kt);  if (!kt->truename) {      kt->truename = get_truename(kt);    }  *name = kt->truename;  return OK;  }IPV2::StatusIPV2::string(const char *keyword,char **value,int n,...){  va_list args;  int i;  int *v;  Status r;  if (n==0) {    return string_v(keyword,value,n,NULL);    }  else {    v = (int *) malloc(sizeof(int)*n);    if (!v) return Malloc;    va_start(args, n);    for (i=0; i<n; i++) {      v[i] = va_arg(args,int);      }    va_end(args);    r = string_v(keyword,value,n,v);    free(v);    return r;    }  }// if an error is encountered, *value is not modifiedIPV2::StatusIPV2::string_v(const char* keyword,char** value,int n,int *v){  const char *val;  Status errcod;  if ((errcod = value_v(keyword,&val,n,v))!=0) return errcod;  char *tmp = new char[strlen(val)+1];  if (! tmp) return Malloc;  strcpy(tmp,val);  *value = tmp;  return OK;  }IPV2::StatusIPV2::value(const char *keyword,const char **value,int n,...){  va_list args;  int i;  int *v;  Status r;  if (n==0) {    return value_v(keyword,value,n,NULL);    }  else {    v = (int *) malloc(sizeof(int)*n);    if (!v) return Malloc;    va_start(args, n);    for (i=0; i<n; i++) {      v[i] = va_arg(args,int);      }    va_end(args);    r = value_v(keyword,value,n,v);    free(v);    return r;    }  }IPV2::StatusIPV2::value_v(const char* keyword,const char**value,int n,int*v){  Status errcod;  ip_keyword_tree_t *kt;  static char newkey[KEYWORD_LENGTH];  if ((errcod = construct_key_v(keyword,newkey,n,v))!=OK) return errcod;  /* Get the kt corresponding to the keyword using the cwk. */  kt = ip_cwk_descend_tree(newkey);  if (!kt) {    ip_lastkeyword(keyword);    return KeyNotFound;    }  ip_lastkeywordtree(kt);  *value = kt->value;  if (*value == NULL) return HasNoValue;  return OK;  }IPV2::StatusIPV2::construct_key_v(const char* keyword,char *newkey,int n,int*v){  int i;  char index[11];  int count;  Status errcod;  /* Construct the new keyword. */  strcpy(newkey,keyword);  for (i=0; i<n; i++) {    if ((errcod = count_v(newkey,&count,0,NULL)) != OK) return errcod;    if (v[i]<0 || v[i]>=count) return OutOfBounds;    sprintf(index,":%d",v[i]);    strcat(newkey,index);    }  return OK;  }

⌨️ 快捷键说明

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