Remove 'level' argument of normal().
The 'level' argument was modeled after that of the eval() methods
(removed in 6c946d4c). It has never been very useful except for
confusing developers and it hasn't been documented in the tutorial.
Moreover, I have no indication that it has ever been used.

Remove 'level' argument of evalf().
The 'level' argument was modeled after that of the eval() methods
(removed in 6c946d4c). It has never been very useful except for
confusing developers. Moreover, I have no indication that it has
ever been used.

Make .eval() evaluate top-level only.
With the previous patch, some old workarounds have become unnecessary:
If all expressions are evaluated, any object which is an aggregate of
expressions will only ever have to evaluate the top level. As such, it
has become pointless to evaluate child objects of an expression prior
to doing its own term-rewriting. This patch removes the evaluation of
children from all GiNaC objects. It also removes the now superfluous
parameter 'level' of the eval methods.

Improve method of setting status_flags::dynallocated.
There seems to be no way to obsolete the need to mark an object derived
from basic and handled by ex as being 'on the heap', at least none that
doesn't have significant performance impact. Having said that, this
patch aims at making this process simpler and more intuitive.
Where, before, one would return from a function returning an ex with
return (new mul(a, b))->setflag(status_flags::dynallocated);
this patch lets us return with
return dynallocate<mul>(a, b);
which should be much clearer. In any case, it involves less typing.
The two points where the status_flags::dynallocated are set are now
* the dynallocate<B>(args...) template function and
* the virtual duplicate() member functions.
This patch rolls out the new functionality throughout the library.

Make ample use of the contextual keyword 'override'.2015-11-26T11:20:20ZRichard Kreckelkreckel@ginac.deRichard Kreckelkreckel@ginac.de2015-11-26T11:20:20Zhttps://www.ginac.de/ginac.git/?p=ginac.git;a=commitdiff;h=d5b86dd10dd9cba12175d07af0b6edfc9a215e36

Make ample use of the contextual keyword 'override'.
This patch adds the C++11 contextual keyword 'override' to every overridden
virtual function declaration except where that would incur macro duplications.
Along the way, it fixes some comments about member functions 'virtuality'.

Make specialized power::expand() helpers static member fuctions.
The class power member functions expand_add(), expand_add_2(), and
expand_mul() do not access any member variable of class power. (In
fact, the only reason not to hide them entirely is that they invoke
protected members of classs expairseq, add, and mul which requires
them to be friends of these classes.)

Make (a+b+c+...)^n work for huuuge terms.2015-11-23T20:21:18ZRichard Kreckelkreckel@ginac.deRichard Kreckelkreckel@ginac.de2015-11-23T20:21:18Zhttps://www.ginac.de/ginac.git/?p=ginac.git;a=commitdiff;h=55b0f861ce3676061b8f531c97fd34046875581d

Make (a+b+c+...)^n work for huuuge terms.
This fix is neccessary for results exceeding 2^31 terms. While at it,
also restructured power::expand_add_() a bit to look more like the
more general power::expand_add().

Prettified source code.
- Added copyright and GPL licencing to new files.
- Increased year to 2009.
- Changed guarding macros in header to uniform pattern without leading or
trailing __ (double underscores).
- Put includes of system wide header consistently below own includes (help
a tiny bit to clarify dependencies).

A better return_type_tinfo() mechanism.
return_type_tinfo() is used in order to distingish between non-commutative
objects of different type. However, often it's necessary to distingish
between non-commutative objects of the same type, for example, between
gamma matrices with different representation label. return_type_tinfo()
does not provide any clean way to do that. Hence, introduce return_type_t
type which holds representation label along with type information, and
use it for return_type_tinfo().