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

📄 keyval.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
📖 第 1 页 / 共 2 页
字号:
//// keyval.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.//#ifdef __GNUG__#pragma implementation#endifextern "C" {#include <ctype.h>#include <stdio.h>#include <stdlib.h>}#include <iostream>#include <util/misc/formio.h>#include <util/keyval/keyval.h>using namespace std;using namespace sc;////////////////////////////////////////////////////////////////////////// KeyValKeyVal::KeyVal() :  errcod(OK),  verbose_(0){}KeyVal::~KeyVal(){}const char* KeyVal::errormsg(KeyValError err)  {  const char* msg1 = "No problem.";  const char* msg2 = "The keyword was not found.";  const char* msg3 = "The requested operation failed.";  const char* msg4 = "The datum is not of the appropiate type.";  const char* msg5 = "The keyword has no value.";  const char* invalid = "The KeyValError is invalid.";  if      (err == OK             ) return msg1;  else if (err == UnknownKeyword ) return msg2;  else if (err == OperationFailed) return msg3;  else if (err == WrongType      ) return msg4;  else if (err == HasNoValue     ) return msg5;  else return invalid;  }int KeyVal::key_count(const char* key)  {  int i=0;  while(exists(key,i)) i++;  if (i!=0) seterror(OK);  return i;  }doubleKeyVal::key_doublevalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  double result;  if (val.nonnull()) {      seterror(val->doublevalue(result));    }  else {      KeyValValue::KeyValValueError err = def.doublevalue(result);      if (error() == OK) seterror(err);    }  return result;}intKeyVal::key_booleanvalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  int result;  if (val.nonnull()) {      seterror(val->booleanvalue(result));    }  else {      KeyValValue::KeyValValueError err = def.booleanvalue(result);      if (error() == OK) seterror(err);    }  return result;}intKeyVal::key_intvalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  int result;  if (val.nonnull()) {      seterror(val->intvalue(result));    }  else {      KeyValValue::KeyValValueError err = def.intvalue(result);      if (error() == OK) seterror(err);    }  return result;}size_tKeyVal::key_sizevalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  size_t result;  if (val.nonnull()) {      seterror(val->sizevalue(result));    }  else {      KeyValValue::KeyValValueError err = def.sizevalue(result);      if (error() == OK) seterror(err);    }  return result;}floatKeyVal::key_floatvalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  float result;  if (val.nonnull()) {      seterror(val->floatvalue(result));    }  else {      KeyValValue::KeyValValueError err = def.floatvalue(result);      if (error() == OK) seterror(err);    }  return result;}charKeyVal::key_charvalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  char result;  if (val.nonnull()) {      seterror(val->charvalue(result));    }  else {      KeyValValue::KeyValValueError err = def.charvalue(result);      if (error() == OK) seterror(err);    }  return result;}char*KeyVal::key_pcharvalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  const char* result;  if (val.nonnull()) {      seterror(val->pcharvalue(result));    }  else {      KeyValValue::KeyValValueError err = def.pcharvalue(result);      if (error() == OK) seterror(err);    }  if (result) return strcpy(new char[strlen(result)+1], result);  else return 0;}std::stringKeyVal::key_stringvalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  std::string result;  if (val.nonnull()) {      seterror(val->stringvalue(result));    }  else {      KeyValValue::KeyValValueError err = def.stringvalue(result);      if (error() == OK) seterror(err);    }  return result;}Ref<DescribedClass>KeyVal::key_describedclassvalue(const char* key, const KeyValValue& def){  Ref<KeyValValue> val(key_value(key,def));  Ref<DescribedClass> result;  if (val.nonnull()) {      seterror(val->describedclassvalue(result));      val = 0; // fix for gcc 2.7.0 bug    }  else {      KeyValValue::KeyValValueError err = def.describedclassvalue(result);      if (error() == OK) seterror(err);    }  return result;}intKeyVal::exists(const char*key){  return key_exists(key);}intKeyVal::count(const char*key){  return key_count(key);}Ref<KeyValValue>KeyVal::value(const char*key,const KeyValValue &def){  return key_value(key,def);}intKeyVal::booleanvalue(const char*key,const KeyValValue& def){  return key_booleanvalue(key,def);}doubleKeyVal::doublevalue(const char*key,const KeyValValue& def){  return key_doublevalue(key,def);}floatKeyVal::floatvalue(const char*key,const KeyValValue& def){  return key_floatvalue(key,def);}charKeyVal::charvalue(const char*key,const KeyValValue& def){  return key_charvalue(key,def);}intKeyVal::intvalue(const char*key,const KeyValValue& def){  return key_intvalue(key,def);}size_tKeyVal::sizevalue(const char*key,const KeyValValue& def){  return key_sizevalue(key,def);}char*KeyVal::pcharvalue(const char*key,const KeyValValue& def){  return key_pcharvalue(key,def);}std::stringKeyVal::stringvalue(const char*key,const KeyValValue& def){  return key_stringvalue(key,def);}Ref<DescribedClass>KeyVal::describedclassvalue(const char*key,const KeyValValue& def){  return key_describedclassvalue(key,def);}static void getnewkey(char*newkey,const char*key,int n1)  {  if (key) sprintf(newkey,"%s:%d",key,n1);  else sprintf(newkey,"%d",n1);  }static void getnewkey(char*newkey,const char*key,int n1,int n2)  {  if (key) sprintf(newkey,"%s:%d:%d",key,n1,n2);  else  sprintf(newkey,"%d:%d",n1,n2);  }//static void getnewkey(char*newkey,const char*key,int n1,int n2,int n3)//  {//  if (key) sprintf(newkey,"%s:%d:%d:%d",key,n1,n2,n3);//  else sprintf(newkey,"%d:%d:%d",n1,n2,n3);//  }//static void getnewkey(char*newkey,const char*key,int n1,int n2,int n3,int n4)//  {//  if (key) sprintf(newkey,"%s:%d:%d:%d:%d",key,n1,n2,n3,n4);//  else  sprintf(newkey,"%d:%d:%d:%d",n1,n2,n3,n4);//  }// For vectors:int KeyVal::exists(const char* key,int n1)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_exists(newkey);  }int KeyVal::count(const char* key,int n1)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_count(newkey);  }double KeyVal::doublevalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_doublevalue(newkey,def);  }float KeyVal::floatvalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_floatvalue(newkey,def);  }char KeyVal::charvalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_charvalue(newkey,def);  }int KeyVal::intvalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_intvalue(newkey,def);  }size_t KeyVal::sizevalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_sizevalue(newkey,def);  }int KeyVal::booleanvalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_booleanvalue(newkey,def);  }char* KeyVal::pcharvalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_pcharvalue(newkey,def);  }std::string KeyVal::stringvalue(const char* key,int n1,const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);  return key_stringvalue(newkey,def);  }Ref<DescribedClass> KeyVal::describedclassvalue(const char* key,int n1,                                              const KeyValValue& def)  {  char newkey[MaxKeywordLength];  getnewkey(newkey,key,n1);

⌨️ 快捷键说明

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