]> www.ginac.de Git - ginac.git/blobdiff - ginac/flags.h
Add support for Texinfo-5.0.
[ginac.git] / ginac / flags.h
index 04c430c4caae87540983a6bfae53a4341430774a..8f8f25dff572a45bdc4a0b75df2755d11f8e4ba5 100644 (file)
@@ -3,7 +3,7 @@
  *  Collection of all flags used through the GiNaC framework. */
 
 /*
- *  GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2011 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
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#ifndef __GINAC_FLAGS_H__
-#define __GINAC_FLAGS_H__
+#ifndef GINAC_FLAGS_H
+#define GINAC_FLAGS_H
 
 namespace GiNaC {
 
@@ -29,9 +29,17 @@ namespace GiNaC {
 class expand_options {
 public:
        enum {
-               expand_trigonometric = 0x0001,
-               expand_indexed = 0x0002,
-               expand_function_args = 0x0004
+               expand_indexed = 0x0001,      ///< expands (a+b).i to a.i+b.i
+               expand_function_args = 0x0002, ///< expands the arguments of functions
+               expand_rename_idx = 0x0004 ///< used internally by mul::expand()
+       };
+};
+
+/** Flags to control the behavior of has(). */
+class has_options {
+public:
+       enum {
+               algebraic = 0x0001              ///< enable algebraic matching
        };
 };
 
@@ -39,8 +47,27 @@ public:
 class subs_options {
 public:
        enum {
-               subs_no_pattern = 0x0001,
-               subs_algebraic = 0x0002
+               no_pattern = 0x0001,             ///< disable pattern matching
+               subs_no_pattern = 0x0001, // for backwards compatibility
+               algebraic = 0x0002,              ///< enable algebraic substitutions
+               subs_algebraic = 0x0002,  // for backwards compatibility
+               pattern_is_product = 0x0004,     ///< used internally by expairseq::subschildren()
+               pattern_is_not_product = 0x0008, ///< used internally by expairseq::subschildren()
+               no_index_renaming = 0x0010,
+               // To indicate that we want to substitue an index by something that is
+               // is not an index. Without this flag the index value would be
+               // substituted in that case.
+               really_subs_idx = 0x0020
+       };
+};
+
+/** Domain of an object */
+class domain {
+public:
+       enum {
+               complex,
+               real,
+               positive
        };
 };
 
@@ -163,10 +190,13 @@ public:
 class status_flags {
 public:
        enum {
-               dynallocated    = 0x0001,       ///< Heap-allocated (i.e. created by new if we want to be clever and bypass the stack, @see ex::construct_from_basic() )
-               evaluated       = 0x0002,       ///< .eval() has already done its job
-               expanded        = 0x0004,       ///< .expand(0) has already done its job (other expand() options ignore this flag)
-               hash_calculated = 0x0008        ///< .calchash() has already done its job
+               dynallocated    = 0x0001, ///< heap-allocated (i.e. created by new if we want to be clever and bypass the stack, @see ex::construct_from_basic() )
+               evaluated       = 0x0002, ///< .eval() has already done its job
+               expanded        = 0x0004, ///< .expand(0) has already done its job (other expand() options ignore this flag)
+               hash_calculated = 0x0008, ///< .calchash() has already done its job
+               not_shareable   = 0x0010, ///< don't share instances of this object between different expressions unless explicitly asked to (used by ex::compare())
+               has_indices     = 0x0020,
+               has_no_indices  = 0x0040  // ! (has_indices || has_no_indices) means "don't know"
        };
 };
 
@@ -174,7 +204,7 @@ public:
 class info_flags {
 public:
        enum {
-               // answered by class numeric
+               // answered by class numeric, add, mul and symbols/constants in particular domains
                numeric,
                real,
                rational,
@@ -223,7 +253,10 @@ public:
                has_indices,  // object has at least one index
 
                // answered by class idx
-               idx
+               idx,
+
+               // answered by classes numeric, symbol, add, mul, power
+               expanded
        };
 };
 
@@ -248,6 +281,15 @@ public:
        };
 };
 
+/** Flags to control the polynomial factorization. */
+class factor_options {
+public:
+       enum {
+               polynomial = 0x0000, ///< factor only expressions that are polynomials
+               all        = 0x0001  ///< factor all polynomial subexpressions
+       };
+};
+
 } // namespace GiNaC
 
-#endif // ndef __GINAC_FLAGS_H__
+#endif // ndef GINAC_FLAGS_H