Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > media > contrib > by-pkgid > 263386785cefb9ae5d63b926d214d809 > files > 1217

mpqc-2.1.2-4mdk.ppc.rpm

<!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>ipv2.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> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>ipv2.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font>
00002 <font class="comment">// ipv2.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 &lt;cljanss@limitpt.com&gt;</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_ipv2_ipv2_h</font>
00029 <font class="preprocessor"></font><font class="preprocessor">#define _util_keyval_ipv2_ipv2_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 &lt;iostream&gt;</font>
00035 <font class="preprocessor">#include &lt;util/misc/exenv.h&gt;</font>
00036 <font class="preprocessor">#include &lt;util/keyval/ipv2_scan.h&gt;</font>
00037 
00038 <font class="preprocessor">#undef yyFlexLexer</font>
00039 <font class="preprocessor"></font><font class="preprocessor">#define yyFlexLexer IPV2FlexLexer</font>
00040 <font class="preprocessor"></font><font class="preprocessor">#include &lt;FlexLexer.h&gt;</font>
00041 
00042 <font class="keyword">namespace </font>sc {
00043 
00044 <font class="comment">// For temporary data (only used while parsing)</font>
00045 <font class="comment">/* This integer list is used to keep track of the karray index. */</font>
00046 <font class="keyword">struct </font>intlist_struct {
00047   <font class="keywordtype">int</font> i;
00048   <font class="keyword">struct </font>intlist_struct *p;
00049   };
00050 <font class="keyword">typedef</font> <font class="keyword">struct </font>intlist_struct intlist_t;
00051 
00052 <font class="comment">// For permanent data</font>
00053 <font class="keyword">struct </font>ip_keyword_tree_struct {
00054   <font class="keywordtype">char</font> *keyword;
00055   <font class="keywordtype">char</font> *classname;
00056   <font class="keywordtype">char</font> *truename;
00057   <font class="keyword">struct </font>ip_keyword_tree_struct *across; <font class="comment">/* Circular list. */</font>
00058   <font class="keyword">struct </font>ip_keyword_tree_struct *up;    <font class="comment">/* Terminated by NULL. */</font>
00059   <font class="keyword">struct </font>ip_keyword_tree_struct *down;  <font class="comment">/* Terminated by NULL. */</font>
00060   <font class="keywordtype">char</font> *variable;  <font class="comment">/* If this node points to another name, this</font>
00061 <font class="comment">                    * is the name, otherwise NULL. */</font>
00062   <font class="keywordtype">char</font> *value;
00063   <font class="keywordtype">int</font> seen;
00064   };
00065 
00066 <font class="keyword">struct </font>ip_keyword_tree_list_struct {
00067   <font class="keyword">struct </font>ip_keyword_tree_struct *kt;
00068   <font class="keyword">struct </font>ip_keyword_tree_list_struct *p;
00069   };
00070 
00071 <font class="keyword">struct </font>ip_cwk_stack_struct {
00072   <font class="keyword">struct </font>ip_keyword_tree_list_struct *ktl;
00073   <font class="keyword">struct </font>ip_cwk_stack_struct *p;
00074   };
00075 <font class="keyword">typedef</font> <font class="keyword">struct </font>ip_cwk_stack_struct ip_cwk_stack_t;
00076 
00077 <font class="keyword">typedef</font> <font class="keyword">struct </font>ip_keyword_tree_struct ip_keyword_tree_t;
00078 <font class="keyword">typedef</font> <font class="keyword">struct </font>ip_keyword_tree_list_struct ip_keyword_tree_list_t;
00079 
00080 <font class="keyword">class </font>IPV2
00081 {
00082  <font class="keyword">public</font>:
00083   <font class="keyword">enum</font> Status {
00084       OK=0          ,  <font class="comment">/* No problem. */</font>
00085       KeyNotFound=1 ,  <font class="comment">/* The keyword was not found. */</font>
00086       OutOfBounds=2 ,  <font class="comment">/* An array subscript was out of bounds. */</font>
00087       Malloc=3      ,  <font class="comment">/* Memory allocation failed. */</font>
00088       NotAnArray=4  ,  <font class="comment">/* Gave index for data which isn't an array */</font>
00089       NotAScalar=5  ,  <font class="comment">/* Didn't give index for data which is an array */</font>
00090       Type=6        ,  <font class="comment">/* The datum is not of the appropiate type. */</font>
00091       HasNoValue=7  ,  <font class="comment">/* The keyword has no value. */</font>
00092       ValNotExpd=8     <font class="comment">/* A value was not expected for the keyword. */</font>
00093       };
00094   <font class="keyword">enum</font> { KEYWORD_LENGTH=256 };
00095   
00096  <font class="keyword">private</font>:
00097   <font class="keywordtype">char</font> *filename_;
00098     
00099   <font class="comment">// These are needed only when the input is being read in:</font>
00100   ip_string_list_t* table_keywords;
00101   ip_string_list_t* current_table_keyword;
00102   ip_keyword_tree_t* table_sub_tree;
00103   <font class="keywordtype">int</font> table_row_number;
00104   <font class="keywordtype">int</font> table_array_depth;
00105   intlist_t *karray_indices;
00106   ip_keyword_tree_t *sub_tree;
00107   <font class="keywordtype">int</font> init_karray;
00108 
00109   <font class="comment">// this maintains a list of current working keyword lists (for cwk_push</font>
00110   <font class="comment">// and cwk_pop)</font>
00111   ip_cwk_stack_t *cwkstack;
00112 
00113   <font class="comment">// This keeps track of whether or not we've been initialized</font>
00114   <font class="keywordtype">int</font> ip_initialized;
00115 
00116   <font class="comment">// This is used for error processing</font>
00117   <font class="keywordtype">char</font> lastkeyword[KEYWORD_LENGTH];
00118   
00119   <font class="comment">// These are needed always:</font>
00120   std::istream* ip_in;
00121   std::ostream* ip_out;
00122   ip_keyword_tree_t* ip_tree;
00123   ip_keyword_tree_list_t* ip_cwk;
00124   <font class="keywordtype">int</font> ip_keyword;
00125 
00126   <font class="comment">// private routines mainly used for parsing the input</font>
00127   <font class="keywordtype">void</font> ip_push_table_col(<font class="keywordtype">char</font>*);
00128   <font class="keywordtype">void</font> ip_next_table_entry();
00129   <font class="keywordtype">char</font>* dup_string(<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00130   ip_keyword_tree_t* ip_get_variable_kt(<font class="keywordtype">char</font>*);
00131   <font class="keywordtype">char</font>* ip_get_variable_value(<font class="keywordtype">char</font>*);
00132   <font class="keywordtype">void</font> ip_internal_values();
00133   <font class="keywordtype">void</font> ip_push_keyword(<font class="keywordtype">char</font>*);
00134   <font class="keywordtype">void</font> ip_push_keyclass(<font class="keywordtype">char</font>*,<font class="keywordtype">char</font>*,ip_string_list_t*);
00135   <font class="keywordtype">void</font> ip_pop_keyword();
00136   <font class="keywordtype">void</font> ip_begin_table(ip_string_list_t*);
00137   <font class="keywordtype">void</font> ip_done_table();
00138   ip_string_list_t* ip_add_string_list(ip_string_list_t*,<font class="keywordtype">char</font>*);
00139   ip_string_list_t* ip_string_to_string_list(<font class="keywordtype">char</font>*);
00140   <font class="keywordtype">void</font> ip_assign_variable(<font class="keywordtype">char</font>*);
00141   <font class="keywordtype">double</font> ip_get_variable_double(<font class="keywordtype">char</font>*);
00142   <font class="keywordtype">char</font>* ip_double_to_string(<font class="keywordtype">double</font>);
00143   <font class="keywordtype">void</font> ip_assign_value(<font class="keywordtype">char</font>*value);
00144   <font class="keywordtype">void</font> ip_start_karray();
00145   <font class="keywordtype">void</font> ip_init_karray();
00146   <font class="keywordtype">void</font> ip_incr_karray();
00147   <font class="keywordtype">void</font> ip_lastkeyword(<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00148   <font class="keywordtype">void</font> ip_lastkeywordtree(ip_keyword_tree_t*);
00149   <font class="keywordtype">void</font> ip_lastkeyword_(ip_keyword_tree_t*);
00150   ip_keyword_tree_t* ip_alloc_keyword_tree();
00151   <font class="keywordtype">void</font> ip_free_keyword_tree(ip_keyword_tree_t*);
00152   <font class="keywordtype">void</font> ip_cwk_add_kt(ip_keyword_tree_t*);
00153   ip_keyword_tree_t* ip_cwk_descend_tree(<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00154   ip_keyword_tree_t* ip_descend_tree(ip_keyword_tree_t*,<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00155   <font class="keywordtype">char</font>* ip_key_value(<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00156   <font class="keywordtype">void</font> free_keyword_tree_list(ip_keyword_tree_list_t*);
00157   ip_keyword_tree_list_t* splice_keyword_tree_list(ip_keyword_tree_t*,
00158                                                    ip_keyword_tree_list_t*);
00159   <font class="keywordtype">void</font> ip_cwk_karray_add_v(<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00160   <font class="keywordtype">void</font> ip_cwk_karray_add(<font class="keywordtype">int</font>,...);
00161   ip_keyword_tree_t* ip_karray_descend_v(ip_keyword_tree_t*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00162   ip_keyword_tree_t* ip_karray_descend(ip_keyword_tree_t*,<font class="keywordtype">int</font>,...);
00163   <font class="keywordtype">void</font> print_tree_(std::ostream&amp;,ip_keyword_tree_t*);
00164   <font class="keywordtype">int</font> ip_special_characters(<font class="keywordtype">char</font>*);
00165   <font class="keywordtype">char</font>* ip_append_keystrings(<font class="keywordtype">char</font>*,<font class="keywordtype">char</font>*);
00166   <font class="keywordtype">void</font> ip_pop_karray();
00167   <font class="keywordtype">void</font> ip_initialize(std::istream&amp;,std::ostream&amp;);
00168   <font class="keywordtype">void</font> ip_append(std::istream&amp;,std::ostream&amp;);
00169   <font class="keywordtype">char</font>* get_truename(ip_keyword_tree_t*kt);
00170 
00171   <font class="keywordtype">void</font> showpos();
00172 
00173   IPV2FlexLexer *lexer;
00174 
00175   <font class="keywordtype">int</font> ylex()<font class="keyword"> </font>{ <font class="keywordflow">return</font> lexer-&gt;yylex(); }
00176   <font class="keywordtype">int</font> yparse();
00177   <font class="keywordtype">void</font> yerror(<font class="keyword">const</font> <font class="keywordtype">char</font>* s);
00178 
00179  <font class="keyword">public</font>:
00180   IPV2();
00181   <font class="keyword">virtual</font> ~IPV2();
00182   <font class="keyword">static</font> <font class="keywordtype">int</font> have_global();
00183   <font class="keyword">static</font> <font class="keywordtype">void</font> set_global(IPV2*);
00184   <font class="keyword">static</font> IPV2* global();
00185   <font class="comment">// calls either ip_append or ip_initialize based on ip_initialized</font>
00186   <font class="keywordtype">void</font> read(std::istream&amp;,std::ostream&amp;,<font class="keyword">const</font> <font class="keywordtype">char</font> *filename=0);
00187   <font class="keywordtype">void</font> append_from_input(<font class="keyword">const</font> <font class="keywordtype">char</font>*,std::ostream&amp;);
00188   <font class="keywordtype">void</font> done();
00189   <font class="keyword">const</font> <font class="keywordtype">char</font>* error_message(IPV2::Status);
00190   <font class="keywordtype">void</font> error(<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00191   <font class="keywordtype">void</font> warn(<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00192   <font class="keywordtype">void</font> cwk_root();
00193   <font class="keywordtype">void</font> cwk_clear();
00194   <font class="keywordtype">void</font> cwk_add(<font class="keyword">const</font> <font class="keywordtype">char</font>*);
00195   <font class="keywordtype">void</font> cwk_push();
00196   <font class="keywordtype">void</font> cwk_pop();
00197   IPV2::Status boolean(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>*,<font class="keywordtype">int</font>,...);
00198   IPV2::Status boolean_v(<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>*);
00199   <font class="keywordtype">int</font> exist(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,...);
00200   <font class="keywordtype">int</font> exist_v(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00201   IPV2::Status data(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">void</font>*,<font class="keywordtype">int</font>,...);
00202   IPV2::Status data_v(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">void</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00203     <font class="comment">// the character string produced by classname must not be delete[]'ed</font>
00204   IPV2::Status classname(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,...);
00205   IPV2::Status classname_v(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00206     <font class="comment">// the character string produced by truekeyword must not be delete[]'ed</font>
00207     <font class="comment">// if there is no alias for the keyword the string pointer is set to</font>
00208     <font class="comment">// null and if the keyword exists OK is returned</font>
00209   IPV2::Status truekeyword(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,...);
00210   IPV2::Status truekeyword_v(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00211   IPV2::Status string(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,...);
00212   IPV2::Status string_v(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00213     <font class="comment">// the character string produced by value must not be delete[]'ed</font>
00214     <font class="comment">// or free'ed.</font>
00215   IPV2::Status value(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,...);
00216   IPV2::Status value_v(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keyword">const</font> <font class="keywordtype">char</font>**,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00217 
00218   IPV2::Status construct_key_v(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">char</font>*,<font class="keywordtype">int</font>,<font class="keywordtype">int</font>*);
00219   IPV2::Status count(<font class="keyword">const</font> <font class="keywordtype">char</font>*,<font class="keywordtype">int</font>*,<font class="keywordtype">int</font>,...);
00220   IPV2::Status count_v(<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>*);
00221 
00222   <font class="comment">// some routines for debugging</font>
00223   <font class="keywordtype">void</font> print_keyword(std::ostream&amp;f=ExEnv::out0(),ip_keyword_tree_t*k=0);
00224   <font class="keywordtype">void</font> print_tree(std::ostream&amp;f=ExEnv::out0(),ip_keyword_tree_t*k=0);
00225   <font class="keywordtype">void</font> print_unseen(std::ostream&amp;f=ExEnv::out0(),ip_keyword_tree_t*k=0);
00226   <font class="keywordtype">int</font> have_unseen(ip_keyword_tree_t*k=0);
00227 };
00228 
00229 }
00230 
00231 <font class="preprocessor">#endif</font>
00232 <font class="preprocessor"></font>
00233 <font class="comment">// Local Variables:</font>
00234 <font class="comment">// mode: c++</font>
00235 <font class="comment">// c-file-style: "CLJ"</font>
00236 <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>