summaryrefslogtreecommitdiff
path: root/storage/ndb/src/old_files/rep/state/Interval.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/src/old_files/rep/state/Interval.hpp')
-rw-r--r--storage/ndb/src/old_files/rep/state/Interval.hpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/storage/ndb/src/old_files/rep/state/Interval.hpp b/storage/ndb/src/old_files/rep/state/Interval.hpp
new file mode 100644
index 00000000000..935adaf26b1
--- /dev/null
+++ b/storage/ndb/src/old_files/rep/state/Interval.hpp
@@ -0,0 +1,107 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef INTERVAL_HPP
+#define INTERVAL_HPP
+
+#include <NdbOut.hpp>
+#include <ndb_types.h>
+
+/**
+ * @class Interval
+ * @brief Represents an interval
+ */
+class Interval {
+public:
+ Interval();
+ Interval(Uint32, Uint32);
+
+ /**
+ * Getters of first and last
+ */
+ inline Uint32 first() const { return m_first; }
+ inline Uint32 last() const { return m_last; }
+
+ /**
+ * Check if interval is empty
+ */
+ bool isEmpty() const;
+ bool isEqual(Uint32 a, Uint32 b) const;
+ bool inInterval(Uint32 a) const;
+
+ /**
+ * Size of interval
+ */
+ Uint32 size() const {
+ return (!isEmpty()) ? m_last - m_first + 1 : 0;
+ }
+
+ /**
+ * Set interval
+ */
+ void set(Uint32 first, Uint32 last);
+ void set(const Interval i);
+
+ void setFirst(Uint32 first);
+ void setLast(Uint32 last);
+
+ /**
+ * Reduce the interval to only the n left elements of the
+ * interval. If the interval is shorter than n, then
+ * interval is not changed.
+ */
+ void onlyLeft(Uint32 n);
+
+ /**
+ * Reduce the interval to have at most the value n
+ * as the last value.
+ * This method can make the interval empty.
+ */
+ void onlyUpToValue(Uint32 n);
+
+ /**
+ * Print
+ */
+ void print() {
+ ndbout << "[" << m_first << "," << m_last << "]";
+ }
+
+ void normalize();
+private:
+ Uint32 m_first;
+ Uint32 m_last;
+};
+
+const Uint32 intervalMin = 0;
+const Uint32 intervalMax = 0xffffffff;
+const Interval emptyInterval(1, 0);
+const Interval universeInterval(intervalMin, intervalMax);
+
+/**
+ * @return true if intervals could be added
+ */
+bool intervalAdd(const Interval a, const Interval b, Interval * c);
+
+void intervalLeftMinus(const Interval a, const Interval b, Interval * c);
+
+void intervalCut(const Interval a, const Interval b, Interval * c);
+
+/**
+ * @return true if intervals are disjoint
+ */
+bool intervalDisjoint(const Interval a, const Interval b);
+
+#endif