[GiNaC-devel] [PATCH 5/6] ncmul::eval(): don't write beyond the end of the vector.

Jens Vollinga jensv at nikhef.nl
Sun Aug 9 22:21:53 CEST 2009


Hi Alexei,

I don't quite understand this patch (at least not in connection to its 
description). Yes, it improves the allocation, and then it does 
something that looks as if someone prefers to program in Python ...
Is this the intent and the message is just wrong?

Regards,
Jens


Alexei Sheplyakov schrieb:
> ---
>  ginac/ncmul.cpp |    6 +++---
>  1 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/ginac/ncmul.cpp b/ginac/ncmul.cpp
> index 0c22a81..fff307d 100644
> --- a/ginac/ncmul.cpp
> +++ b/ginac/ncmul.cpp
> @@ -339,15 +339,15 @@ ex ncmul::eval(int level) const
>  	if (assocseq.empty()) return _ex1;
>  
>  	// determine return types
> -	unsignedvector rettypes;
> -	rettypes.reserve(assocseq.size());
> +	unsignedvector rettypes(assocseq.size());
>  	size_t i = 0;
>  	size_t count_commutative=0;
>  	size_t count_noncommutative=0;
>  	size_t count_noncommutative_composite=0;
>  	cit = assocseq.begin(); citend = assocseq.end();
>  	while (cit != citend) {
> -		switch (rettypes[i] = cit->return_type()) {
> +		rettypes[i] = cit->return_type();
> +		switch (rettypes[i]) {
>  		case return_types::commutative:
>  			count_commutative++;
>  			break;



More information about the GiNaC-devel mailing list