X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fflags.h;h=0c66afd033b438a06a57fbd1f28ff0dac56f12c6;hp=af4144eefd3a983c727fe926899d57ac7fc9f614;hb=9413cd14faaf2980de3884915e22a5beda068ecc;hpb=695f6ae955ec530cded8f21efd5569df39447f76 diff --git a/ginac/flags.h b/ginac/flags.h index af4144ee..0c66afd0 100644 --- a/ginac/flags.h +++ b/ginac/flags.h @@ -3,7 +3,7 @@ * Collection of all flags used through the GiNaC framework. */ /* - * GiNaC Copyright (C) 1999-2005 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2016 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 @@ -17,11 +17,11 @@ * * 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 { @@ -30,7 +30,17 @@ class expand_options { public: enum { expand_indexed = 0x0001, ///< expands (a+b).i to a.i+b.i - expand_function_args = 0x0002 ///< expands the arguments of functions + expand_function_args = 0x0002, ///< expands the arguments of functions + expand_rename_idx = 0x0004, ///< used internally by mul::expand() + expand_transcendental = 0x0008 ///< expands transcendental functions like log and exp + }; +}; + +/** Flags to control the behavior of has(). */ +class has_options { +public: + enum { + algebraic = 0x0001 ///< enable algebraic matching }; }; @@ -42,8 +52,13 @@ public: 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() + 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 substitute an index by something that + // is not an index. Without this flag the index value would be + // substituted in that case. + really_subs_idx = 0x0020 }; }; @@ -52,7 +67,8 @@ class domain { public: enum { complex, - real + real, + positive }; }; @@ -179,7 +195,12 @@ public: 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()) + 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" + is_positive = 0x0080, + is_negative = 0x0100, + purely_indefinite = 0x0200 // If set in a mul, then it does not contains any terms with determined signs, used in power::expand() }; }; @@ -187,7 +208,7 @@ public: class info_flags { public: enum { - // answered by class numeric + // answered by class numeric, add, mul, function and symbols/constants in particular domains numeric, real, rational, @@ -229,14 +250,19 @@ public: rational_polynomial, crational_polynomial, rational_function, - algebraic, // answered by class indexed indexed, // class can carry indices has_indices, // object has at least one index // answered by class idx - idx + idx, + + // answered by classes numeric, symbol, add, mul, power + expanded, + + // is meaningful for mul only + indefinite }; }; @@ -261,6 +287,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