c084096c49ff3d8509924d87ef4174e0ff934c89
[ginac.git] / ginac / structure.cpp
1 /** @file structure.cpp
2  *
3  *  Implementation of 'abstract' class structure. */
4
5 /*
6  *  GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany
7  *
8  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 #include <string>
24
25 #include "structure.h"
26 #include "archive.h"
27 #include "debugmsg.h"
28 #include "utils.h"
29
30 namespace GiNaC {
31
32 GINAC_IMPLEMENT_REGISTERED_CLASS(structure, basic)
33
34 //////////
35 // default ctor, dtor, copy ctor assignment operator and helpers
36 //////////
37
38 DEFAULT_CTORS(structure)
39
40 //////////
41 // archiving
42 //////////
43
44 DEFAULT_ARCHIVING(structure)
45
46 //////////
47 // functions overriding virtual functions from bases classes
48 //////////
49
50 void structure::printraw(std::ostream & os) const
51 {
52         debugmsg("structure printraw",LOGLEVEL_PRINT);
53
54         os << class_name() << "(hash=" << hashvalue << ",flags=" << flags << ")";
55 }
56
57 void structure::print(std::ostream & os, unsigned upper_precedence) const
58 {
59         debugmsg("structure print",LOGLEVEL_PRINT);
60
61         os << class_name() << "()";
62 }
63
64 void structure::printtree(std::ostream & os, unsigned indent) const
65 {
66         debugmsg("structure printtree",LOGLEVEL_PRINT);
67
68         os << std::string(indent,' ') << class_name() << std::hex << ", hash=0x" << hashvalue << ", flags=0x" << flags << std::dec
69            << std::endl;
70 }
71
72 void structure::printcsrc(std::ostream & os, unsigned type, unsigned upper_precedence) const
73 {
74         debugmsg("structure print csrc",LOGLEVEL_PRINT);
75
76         os << "structure()";
77 }
78
79 // protected
80
81 DEFAULT_COMPARE(structure)
82
83 bool structure::is_equal_same_type(const basic & other) const
84 {
85         GINAC_ASSERT(is_of_type(other, structure));
86         return true; // all structures are the same
87 }
88
89 //////////
90 // non-virtual functions in this class
91 //////////
92
93 // protected
94
95 std::vector<registered_structure_info> & structure::registered_structures(void)
96 {
97         static std::vector<registered_structure_info> * rs = new std::vector<registered_structure_info>;
98         return *rs;
99 }
100
101 // public
102
103 unsigned structure::register_new(const char * nm)
104 {
105         registered_structure_info rsi={nm};
106         registered_structures().push_back(rsi);
107         return registered_structures().size()-1;
108 }
109
110 } // namespace GiNaC