]> www.ginac.de Git - ginac.git/blobdiff - ginac/utils.h
shaker_sort, permutation_sign: fix invalid use of STL iterators.
[ginac.git] / ginac / utils.h
index 393c474f025f618785bcb3371f0f54a974571d38..e65bdae5b02cf1086a86cbddb77717b242e304c1 100644 (file)
@@ -128,7 +128,9 @@ int permutation_sign(It first, It last)
                                sign = -sign;
                        } else if (!(*other < *i))
                                return 0;
-                       --i; --other;
+                       --i;
+                       if (i != first)
+                               --other;
                }
                if (!swapped)
                        return sign;
@@ -147,7 +149,9 @@ int permutation_sign(It first, It last)
                                sign = -sign;
                        } else if (!(*i < *other))
                                return 0;
-                       ++i; ++other;
+                       ++i;
+                       if (i != last)
+                               ++other;
                }
                if (!swapped)
                        return sign;
@@ -181,7 +185,9 @@ int permutation_sign(It first, It last, Cmp comp, Swap swapit)
                                sign = -sign;
                        } else if (!comp(*other, *i))
                                return 0;
-                       --i; --other;
+                       --i;
+                       if (i != first)
+                               --other;
                }
                if (!swapped)
                        return sign;
@@ -200,7 +206,9 @@ int permutation_sign(It first, It last, Cmp comp, Swap swapit)
                                sign = -sign;
                        } else if (!comp(*i, *other))
                                return 0;
-                       ++i; ++other;
+                       ++i; 
+                       if (i != last)
+                               ++other;
                }
                if (!swapped)
                        return sign;
@@ -232,7 +240,9 @@ void shaker_sort(It first, It last, Cmp comp, Swap swapit)
                                flag = other;
                                swapped = true;
                        }
-                       --i; --other;
+                       --i;
+                       if (i != first)
+                               --other;
                }
                if (!swapped)
                        return;
@@ -249,7 +259,9 @@ void shaker_sort(It first, It last, Cmp comp, Swap swapit)
                                flag = other;
                                swapped = true;
                        }
-                       ++i; ++other;
+                       ++i;
+                       if (i != last)
+                               ++other;
                }
                if (!swapped)
                        return;