Sanitize index check
[libstick.git] / include / libstick-0.1 / simplicialcomplex.h
index 482e12d3edbcd13b46fe3f0f9eb2feee48562273..1695e25abc6fbe611bb7fa9bfc27e12a618c5f03 100644 (file)
@@ -117,10 +117,14 @@ class simplicial_complex {
 
                 /** Get i-th simplex in the simplex order. */
                 const simplex& get_simplex(index_type i) const {
-                    assert(i < size());
+                    assert(0 <= i && i < size());
                     return c.simplices[order.at(i)];
                 }
 
+                const simplcompltype& get_complex() const {
+                    return c;
+                }
+
                 /** Returns true iff the faces of simplex i are before i in this order. */
                 bool is_filtration() const {
                     assert(size() == c.size());
@@ -145,13 +149,22 @@ class simplicial_complex {
                     return is_filtration();
                 }
 
+                /** Randomize order. It has hardly any impact on runtime, but
+                 * it makes cycles "nicer" when the simplice's function values
+                 * are constant.
+                 * */
+                void randomize_order() {
+                    std::random_shuffle(order.begin(), order.end());
+                    restore_revorder_from_order();
+                }
+
                 /** Sort simplices such that is_monotone() gives true. This
                  * requires that the complex's is_monotone() gave true
                  * beforehand.*/
                 void make_monotone_filtration() {
                     assert(c.is_monotone());
 
-                    sort(order.begin(), order.end(), cmp_monotone_filtration(c));
+                    std::sort(order.begin(), order.end(), cmp_monotone_filtration(c));
                     restore_revorder_from_order();
 
                     assert(c.is_monotone());