]> www.ginac.de Git - ginac.git/blobdiff - ginac/print.h
- prepared for 1.0.13 release
[ginac.git] / ginac / print.h
index 4fdbeb830ea4126f2fa008e7358ac7762895feed..00ebcc919f3a5855a090e07274c5b48f01b2d990 100644 (file)
@@ -1,9 +1,9 @@
 /** @file print.h
  *
- *  Helper classes for expression output. */
+ *  Definition of helper classes for expression output. */
 
 /*
- *  GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -23,7 +23,7 @@
 #ifndef __GINAC_PRINT_H__
 #define __GINAC_PRINT_H__
 
-#include <iostream>
+#include <iosfwd>
 #include <string>
 
 namespace GiNaC {
@@ -32,54 +32,85 @@ namespace GiNaC {
 class print_context
 {
 public:
-       print_context(std::ostream & os = std::cout) : s(os) {}
-       std::ostream & s; /**< stream to output to */
+       print_context();
+       print_context(std::ostream &);
 
+       std::ostream & s; /**< stream to output to */
+private:
        // dummy virtual function to make the class polymorphic
        virtual void dummy(void) {}
 };
 
+/** Context for latex-parsable output. */
+class print_latex : public print_context
+{
+public:
+       print_latex();
+       print_latex(std::ostream &);
+};
+
+/** Context for python pretty-print output. */
+class print_python : public print_context
+{
+public:
+       print_python();
+       print_python(std::ostream &);
+};
+
+/** Context for python-parsable output. */
+class print_python_repr : public print_context
+{
+public:
+       print_python_repr();
+       print_python_repr(std::ostream &);
+};
+
 /** Context for tree-like output for debugging. */
 class print_tree : public print_context
 {
 public:
-       print_tree(std::ostream & os = std::cout, unsigned d = 4)
-         : print_context(os), delta_indent(d) {}
-       unsigned delta_indent; /**< size of indentation step */
+       print_tree(unsigned d = 4);
+       print_tree(std::ostream &, unsigned d = 4);
+       const unsigned delta_indent; /**< size of indentation step */
 };
 
 /** Base context for C source output. */
 class print_csrc : public print_context
 {
 public:
-       print_csrc(std::ostream & os = std::cout)
-         : print_context(os) {}
+       print_csrc();
+       print_csrc(std::ostream &);
 };
 
 /** Context for C source output using float numbers. */
 class print_csrc_float : public print_csrc
 {
 public:
-       print_csrc_float(std::ostream & os = std::cout)
-         : print_csrc(os) {}
+       print_csrc_float();
+       print_csrc_float(std::ostream &);
 };
 
 /** Context for C source output using double numbers. */
 class print_csrc_double : public print_csrc
 {
 public:
-       print_csrc_double(std::ostream & os = std::cout)
-         : print_csrc(os) {}
+       print_csrc_double();
+       print_csrc_double(std::ostream &);
 };
 
 /** Context for C source output using CLN numbers. */
 class print_csrc_cl_N : public print_csrc
 {
 public:
-       print_csrc_cl_N(std::ostream & os = std::cout)
-         : print_csrc(os) {}
+       print_csrc_cl_N();
+       print_csrc_cl_N(std::ostream &);
 };
 
+/** Check if obj is a T, including base classes. */
+template <class T>
+inline bool is_a(const print_context & obj)
+{ return dynamic_cast<const T *>(&obj)!=0; }
+
 } // namespace GiNaC
 
 #endif // ndef __GINAC_BASIC_H__