|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// -*- mode: c++; c-basic-offset:4 -*-
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// This file is part of libdap, A C++ implementation of the OPeNDAP Data
|
|
Packit |
a4aae4 |
// Access Protocol.
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Copyright (c) 2002,2003 OPeNDAP, Inc.
|
|
Packit |
a4aae4 |
// Author: James Gallagher <jgallagher@opendap.org>
|
|
Packit |
a4aae4 |
//
|
|
Packit |
a4aae4 |
// This library is free software; you can redistribute it and/or
|
|
Packit |
a4aae4 |
// modify it under the terms of the GNU Lesser General Public
|
|
Packit |
a4aae4 |
// License as published by the Free Software Foundation; either
|
|
Packit |
a4aae4 |
// version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
a4aae4 |
//
|
|
Packit |
a4aae4 |
// This library is distributed in the hope that it will be useful,
|
|
Packit |
a4aae4 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
a4aae4 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
a4aae4 |
// Lesser General Public License for more details.
|
|
Packit |
a4aae4 |
//
|
|
Packit |
a4aae4 |
// You should have received a copy of the GNU Lesser General Public
|
|
Packit |
a4aae4 |
// License along with this library; if not, write to the Free Software
|
|
Packit |
a4aae4 |
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit |
a4aae4 |
//
|
|
Packit |
a4aae4 |
// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// (c) COPYRIGHT URI/MIT 1994-1999
|
|
Packit |
a4aae4 |
// Please read the full copyright statement in the file COPYRIGHT_URI.
|
|
Packit |
a4aae4 |
//
|
|
Packit |
a4aae4 |
// Authors:
|
|
Packit |
a4aae4 |
// jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Test the DAS class.
|
|
Packit |
a4aae4 |
// Read attributes from one or more files, printing the resulting table to
|
|
Packit |
a4aae4 |
// stdout. If a file is named `-' read from stdin for that file. The option
|
|
Packit |
a4aae4 |
// `-d' causes new/delete run-time debugging to be turned on.
|
|
Packit |
a4aae4 |
//
|
|
Packit |
a4aae4 |
// jhrg 7/25/94
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "config.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include <cstdlib>
|
|
Packit |
a4aae4 |
#include <string>
|
|
Packit |
a4aae4 |
#include <GetOpt.h>
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#define YYSTYPE char *
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
#include "DAS.h"
|
|
Packit |
a4aae4 |
#include "das.tab.hh"
|
|
Packit |
a4aae4 |
#include "Error.h"
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
using namespace libdap ;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void plain_driver(DAS &das, bool deref_alias);
|
|
Packit |
a4aae4 |
void load_attr_table(AttrTable at);
|
|
Packit |
a4aae4 |
void load_attr_table_ptr(AttrTable *atp);
|
|
Packit |
a4aae4 |
void parser_driver(DAS &das, bool deref_alias, bool as_xml);
|
|
Packit |
a4aae4 |
void test_scanner();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
int daslex();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
extern int dasdebug;
|
|
Packit |
a4aae4 |
const char *prompt = "das-test: ";
|
|
Packit |
a4aae4 |
const char *version = "version 1.19";
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
using namespace std;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void
|
|
Packit |
a4aae4 |
usage(string name)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
fprintf( stderr, "usage: %s %s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n",
|
|
Packit |
a4aae4 |
name.c_str(),
|
|
Packit |
a4aae4 |
"[-v] [-s] [-d] [-c] [-p] [rx] {< in-file > out-file}",
|
|
Packit |
a4aae4 |
"s: Test the DAS scanner.",
|
|
Packit |
a4aae4 |
"p: Scan and parse from <in-file>; print to <out-file>.",
|
|
Packit |
a4aae4 |
"c: Test building the DAS from C++ code.",
|
|
Packit |
a4aae4 |
"v: Print the version of das-test and exit.",
|
|
Packit |
a4aae4 |
"d: Print parser debugging information.",
|
|
Packit |
a4aae4 |
"r: Print the DAS with aliases deReferenced.",
|
|
Packit |
a4aae4 |
"x: Print as xml.") ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
int main(int argc, char *argv[])
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
GetOpt getopt (argc, argv, "scpvdrx");
|
|
Packit |
a4aae4 |
int option_char;
|
|
Packit |
a4aae4 |
bool parser_test = false;
|
|
Packit |
a4aae4 |
bool scanner_test = false;
|
|
Packit |
a4aae4 |
bool code_test = false;
|
|
Packit |
a4aae4 |
bool deref_alias = false;
|
|
Packit |
a4aae4 |
bool as_xml = false;
|
|
Packit |
a4aae4 |
while ((option_char = getopt ()) != -1)
|
|
Packit |
a4aae4 |
switch (option_char)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
case 'p':
|
|
Packit |
a4aae4 |
parser_test = true;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case 's':
|
|
Packit |
a4aae4 |
scanner_test = true;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case 'c':
|
|
Packit |
a4aae4 |
code_test = true;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case 'v':
|
|
Packit |
a4aae4 |
fprintf( stderr, "%s: %s\n", argv[0], version ) ;
|
|
Packit |
a4aae4 |
return 0;
|
|
Packit |
a4aae4 |
case 'd':
|
|
Packit |
a4aae4 |
dasdebug = 1;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case 'r':
|
|
Packit |
a4aae4 |
deref_alias = true;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case 'x':
|
|
Packit |
a4aae4 |
as_xml = true;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case '?':
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
usage(argv[0]);
|
|
Packit |
a4aae4 |
return 1;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
DAS das;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
if (!parser_test && !scanner_test && !code_test) {
|
|
Packit |
a4aae4 |
usage(argv[0]);
|
|
Packit |
a4aae4 |
return 1;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
try {
|
|
Packit |
a4aae4 |
if (parser_test)
|
|
Packit |
a4aae4 |
parser_driver(das, deref_alias, as_xml);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
if (scanner_test)
|
|
Packit |
a4aae4 |
test_scanner();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
if (code_test)
|
|
Packit |
a4aae4 |
plain_driver(das, deref_alias);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
catch (Error &e) {
|
|
Packit |
a4aae4 |
cerr << "Caught Error object:" << endl;
|
|
Packit |
a4aae4 |
cerr << e.get_error_message() << endl;
|
|
Packit |
a4aae4 |
return 1;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
return 0;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void
|
|
Packit |
a4aae4 |
test_scanner()
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
int tok;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s", prompt ) ; // first prompt
|
|
Packit |
a4aae4 |
fflush( stdout ) ;
|
|
Packit |
a4aae4 |
while ((tok = daslex())) {
|
|
Packit |
a4aae4 |
switch (tok) {
|
|
Packit |
a4aae4 |
case SCAN_ATTR:
|
|
Packit |
a4aae4 |
fprintf( stdout, "ATTR\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_ALIAS:
|
|
Packit |
a4aae4 |
fprintf( stdout, "ALIAS\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_WORD:
|
|
Packit |
a4aae4 |
fprintf( stdout, "WORD=%s\n", daslval ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
case SCAN_BYTE:
|
|
Packit |
a4aae4 |
fprintf( stdout, "BYTE\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_INT16:
|
|
Packit |
a4aae4 |
fprintf( stdout, "INT16\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_UINT16:
|
|
Packit |
a4aae4 |
fprintf( stdout, "UINT16\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_INT32:
|
|
Packit |
a4aae4 |
fprintf( stdout, "INT32\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_UINT32:
|
|
Packit |
a4aae4 |
fprintf( stdout, "UINT32\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_FLOAT32:
|
|
Packit |
a4aae4 |
fprintf( stdout, "FLOAT32\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_FLOAT64:
|
|
Packit |
a4aae4 |
fprintf( stdout, "FLOAT64\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_STRING:
|
|
Packit |
a4aae4 |
fprintf( stdout, "STRING\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case SCAN_URL:
|
|
Packit |
a4aae4 |
fprintf( stdout, "URL\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
case SCAN_XML:
|
|
Packit |
a4aae4 |
fprintf( stdout, "OtherXML\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
case '{':
|
|
Packit |
a4aae4 |
fprintf( stdout, "Left Brace\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case '}':
|
|
Packit |
a4aae4 |
fprintf( stdout, "Right Brace\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case ';':
|
|
Packit |
a4aae4 |
fprintf( stdout, "Semicolon\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
case ',':
|
|
Packit |
a4aae4 |
fprintf( stdout, "Comma\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
default:
|
|
Packit |
a4aae4 |
fprintf( stdout, "Error: Unrecognized input\n" ) ;
|
|
Packit |
a4aae4 |
break;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s", prompt ) ; // print prompt after output
|
|
Packit |
a4aae4 |
fflush( stdout ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void
|
|
Packit |
a4aae4 |
parser_driver(DAS &das, bool deref_alias, bool as_xml)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
das.parse();
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
if (as_xml) {
|
|
Packit |
a4aae4 |
das.get_top_level_attributes()->print_xml(stdout, " ");
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
else
|
|
Packit |
a4aae4 |
das.print(stdout, deref_alias);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// Given a DAS, add some stuff to it.
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void
|
|
Packit |
a4aae4 |
plain_driver(DAS &das, bool deref_alias)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
string name = "test";
|
|
Packit |
a4aae4 |
AttrTable *atp = new AttrTable;
|
|
Packit |
a4aae4 |
load_attr_table_ptr(atp);
|
|
Packit |
a4aae4 |
#if 0
|
|
Packit |
a4aae4 |
AttrTable *dummy = das.get_table(name);
|
|
Packit |
a4aae4 |
#endif
|
|
Packit |
a4aae4 |
das.add_table(name, atp);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
name = "test2";
|
|
Packit |
a4aae4 |
atp = new AttrTable;
|
|
Packit |
a4aae4 |
load_attr_table_ptr(atp);
|
|
Packit |
a4aae4 |
das.add_table(name, atp);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
das.print(stdout, deref_alias);
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// stuff an AttrTable full of values. Also, print it out.
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void
|
|
Packit |
a4aae4 |
load_attr_table(AttrTable at)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
at.append_attr("month", "String", "Feb");
|
|
Packit |
a4aae4 |
at.append_attr("month", "String", "Feb");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at.append_attr("month_a", "String", "Jan");
|
|
Packit |
a4aae4 |
at.append_attr("month_a", "String", "Feb");
|
|
Packit |
a4aae4 |
at.append_attr("month_a", "String", "Mar");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at.append_attr("Date", "Int32", "12345");
|
|
Packit |
a4aae4 |
at.append_attr("day", "Int32", "01");
|
|
Packit |
a4aae4 |
at.append_attr("Time", "Float64", "3.1415");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fprintf( stdout, "Using the iterator:\n" ) ;
|
|
Packit |
a4aae4 |
for (AttrTable::Attr_iter p2 = at.attr_begin(); p2 != at.attr_end(); p2++)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s %s ", at.get_name(p2).c_str(),
|
|
Packit |
a4aae4 |
at.get_type(p2).c_str() ) ;
|
|
Packit |
a4aae4 |
for (unsigned i = 0; i < at.get_attr_num(p2); ++i)
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s ", at.get_attr(p2, i).c_str() ) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "\n" ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string name = "month";
|
|
Packit |
a4aae4 |
fprintf( stdout, "Using String: %s %s %s\n",
|
|
Packit |
a4aae4 |
at.get_type(name).c_str(),
|
|
Packit |
a4aae4 |
at.get_attr(name, 0).c_str(),
|
|
Packit |
a4aae4 |
at.get_attr(name, 1).c_str()) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "Using char *: %s %s %s\n",
|
|
Packit |
a4aae4 |
at.get_type("month").c_str(),
|
|
Packit |
a4aae4 |
at.get_attr("month", 0).c_str(),
|
|
Packit |
a4aae4 |
at.get_attr("month", 1).c_str() ) ;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at.del_attr("month");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fprintf( stdout, "After deletion:\n" ) ;
|
|
Packit |
a4aae4 |
for (AttrTable::Attr_iter p3 = at.attr_begin(); p3 != at.attr_end(); p3++)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s %s ", at.get_name(p3).c_str(),
|
|
Packit |
a4aae4 |
at.get_type(p3).c_str() ) ;
|
|
Packit |
a4aae4 |
for (unsigned i = 0; i < at.get_attr_num(p3); ++i)
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s ", at.get_attr(p3, i).c_str() ) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "\n" ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at.print(stdout);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fprintf( stdout, "After print:\n" ) ;
|
|
Packit |
a4aae4 |
for (AttrTable::Attr_iter p4 = at.attr_begin(); p4 != at.attr_end(); p4++)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s %s ", at.get_name(p4).c_str(),
|
|
Packit |
a4aae4 |
at.get_type(p4).c_str() ) ;
|
|
Packit |
a4aae4 |
for (unsigned i = 0; i < at.get_attr_num(p4); ++i)
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s ", at.get_attr(p4, i).c_str() ) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "\n" ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
// OK, now try it with a dymanic AttrTable
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
void
|
|
Packit |
a4aae4 |
load_attr_table_ptr(AttrTable *at)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
at->append_attr("month", "String", "Feb");
|
|
Packit |
a4aae4 |
at->append_attr("month", "String", "Feb");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at->append_attr("month_a", "String", "Jan");
|
|
Packit |
a4aae4 |
at->append_attr("month_a", "String", "Feb");
|
|
Packit |
a4aae4 |
at->append_attr("month_a", "String", "Mar");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at->append_attr("Date", "Int32", "12345");
|
|
Packit |
a4aae4 |
at->append_attr("day", "Int32", "01");
|
|
Packit |
a4aae4 |
at->append_attr("Time", "Float64", "3.1415");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fprintf( stdout, "Using the iterator:\n" ) ;
|
|
Packit |
a4aae4 |
for (AttrTable::Attr_iter p2 = at->attr_begin(); p2 != at->attr_end(); p2++)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s %s ", at->get_name(p2).c_str(),
|
|
Packit |
a4aae4 |
at->get_type(p2).c_str() ) ;
|
|
Packit |
a4aae4 |
for (unsigned i = 0; i < at->get_attr_num(p2); ++i)
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s ", at->get_attr(p2, i).c_str() ) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "\n" ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
string name = "month";
|
|
Packit |
a4aae4 |
fprintf( stdout, "Using String: %s %s %s\n",
|
|
Packit |
a4aae4 |
at->get_type(name).c_str(),
|
|
Packit |
a4aae4 |
at->get_attr(name, 0).c_str(),
|
|
Packit |
a4aae4 |
at->get_attr(name, 1).c_str() ) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "Using char *: %s %s %s\n",
|
|
Packit |
a4aae4 |
at->get_type("month").c_str(),
|
|
Packit |
a4aae4 |
at->get_attr("month", 0).c_str(),
|
|
Packit |
a4aae4 |
at->get_attr("month", 1).c_str() ) ;
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at->del_attr("month");
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fprintf( stdout, "After deletion:\n" ) ;
|
|
Packit |
a4aae4 |
for (AttrTable::Attr_iter p3 = at->attr_begin(); p3 != at->attr_end(); p3++)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s %s ", at->get_name(p3).c_str(),
|
|
Packit |
a4aae4 |
at->get_type(p3).c_str() ) ;
|
|
Packit |
a4aae4 |
for (unsigned i = 0; i < at->get_attr_num(p3); ++i)
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s ", at->get_attr(p3, i).c_str() ) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "\n" ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
at->print(stdout);
|
|
Packit |
a4aae4 |
|
|
Packit |
a4aae4 |
fprintf( stdout, "After print:\n" ) ;
|
|
Packit |
a4aae4 |
for (AttrTable::Attr_iter p4 = at->attr_begin(); p4 !=at->attr_end(); p4++)
|
|
Packit |
a4aae4 |
{
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s %s ", at->get_name(p4).c_str(),
|
|
Packit |
a4aae4 |
at->get_type(p4).c_str() ) ;
|
|
Packit |
a4aae4 |
for (unsigned i = 0; i < at->get_attr_num(p4); ++i)
|
|
Packit |
a4aae4 |
fprintf( stdout, "%s ", at->get_attr(p4, i).c_str() ) ;
|
|
Packit |
a4aae4 |
fprintf( stdout, "\n" ) ;
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
}
|
|
Packit |
a4aae4 |
|