source: ThirdParty/mpqc_open/src/lib/util/keyval/keyvalpre.cc@ 00f983

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_levmar Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since 00f983 was 860145, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '0b990dfaa8c6007a996d030163a25f7f5fc8a7e7' as 'ThirdParty/mpqc_open'

  • Property mode set to 100644
File size: 5.0 KB
Line 
1//
2// keyvalpre.cc
3//
4// Copyright (C) 1996 Limit Point Systems, Inc.
5//
6// Author: Curtis Janssen <cljanss@limitpt.com>
7// Maintainer: LPS
8//
9// This file is part of the SC Toolkit.
10//
11// The SC Toolkit is free software; you can redistribute it and/or modify
12// it under the terms of the GNU Library General Public License as published by
13// the Free Software Foundation; either version 2, or (at your option)
14// any later version.
15//
16// The SC Toolkit is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU Library General Public License for more details.
20//
21// You should have received a copy of the GNU Library General Public License
22// along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24//
25// The U.S. Government is granted a limited license as per AL 91-7.
26//
27
28extern "C" {
29#include <ctype.h>
30#include <stdlib.h>
31#include <stdio.h>
32}
33#include <util/misc/formio.h>
34#include <util/keyval/keyval.h>
35
36using namespace std;
37using namespace sc;
38
39//////////////////////////////////////////////////////////////////////
40// utility functions
41
42static void getnewkey(char*newkey,const char*key,int n1)
43 {
44 sprintf(newkey,"%s:%d",key,n1);
45 }
46
47static void getnewkey(char*newkey,const char*key,int n1,int n2)
48 {
49 sprintf(newkey,"%s:%d:%d",key,n1,n2);
50 }
51
52static void getnewkey(char*newkey,const char*key,int n1,int n2,int n3)
53 {
54 sprintf(newkey,"%s:%d:%d:%d",key,n1,n2,n3);
55 }
56
57static void getnewkey(char*newkey,const char*key,int n1,int n2,int n3,int n4)
58 {
59 sprintf(newkey,"%s:%d:%d:%d:%d",key,n1,n2,n3,n4);
60 }
61
62///////////////////////////////////////////////////////////////////////
63// PrefixKeyVal
64
65PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,const char *prefix_a,
66 int n1,int n2,int n3,int n4):
67keyval(kv)
68{
69 setup(prefix_a,4,n1,n2,n3,n4);
70}
71
72PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,const char *prefix_a,
73 int n1,int n2,int n3):
74keyval(kv)
75{
76 setup(prefix_a,3,n1,n2,n3,0);
77}
78
79PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,const char *prefix_a,
80 int n1,int n2):
81keyval(kv)
82{
83 setup(prefix_a,2,n1,n2,0,0);
84}
85
86PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,const char *prefix_a,int n1):
87keyval(kv)
88{
89 setup(prefix_a,1,n1,0,0,0);
90}
91
92PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,const char *prefix_a):
93keyval(kv)
94{
95 setup(prefix_a,0,0,0,0,0);
96}
97
98PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,int n1):
99keyval(kv)
100{
101 setup(0,1,n1,0,0,0);
102}
103
104PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,int n1,int n2):
105keyval(kv)
106{
107 setup(0,2,n1,n2,0,0);
108}
109
110PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,int n1,int n2,int n3):
111keyval(kv)
112{
113 setup(0,3,n1,n2,n3,0);
114}
115
116PrefixKeyVal::PrefixKeyVal(const Ref<KeyVal>&kv,int n1,int n2,int n3,int n4):
117keyval(kv)
118{
119 setup(0,4,n1,n2,n3,n4);
120}
121
122void PrefixKeyVal::setup(const char*pref,int n_dim,int n1,int n2,int n3,int n4)
123{
124 if (!pref) {
125 prefix = 0;
126 }
127 else {
128 char newtoken[MaxKeywordLength];
129 if (n_dim == 0) strcpy(newtoken,pref);
130 else if (n_dim == 1) getnewkey(newtoken,pref,n1);
131 else if (n_dim == 2) getnewkey(newtoken,pref,n1,n2);
132 else if (n_dim == 3) getnewkey(newtoken,pref,n1,n2,n3);
133 else if (n_dim == 4) getnewkey(newtoken,pref,n1,n2,n3,n4);
134 prefix = new char[strlen(newtoken)+1];
135 strcpy(prefix,newtoken);
136 }
137 return;
138}
139
140PrefixKeyVal::~PrefixKeyVal()
141{
142 if (prefix) {
143 delete[] prefix;
144 prefix=0;
145 }
146}
147
148void PrefixKeyVal::errortrace(ostream&fp)
149{
150 fp << indent << "PrefixKeyVal: error: \"" << errormsg() << "\"" << endl;
151 fp << indent << " prefix:" << endl;
152 fp << indent << " \"" << prefix << "\"" << endl;
153 fp << indent << " keyval:" << endl;
154 fp << incindent;
155 keyval->errortrace(fp);
156 fp << decindent;
157}
158
159void PrefixKeyVal::dump(ostream&fp)
160{
161 fp << indent << "PrefixKeyVal: error: \"" << errormsg() << "\"" << endl;
162 fp << indent << " prefixes:" << endl;
163 fp << indent << " \"" << prefix << "\"" << endl;
164 fp << indent << " keyval:" << endl;
165 fp << incindent;
166 keyval->dump(fp);
167 fp << decindent;
168}
169
170int PrefixKeyVal::getnewprefixkey(const char*key,char*newkey)
171{
172 int result=0;
173
174 if (key[0] == ':') {
175 strcpy(newkey,key);
176 result = keyval->exists(key);
177 seterror(keyval->error());
178 }
179 else {
180 sprintf(newkey,"%s:%s",prefix,key);
181 result = keyval->exists(newkey);
182 seterror(keyval->error());
183 }
184 return result;
185}
186
187Ref<KeyValValue>
188PrefixKeyVal::key_value(const char * arg, const KeyValValue &def)
189{
190 char newkey[MaxKeywordLength];
191 getnewprefixkey(arg,newkey);
192 Ref<KeyValValue> result(keyval->key_value(newkey,def));
193 seterror(keyval->error());
194 return result;
195}
196
197int PrefixKeyVal::key_exists(const char* key)
198{
199 char newkey[MaxKeywordLength];
200 return getnewprefixkey(key,newkey);
201}
202
203/////////////////////////////////////////////////////////////////////////////
204
205// Local Variables:
206// mode: c++
207// c-file-style: "CLJ"
208// End:
Note: See TracBrowser for help on using the repository browser.