summaryrefslogtreecommitdiff
path: root/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h')
-rw-r--r--src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h244
1 files changed, 108 insertions, 136 deletions
diff --git a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h
index c13d96e1..266ce051 100644
--- a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h
+++ b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h
@@ -20,152 +20,124 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#pragma once
+#ifndef BITMAP_CUBICAL_COMPLEX_COUNTER_H_
+#define BITMAP_CUBICAL_COMPLEX_COUNTER_H_
#include <iostream>
#include <vector>
-using namespace std;
+namespace Gudhi {
-namespace Gudhi
-{
-
-namespace Cubical_complex
-{
+namespace Cubical_complex {
/**
-* This is an implementation of a counter being a vector of integers.
-* The constructor of the class takes as an input two vectors W and V.
-* It assumes that W < V coordinatewise.
-* If the initial counter W is not specified, it is assumed to be vector of zeros.
-* The class allows to iterate between W and V by using increment() function.
-* The increment() function returns a bool value.
-* The current counter reach the end counter V if the value returned by the increment function is FALSE.
-* This class is needed for the implementation of a bitmapCubicalComplex.
-**/
-
-class counter
-{
-public:
- /**
- * Constructor of a counter class. It takes only the parameter which is the end value of the counter.
- * The default beginning value is a vector of the same length as the endd, filled-in with zeros.
- **/
- counter(const std::vector<unsigned>& endd): begin(endd.size(),0), end(endd), current(endd.size(),0){}
- //counter(std::vector< int >& endd)
- //{
- // for ( size_t i = 0 ; i != endd.size() ; ++i )
- // {
- // this->current.push_back(0);
- // this->begin.push_back(0);
- // this->end.push_back( endd[i] );
- // }
- //}
-
-
- /**
- * Constructor of a counter class. It takes as the input beginn and end vector.
- * It assumes that begin vector is lexicographically below the end vector.
- **/
- counter(const std::vector< unsigned >& beginn , const std::vector< unsigned >& endd):begin(beginn),end(endd),current(endd.size(),0)
- {
- if ( beginn.size() != endd.size() )
- throw "In constructor of a counter, begin and end vectors do not have the same size. Program terminate";
- }
-
- /**
- * Function to increment the counter. If the value returned by the function is true,
- * then the incrementation process was successful.
- * If the value of the function is false, that means, that the counter have reached its end-value.
- **/
- bool increment()
- {
- size_t i = 0;
- while( (i != this->end.size()) && (this->current[i] == this->end[i]) )
- {
- ++i;
- }
-
- if ( i == this->end.size() )return false;
- ++this->current[i];
- for ( size_t j = 0 ; j != i ; ++j )
- {
- this->current[j] = this->begin[j];
- }
- return true;
- }
-
- /**
- * Function to check if we are at the end of counter.
- **/
- bool isFinal()
- {
- for ( size_t i = 0 ; i != this->current.size() ; ++i )
- {
- if ( this->current[i] == this->end[i] )return true;
- }
- return false;
- }
-
- /**
- * Function required in the implementation of bitmapCubicalComplexWPeriodicBoundaryCondition.
- * Its aim is to find an counter corresponding to the element the following
- * boundary element is identified with when periodic boundary conditions are imposed.
- **/
- std::vector< unsigned > find_opposite( const std::vector< bool >& directionsForPeriodicBCond )
- {
- std::vector< unsigned > result;
- for ( size_t i = 0 ; i != this->current.size() ; ++i )
- {
- if ( (this->current[i] == this->end[i]) && (directionsForPeriodicBCond[i] == true) )
- {
- result.push_back( this->begin[i] );
- }
- else
- {
- result.push_back( this->current[i] );
- }
- }
- return result;
+ * This is an implementation of a counter being a vector of integers.
+ * The constructor of the class takes as an input two vectors W and V.
+ * It assumes that W < V coordinatewise.
+ * If the initial counter W is not specified, it is assumed to be vector of zeros.
+ * The class allows to iterate between W and V by using increment() function.
+ * The increment() function returns a bool value.
+ * The current counter reach the end counter V if the value returned by the increment function is FALSE.
+ * This class is needed for the implementation of a bitmapCubicalComplex.
+ **/
+
+class counter {
+ public:
+ /**
+ * Constructor of a counter class. It takes only the parameter which is the end value of the counter.
+ * The default beginning value is a vector of the same length as the endd, filled-in with zeros.
+ **/
+ counter(const std::vector<unsigned>& endd) : begin(endd.size(), 0), end(endd), current(endd.size(), 0) { }
+
+ /**
+ * Constructor of a counter class. It takes as the input beginn and end vector.
+ * It assumes that begin vector is lexicographically below the end vector.
+ **/
+ counter(const std::vector< unsigned >& beginn, const std::vector< unsigned >& endd) : begin(beginn), end(endd), current(endd.size(), 0) {
+ if (beginn.size() != endd.size())
+ throw "In constructor of a counter, begin and end vectors do not have the same size. Program terminate";
+ }
+
+ /**
+ * Function to increment the counter. If the value returned by the function is true,
+ * then the incrementation process was successful.
+ * If the value of the function is false, that means, that the counter have reached its end-value.
+ **/
+ bool increment() {
+ size_t i = 0;
+ while ((i != this->end.size()) && (this->current[i] == this->end[i])) {
+ ++i;
}
- /**
- * Function checking at which positions the current value of a counter is the final value of the counter.
- **/
- std::vector< bool > directions_of_finals()
- {
- std::vector< bool > result;
- for ( size_t i = 0 ; i != this->current.size() ; ++i )
- {
- if ( this->current[i] == this->end[i] )
- {
- result.push_back( true );
- }
- else
- {
- result.push_back( false );
- }
- }
- return result;
+ if (i == this->end.size())return false;
+ ++this->current[i];
+ for (size_t j = 0; j != i; ++j) {
+ this->current[j] = this->begin[j];
}
-
- /**
- * Function to write counter to the stream.
- **/
- friend std::ostream& operator<<(std::ostream& out , const counter& c )
- {
- //cerr << "c.current.size() : " << c.current.size() << endl;
- for ( size_t i = 0 ; i != c.current.size() ; ++i )
- {
- out << c.current[i] << " ";
- }
- return out;
+ return true;
+ }
+
+ /**
+ * Function to check if we are at the end of counter.
+ **/
+ bool isFinal() {
+ for (size_t i = 0; i != this->current.size(); ++i) {
+ if (this->current[i] == this->end[i])return true;
+ }
+ return false;
+ }
+
+ /**
+ * Function required in the implementation of bitmapCubicalComplexWPeriodicBoundaryCondition.
+ * Its aim is to find an counter corresponding to the element the following
+ * boundary element is identified with when periodic boundary conditions are imposed.
+ **/
+ std::vector< unsigned > find_opposite(const std::vector< bool >& directionsForPeriodicBCond) {
+ std::vector< unsigned > result;
+ for (size_t i = 0; i != this->current.size(); ++i) {
+ if ((this->current[i] == this->end[i]) && (directionsForPeriodicBCond[i] == true)) {
+ result.push_back(this->begin[i]);
+ } else {
+ result.push_back(this->current[i]);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Function checking at which positions the current value of a counter is the final value of the counter.
+ **/
+ std::vector< bool > directions_of_finals() {
+ std::vector< bool > result;
+ for (size_t i = 0; i != this->current.size(); ++i) {
+ if (this->current[i] == this->end[i]) {
+ result.push_back(true);
+ } else {
+ result.push_back(false);
+ }
}
-private:
- std::vector< unsigned > begin;
- std::vector< unsigned > end;
- std::vector< unsigned > current;
+ return result;
+ }
+
+ /**
+ * Function to write counter to the stream.
+ **/
+ friend std::ostream& operator<<(std::ostream& out, const counter& c) {
+ // std::cerr << "c.current.size() : " << c.current.size() << endl;
+ for (size_t i = 0; i != c.current.size(); ++i) {
+ out << c.current[i] << " ";
+ }
+ return out;
+ }
+
+ private:
+ std::vector< unsigned > begin;
+ std::vector< unsigned > end;
+ std::vector< unsigned > current;
};
-}
-} \ No newline at end of file
+} // namespace Cubical_complex
+
+} // namespace Gudhi
+
+#endif // BITMAP_CUBICAL_COMPLEX_COUNTER_H_