<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta name="robots" content="noindex"> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>keyval.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body bgcolor="#ffffff"> <!-- Generated by Doxygen 1.2.5 on Mon Oct 14 14:16:37 2002 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>keyval.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font> 00002 <font class="comment">// keyval.h</font> 00003 <font class="comment">//</font> 00004 <font class="comment">// Copyright (C) 1996 Limit Point Systems, Inc.</font> 00005 <font class="comment">//</font> 00006 <font class="comment">// Author: Curtis Janssen <cljanss@limitpt.com></font> 00007 <font class="comment">// Maintainer: LPS</font> 00008 <font class="comment">//</font> 00009 <font class="comment">// This file is part of the SC Toolkit.</font> 00010 <font class="comment">//</font> 00011 <font class="comment">// The SC Toolkit is free software; you can redistribute it and/or modify</font> 00012 <font class="comment">// it under the terms of the GNU Library General Public License as published by</font> 00013 <font class="comment">// the Free Software Foundation; either version 2, or (at your option)</font> 00014 <font class="comment">// any later version.</font> 00015 <font class="comment">//</font> 00016 <font class="comment">// The SC Toolkit is distributed in the hope that it will be useful,</font> 00017 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00018 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</font> 00019 <font class="comment">// GNU Library General Public License for more details.</font> 00020 <font class="comment">//</font> 00021 <font class="comment">// You should have received a copy of the GNU Library General Public License</font> 00022 <font class="comment">// along with the SC Toolkit; see the file COPYING.LIB. If not, write to</font> 00023 <font class="comment">// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.</font> 00024 <font class="comment">//</font> 00025 <font class="comment">// The U.S. Government is granted a limited license as per AL 91-7.</font> 00026 <font class="comment">//</font> 00027 00028 <font class="preprocessor">#ifndef _util_keyval_keyval_h</font> 00029 <font class="preprocessor"></font><font class="preprocessor">#define _util_keyval_keyval_h</font> 00030 <font class="preprocessor"></font><font class="preprocessor">#ifdef __GNUG__</font> 00031 <font class="preprocessor"></font><font class="preprocessor">#pragma interface</font> 00032 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00033 <font class="preprocessor"></font> 00034 <font class="preprocessor">#include <iostream></font> 00035 <font class="preprocessor">#include <string.h></font> 00036 <font class="preprocessor">#include <stdlib.h></font> 00037 <font class="preprocessor">#include <stdarg.h></font> 00038 00039 <font class="preprocessor">#include <util/container/avlmap.h></font> 00040 <font class="preprocessor">#include <util/class/class.h></font> 00041 <font class="preprocessor">#include <util/keyval/keyvalval.h></font> 00042 00043 <font class="keyword">namespace </font>sc { 00044 00045 <font class="keyword">class </font>KeyValKeyword { 00046 <font class="keyword">private</font>: 00047 <font class="keywordtype">char</font>* keyword_; 00048 <font class="keyword">public</font>: 00049 KeyValKeyword(); 00050 KeyValKeyword(<font class="keyword">const</font> <font class="keywordtype">char</font>* name); 00051 KeyValKeyword(<font class="keyword">const</font> KeyValKeyword&); 00052 ~KeyValKeyword(); 00053 KeyValKeyword& operator=(<font class="keyword">const</font> KeyValKeyword&); 00054 <font class="keywordtype">int</font> operator==(<font class="keyword">const</font> KeyValKeyword& ck) <font class="keyword">const</font>; 00055 <font class="keywordtype">int</font> operator<(<font class="keyword">const</font> KeyValKeyword& ck) <font class="keyword">const</font>; 00056 <font class="keywordtype">int</font> hash() <font class="keyword">const</font>; 00057 <font class="keyword">inline</font> <font class="keywordtype">int</font> cmp(<font class="keyword">const</font> KeyValKeyword&ck)<font class="keyword"> const</font> 00058 <font class="keyword"> </font>{ 00059 <font class="keywordflow">if</font> (!keyword_) { 00060 <font class="keywordflow">if</font> (!ck.keyword_) <font class="keywordflow">return</font> 0; 00061 <font class="keywordflow">return</font> -1; 00062 } 00063 <font class="keywordflow">if</font> (!ck.keyword_) <font class="keywordflow">return</font> 1; 00064 <font class="keywordflow">return</font> strcmp(keyword_,ck.keyword_); 00065 } 00066 <font class="keyword">inline</font> <font class="keyword">const</font> <font class="keywordtype">char</font>* name()<font class="keyword"> const </font>{<font class="keywordflow">return</font> keyword_;} 00067 }; 00068 <a name="l00091"></a><a class="code" href="class_sc__KeyVal.html">00091</a> <font class="keyword">class </font>KeyVal: <font class="keyword">public</font> RefCount { 00092 <font class="comment">// these classes need to directly access the key_value member</font> 00093 <font class="keyword">friend</font> <font class="keyword">class </font>AggregateKeyVal; 00094 <font class="keyword">friend</font> <font class="keyword">class </font>PrefixKeyVal; 00095 <font class="keyword">public</font>: 00096 <font class="keyword">enum</font> {MaxKeywordLength = 256}; 00097 <font class="keyword">enum</font> KeyValError { OK, HasNoValue, WrongType, 00098 UnknownKeyword, OperationFailed }; 00099 <font class="keyword">private</font>: 00100 KeyValError errcod; 00101 <font class="comment">// do not allow a copy constructor or assignment</font> 00102 KeyVal(<font class="keyword">const</font> KeyVal&); 00103 <font class="keywordtype">void</font> operator=(<font class="keyword">const</font> KeyVal&); 00104 <font class="keyword">protected</font>: 00105 <font class="keywordtype">int</font> verbose_; 00106 00107 KeyVal(); 00108 00110 <font class="keywordtype">void</font> <a class="code" href="class_sc__KeyVal.html#b1">seterror</a>(KeyValError err); 00112 <font class="keywordtype">void</font> <a class="code" href="class_sc__KeyVal.html#b1">seterror</a>(KeyValValue::KeyValValueError err); 00113 00115 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#b3">key_exists</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*) = 0; 00117 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#b4">key_count</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* =0); 00119 <font class="keyword">virtual</font> Ref<KeyValValue> <a class="code" href="class_sc__KeyVal.html#b5">key_value</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*, 00120 <font class="keyword">const</font> KeyValValue& def) = 0; 00122 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#b6">key_booleanvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> KeyValValue& def); 00124 <font class="keyword">virtual</font> <font class="keywordtype">double</font> <a class="code" href="class_sc__KeyVal.html#b7">key_doublevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keyword">const</font> KeyValValue& def); 00126 <font class="keyword">virtual</font> <font class="keywordtype">float</font> <a class="code" href="class_sc__KeyVal.html#b8">key_floatvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keyword">const</font> KeyValValue& def); 00128 <font class="keyword">virtual</font> <font class="keywordtype">char</font> <a class="code" href="class_sc__KeyVal.html#b9">key_charvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keyword">const</font> KeyValValue& def); 00130 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#b10">key_intvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keyword">const</font> KeyValValue& def); 00132 <font class="keyword">virtual</font> size_t <a class="code" href="class_sc__KeyVal.html#b11">key_sizevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keyword">const</font> KeyValValue& def); 00134 <font class="keyword">virtual</font> <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#b12">key_pcharvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keyword">const</font> KeyValValue& def); 00136 <font class="keyword">virtual</font> Ref<DescribedClass> <a class="code" href="class_sc__KeyVal.html#b13">key_describedclassvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key, 00137 <font class="keyword">const</font> KeyValValue& def); 00138 00139 <font class="keyword">public</font>: 00140 <font class="keyword">virtual</font> ~KeyVal(); 00141 00142 <font class="comment">// For nonindexed things. If a subclass defines one of these,</font> 00143 <font class="comment">// then the overloaded functions will be hidden. The key_... functions</font> 00144 <font class="comment">// should be overridden instead.</font> 00145 00148 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a1">exists</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00153 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a2">count</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* =0); 00155 Ref<KeyValValue> <a class="code" href="class_sc__KeyVal.html#a3">value</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* = 0, 00156 <font class="keyword">const</font> KeyValValue& def=KeyValValue()); 00158 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a4">booleanvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00159 <font class="keyword">const</font> KeyValValue& def=KeyValValueboolean()); 00161 <font class="keywordtype">double</font> <a class="code" href="class_sc__KeyVal.html#a5">doublevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00162 <font class="keyword">const</font> KeyValValue& def=KeyValValuedouble()); 00164 <font class="keywordtype">float</font> <a class="code" href="class_sc__KeyVal.html#a6">floatvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00165 <font class="keyword">const</font> KeyValValue& def=KeyValValuefloat()); 00167 <font class="keywordtype">char</font> <a class="code" href="class_sc__KeyVal.html#a7">charvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00168 <font class="keyword">const</font> KeyValValue& def=KeyValValuechar()); 00170 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a8">intvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00171 <font class="keyword">const</font> KeyValValue& def=KeyValValueint()); 00173 size_t <a class="code" href="class_sc__KeyVal.html#a9">sizevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00174 <font class="keyword">const</font> KeyValValue& def=KeyValValuesize()); 00177 <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#a10">pcharvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00178 <font class="keyword">const</font> KeyValValue& def=KeyValValuepchar()); 00180 Ref<DescribedClass> <a class="code" href="class_sc__KeyVal.html#a11">describedclassvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key = 0, 00181 <font class="keyword">const</font> KeyValValue& def=KeyValValueRefDescribedClass()); 00182 00183 <font class="comment">// For vectors:</font> 00184 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a1">exists</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>); 00185 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a2">count</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>); 00186 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a4">booleanvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>, 00187 <font class="keyword">const</font> KeyValValue& def=KeyValValueboolean()); 00188 <font class="keywordtype">double</font> <a class="code" href="class_sc__KeyVal.html#a5">doublevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>, 00189 <font class="keyword">const</font> KeyValValue& def=KeyValValuedouble()); 00190 <font class="keywordtype">float</font> <a class="code" href="class_sc__KeyVal.html#a6">floatvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>, 00191 <font class="keyword">const</font> KeyValValue& def=KeyValValuefloat()); 00192 <font class="keywordtype">char</font> <a class="code" href="class_sc__KeyVal.html#a7">charvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>, 00193 <font class="keyword">const</font> KeyValValue& def=KeyValValuechar()); 00194 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a8">intvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>, 00195 <font class="keyword">const</font> KeyValValue& def=KeyValValueint()); 00196 size_t <a class="code" href="class_sc__KeyVal.html#a9">sizevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>, 00197 <font class="keyword">const</font> KeyValValue& def=KeyValValuesize()); 00198 <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#a10">pcharvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>, 00199 <font class="keyword">const</font> KeyValValue& def=KeyValValuepchar()); 00200 Ref<DescribedClass> <a class="code" href="class_sc__KeyVal.html#a11">describedclassvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>, 00201 <font class="keyword">const</font> KeyValValue& def=KeyValValueRefDescribedClass()); 00202 00203 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a1">exists</a>(<font class="keywordtype">int</font> i); 00204 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a2">count</a>(<font class="keywordtype">int</font> i); 00205 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a4">booleanvalue</a>(<font class="keywordtype">int</font> i, 00206 <font class="keyword">const</font> KeyValValue& def=KeyValValueboolean()); 00207 <font class="keywordtype">double</font> <a class="code" href="class_sc__KeyVal.html#a5">doublevalue</a>(<font class="keywordtype">int</font> i, 00208 <font class="keyword">const</font> KeyValValue& def=KeyValValuedouble()); 00209 <font class="keywordtype">float</font> <a class="code" href="class_sc__KeyVal.html#a6">floatvalue</a>(<font class="keywordtype">int</font> i, 00210 <font class="keyword">const</font> KeyValValue& def=KeyValValuefloat()); 00211 <font class="keywordtype">char</font> <a class="code" href="class_sc__KeyVal.html#a7">charvalue</a>(<font class="keywordtype">int</font> i, 00212 <font class="keyword">const</font> KeyValValue& def=KeyValValuechar()); 00213 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a8">intvalue</a>(<font class="keywordtype">int</font> i, 00214 <font class="keyword">const</font> KeyValValue& def=KeyValValueint()); 00215 size_t <a class="code" href="class_sc__KeyVal.html#a9">sizevalue</a>(<font class="keywordtype">int</font> i, 00216 <font class="keyword">const</font> KeyValValue& def=KeyValValuesize()); 00217 <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#a10">pcharvalue</a>(<font class="keywordtype">int</font> i, 00218 <font class="keyword">const</font> KeyValValue& def=KeyValValuepchar()); 00219 Ref<DescribedClass> <a class="code" href="class_sc__KeyVal.html#a11">describedclassvalue</a>(<font class="keywordtype">int</font> i, 00220 <font class="keyword">const</font> KeyValValue& def=KeyValValueRefDescribedClass()); 00221 00222 <font class="comment">// For arrays:</font> 00223 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a1">exists</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00224 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a2">count</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00225 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a4">booleanvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00226 <font class="keyword">const</font> KeyValValue& def=KeyValValueboolean()); 00227 <font class="keywordtype">double</font> <a class="code" href="class_sc__KeyVal.html#a5">doublevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00228 <font class="keyword">const</font> KeyValValue& def=KeyValValuedouble()); 00229 <font class="keywordtype">float</font> <a class="code" href="class_sc__KeyVal.html#a6">floatvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00230 <font class="keyword">const</font> KeyValValue& def=KeyValValuefloat()); 00231 <font class="keywordtype">char</font> <a class="code" href="class_sc__KeyVal.html#a7">charvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00232 <font class="keyword">const</font> KeyValValue& def=KeyValValuechar()); 00233 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a8">intvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00234 <font class="keyword">const</font> KeyValValue& def=KeyValValueint()); 00235 size_t <a class="code" href="class_sc__KeyVal.html#a9">sizevalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00236 <font class="keyword">const</font> KeyValValue& def=KeyValValuesize()); 00237 <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#a10">pcharvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00238 <font class="keyword">const</font> KeyValValue& def=KeyValValuepchar()); 00239 Ref<DescribedClass> <a class="code" href="class_sc__KeyVal.html#a11">describedclassvalue</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>, 00240 <font class="keyword">const</font> KeyValValue& def=KeyValValueRefDescribedClass()); 00241 00242 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a1">exists</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j); 00243 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a2">count</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j); 00244 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a4">booleanvalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00245 <font class="keyword">const</font> KeyValValue& def=KeyValValueboolean()); 00246 <font class="keywordtype">double</font> <a class="code" href="class_sc__KeyVal.html#a5">doublevalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00247 <font class="keyword">const</font> KeyValValue& def=KeyValValuedouble()); 00248 <font class="keywordtype">float</font> <a class="code" href="class_sc__KeyVal.html#a6">floatvalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00249 <font class="keyword">const</font> KeyValValue& def=KeyValValuefloat()); 00250 <font class="keywordtype">char</font> <a class="code" href="class_sc__KeyVal.html#a7">charvalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00251 <font class="keyword">const</font> KeyValValue& def=KeyValValuechar()); 00252 <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a8">intvalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00253 <font class="keyword">const</font> KeyValValue& def=KeyValValueint()); 00254 size_t <a class="code" href="class_sc__KeyVal.html#a9">sizevalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00255 <font class="keyword">const</font> KeyValValue& def=KeyValValuesize()); 00256 <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#a10">pcharvalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00257 <font class="keyword">const</font> KeyValValue& def=KeyValValuepchar()); 00258 Ref<DescribedClass> <a class="code" href="class_sc__KeyVal.html#a11">describedclassvalue</a>(<font class="keywordtype">int</font> i,<font class="keywordtype">int</font> j, 00259 <font class="keyword">const</font> KeyValValue& def=KeyValValueRefDescribedClass()); 00260 00261 <font class="comment">// For all else:</font> 00262 <font class="keywordtype">int</font> Va_exists(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,...); 00263 <font class="keywordtype">int</font> Va_count(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,...); 00264 <font class="keywordtype">int</font> Va_booleanvalue(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,...); 00265 <font class="keywordtype">double</font> Va_doublevalue(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,...); 00266 <font class="keywordtype">float</font> Va_floatvalue(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,...); 00267 <font class="keywordtype">char</font> Va_charvalue(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,...); 00268 <font class="keywordtype">int</font> Va_intvalue(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,...); 00269 size_t Va_sizevalue(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,...); 00270 <font class="keywordtype">char</font>* Va_pcharvalue(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,...); 00271 Ref<DescribedClass> Va_describedclassvalue(<font class="keyword">const</font> <font class="keywordtype">char</font>* key,<font class="keywordtype">int</font>,...); 00272 00274 KeyValError <a class="code" href="class_sc__KeyVal.html#a62">error</a>(); 00276 <font class="keyword">const</font> <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#a64">errormsg</a>(KeyValError err); 00278 <font class="keyword">const</font> <font class="keywordtype">char</font>* <a class="code" href="class_sc__KeyVal.html#a64">errormsg</a>(); 00279 00280 <font class="keyword">virtual</font> <font class="keywordtype">void</font> errortrace(std::ostream&fp=ExEnv::err0()); 00281 <font class="keyword">virtual</font> <font class="keywordtype">void</font> dump(std::ostream&fp=ExEnv::err0()); 00282 00284 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__KeyVal.html#a67">print_unseen</a>(std::ostream&fp=ExEnv::out0()); 00288 <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a68">have_unseen</a>(); 00289 <a name="l00291"></a><a class="code" href="class_sc__KeyVal.html#a69">00291</a> <font class="keywordtype">void</font> <a class="code" href="class_sc__KeyVal.html#a70">verbose</a>(<font class="keywordtype">int</font> v)<font class="keyword"> </font>{ verbose_ = v; } <a name="l00293"></a><a class="code" href="class_sc__KeyVal.html#a70">00293</a> <font class="keywordtype">int</font> <a class="code" href="class_sc__KeyVal.html#a70">verbose</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> verbose_; } 00294 }; 00295 00296 00297 00298 <font class="comment">// this class allows keyval associations to be set up by the program,</font> 00299 <font class="comment">// rather than determined by an external file</font> 00300 <font class="keyword">class </font>AssignedKeyVal: <font class="keyword">public</font> KeyVal { 00301 <font class="keyword">private</font>: 00302 AVLMap<KeyValKeyword,Ref<KeyValValue> > _map; 00303 <font class="comment">// do not allow a copy constructor or assignment</font> 00304 AssignedKeyVal(<font class="keyword">const</font> AssignedKeyVal&); 00305 <font class="keywordtype">void</font> operator=(<font class="keyword">const</font> AssignedKeyVal&); 00306 <font class="keyword">protected</font>: 00307 <font class="keywordtype">int</font> key_exists(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00308 Ref<KeyValValue> key_value(<font class="keyword">const</font> <font class="keywordtype">char</font>*, 00309 <font class="keyword">const</font> KeyValValue& def); 00310 <font class="keyword">public</font>: 00311 AssignedKeyVal(); 00312 ~AssignedKeyVal(); 00313 00314 <font class="keywordtype">void</font> assign(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keyword">const</font> Ref<KeyValValue>&); 00315 <font class="keywordtype">void</font> assign(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keywordtype">double</font>); 00316 <font class="keywordtype">void</font> assignboolean(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keywordtype">int</font>); 00317 <font class="keywordtype">void</font> assign(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keywordtype">float</font>); 00318 <font class="keywordtype">void</font> assign(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keywordtype">char</font>); 00319 <font class="keywordtype">void</font> assign(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keywordtype">int</font>); 00320 <font class="keywordtype">void</font> assign(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keyword">const</font> <font class="keywordtype">char</font>*); 00321 <font class="keywordtype">void</font> assign(<font class="keyword">const</font> <font class="keywordtype">char</font>*, <font class="keyword">const</font> Ref<DescribedClass>&); 00322 00323 <font class="keywordtype">void</font> clear(); 00324 }; 00325 00326 00327 00328 <font class="keyword">class </font>StringKeyVal: <font class="keyword">public</font> KeyVal { 00329 <font class="keyword">private</font>: 00330 <font class="comment">// once a described class is found it is kept here so</font> 00331 <font class="comment">// multiple references to it return the same instance</font> 00332 AVLMap<KeyValKeyword,Ref<KeyValValue> > _map; 00333 <font class="comment">// do not allow a copy constructor or assignment</font> 00334 StringKeyVal(<font class="keyword">const</font> StringKeyVal&); 00335 <font class="keywordtype">void</font> operator=(<font class="keyword">const</font> StringKeyVal&); 00336 <font class="keyword">protected</font>: 00337 StringKeyVal(); 00338 <font class="keywordtype">int</font> key_exists(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00339 Ref<KeyValValue> key_value(<font class="keyword">const</font> <font class="keywordtype">char</font>*, 00340 <font class="keyword">const</font> KeyValValue& def); 00341 <font class="keyword">public</font>: 00342 <font class="keyword">virtual</font> ~StringKeyVal(); 00343 <font class="keyword">virtual</font> <font class="keyword">const</font> <font class="keywordtype">char</font>* stringvalue(<font class="keyword">const</font> <font class="keywordtype">char</font> *) = 0; 00344 <font class="comment">// returns the name of the exact class the object at the keyword</font> 00345 <font class="keyword">virtual</font> <font class="keyword">const</font> <font class="keywordtype">char</font>* classname(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00346 <font class="comment">// returns a string which is the actual keyword if some sort</font> 00347 <font class="comment">// of variable substitution takes place (needed to make multiple</font> 00348 <font class="comment">// references to the same object work in input files)</font> 00349 <font class="keyword">virtual</font> <font class="keyword">const</font> <font class="keywordtype">char</font>* truekeyword(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00350 00351 <font class="keyword">virtual</font> <font class="keywordtype">void</font> errortrace(std::ostream&fp=ExEnv::err0()); 00352 <font class="keyword">virtual</font> <font class="keywordtype">void</font> dump(std::ostream&fp=ExEnv::err0()); 00353 }; 00354 00355 <font class="keyword">class </font>AggregateKeyVal : <font class="keyword">public</font> KeyVal { 00356 <font class="keyword">private</font>: 00357 <font class="keyword">enum</font> { MaxKeyVal = 4 }; 00358 Ref<KeyVal> kv[MaxKeyVal]; 00359 Ref<KeyVal> getkeyval(<font class="keyword">const</font> <font class="keywordtype">char</font>*key); 00360 <font class="comment">// do not allow a copy constructor or assignment</font> 00361 AggregateKeyVal(<font class="keyword">const</font> AggregateKeyVal&); 00362 <font class="keywordtype">void</font> operator=(<font class="keyword">const</font> AggregateKeyVal&); 00363 <font class="keyword">protected</font>: 00364 <font class="keywordtype">int</font> key_exists(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00365 Ref<KeyValValue> key_value(<font class="keyword">const</font> <font class="keywordtype">char</font>*, 00366 <font class="keyword">const</font> KeyValValue& def); 00367 <font class="keyword">public</font>: 00368 AggregateKeyVal(<font class="keyword">const</font> Ref<KeyVal>&); 00369 AggregateKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> Ref<KeyVal>&); 00370 AggregateKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> Ref<KeyVal>&); 00371 AggregateKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> Ref<KeyVal>&, 00372 <font class="keyword">const</font> Ref<KeyVal>&); 00373 ~AggregateKeyVal(); 00374 <font class="keywordtype">void</font> errortrace(std::ostream&fp=ExEnv::err0()); 00375 <font class="keywordtype">void</font> dump(std::ostream&fp=ExEnv::err0()); 00376 }; 00377 00378 <font class="keyword">class </font>PrefixKeyVal : <font class="keyword">public</font> KeyVal { 00379 <font class="keyword">private</font>: 00380 <font class="keywordtype">char</font>* prefix; 00381 Ref<KeyVal> keyval; 00382 <font class="keywordtype">void</font> setup(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00383 <font class="keywordtype">int</font> getnewprefixkey(<font class="keyword">const</font> <font class="keywordtype">char</font>*key,<font class="keywordtype">char</font>*newkey); 00384 <font class="comment">// do not allow a copy constructor or assignment</font> 00385 PrefixKeyVal(<font class="keyword">const</font> PrefixKeyVal&); 00386 <font class="keywordtype">void</font> operator=(<font class="keyword">const</font> PrefixKeyVal&); 00387 <font class="keywordtype">int</font> key_exists(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00388 Ref<KeyValValue> key_value(<font class="keyword">const</font> <font class="keywordtype">char</font>*, 00389 <font class="keyword">const</font> KeyValValue& def); 00390 <font class="keyword">public</font>: 00391 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>); 00392 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00393 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00394 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00395 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00396 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>); 00397 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00398 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00399 PrefixKeyVal(<font class="keyword">const</font> Ref<KeyVal>&,<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00400 <font class="comment">// old CTOR syntax (use the above instead)</font> 00401 PrefixKeyVal(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> Ref<KeyVal>&); 00402 PrefixKeyVal(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>); 00403 PrefixKeyVal(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00404 PrefixKeyVal(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00405 PrefixKeyVal(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> Ref<KeyVal>&,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>); 00406 ~PrefixKeyVal(); 00407 <font class="keywordtype">void</font> errortrace(std::ostream&fp=ExEnv::err0()); 00408 <font class="keywordtype">void</font> dump(std::ostream&fp=ExEnv::err0()); 00409 }; 00410 00411 <font class="keyword">class </font>IPV2; <a name="l00415"></a><a class="code" href="class_sc__ParsedKeyVal.html">00415</a> <font class="keyword">class </font>ParsedKeyVal : <font class="keyword">public</font> StringKeyVal { 00416 <font class="keyword">private</font>: 00417 <font class="keywordtype">int</font> nfile; 00418 <font class="keywordtype">char</font>**file; 00419 <font class="keywordtype">int</font> nfp; 00420 IPV2* ipv2; 00421 <font class="comment">// do not allow a copy constructor or assignment</font> 00422 <a class="code" href="class_sc__ParsedKeyVal.html#a0">ParsedKeyVal</a>(<font class="keyword">const</font> ParsedKeyVal&); 00423 <font class="keywordtype">void</font> operator=(<font class="keyword">const</font> ParsedKeyVal&); 00424 <font class="keyword">public</font>: 00426 <a class="code" href="class_sc__ParsedKeyVal.html#a0">ParsedKeyVal</a>(); 00428 <a class="code" href="class_sc__ParsedKeyVal.html#a0">ParsedKeyVal</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*file); 00430 <a class="code" href="class_sc__ParsedKeyVal.html#a0">ParsedKeyVal</a>(std::istream&s); 00433 <a class="code" href="class_sc__ParsedKeyVal.html#a0">ParsedKeyVal</a>(IPV2*); 00439 <a class="code" href="class_sc__ParsedKeyVal.html#a0">ParsedKeyVal</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> Ref<KeyVal>&); 00441 <a class="code" href="class_sc__ParsedKeyVal.html#a5">~ParsedKeyVal</a>(); 00442 00445 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="class_sc__ParsedKeyVal.html#d0">cat_files</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> Ref<KeyVal>&,std::ostream &o); 00446 00448 <font class="keywordtype">void</font> <a class="code" href="class_sc__ParsedKeyVal.html#a6">read</a>(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00450 <font class="keywordtype">void</font> <a class="code" href="class_sc__ParsedKeyVal.html#a6">read</a>(std::istream&); 00452 <font class="keywordtype">void</font> <a class="code" href="class_sc__ParsedKeyVal.html#a8">parse_string</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *); 00453 00454 <font class="comment">// Overrides of parent members.</font> 00455 <font class="keyword">const</font> <font class="keywordtype">char</font>* stringvalue(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00456 <font class="keyword">const</font> <font class="keywordtype">char</font>* classname(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00457 <font class="keyword">const</font> <font class="keywordtype">char</font>* truekeyword(<font class="keyword">const</font> <font class="keywordtype">char</font>*); 00458 <font class="keywordtype">void</font> errortrace(std::ostream&fp=ExEnv::err0()); 00459 <font class="keywordtype">void</font> dump(std::ostream&fp=ExEnv::err0()); 00460 <font class="keywordtype">void</font> <a class="code" href="class_sc__ParsedKeyVal.html#a14">print_unseen</a>(std::ostream&fp=ExEnv::out0()); 00461 <font class="keywordtype">int</font> <a class="code" href="class_sc__ParsedKeyVal.html#a15">have_unseen</a>(); 00462 }; 00463 00464 } 00465 00466 <font class="preprocessor">#endif </font><font class="comment">/* _KeyVal_h */</font> 00467 00468 <font class="comment">// Local Variables:</font> 00469 <font class="comment">// mode: c++</font> 00470 <font class="comment">// c-file-style: "CLJ"</font> 00471 <font class="comment">// End:</font> </div></pre><hr> <address> <small> Generated at Mon Oct 14 14:16:37 2002 for <a href="http://aros.ca.sandia.gov/~cljanss/mpqc">MPQC</a> 2.1.2 using the documentation package <a href="http://www.stack.nl/~dimitri/doxygen/index.html">Doxygen</a> 1.2.5. </small> </address> </body> </html>