Interval.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef INTERVAL_HPP
  14. #define INTERVAL_HPP
  15. #include <NdbOut.hpp>
  16. #include <ndb_types.h>
  17. /**
  18.  * @class Interval
  19.  * @brief Represents an interval
  20.  */
  21. class Interval {
  22. public:
  23.   Interval();
  24.   Interval(Uint32, Uint32);
  25.   /**
  26.    *  Getters of first and last
  27.    */
  28.   inline Uint32 first() const { return m_first; }
  29.   inline Uint32 last() const { return m_last; }
  30.   /** 
  31.    *  Check if interval is empty
  32.    */
  33.   bool isEmpty() const;
  34.   bool isEqual(Uint32 a, Uint32 b) const;
  35.   bool inInterval(Uint32 a) const;
  36.   /**
  37.    *  Size of interval
  38.    */
  39.   Uint32 size() const { 
  40.     return (!isEmpty()) ? m_last - m_first + 1 : 0; 
  41.   }
  42.   
  43.   /**
  44.    *  Set interval
  45.    */
  46.   void set(Uint32 first, Uint32 last);
  47.   void set(const Interval i);
  48.   void setFirst(Uint32 first);
  49.   void setLast(Uint32 last);
  50.   /**
  51.    *  Reduce the interval to only the n left elements of the 
  52.    *  interval.  If the interval is shorter than n, then 
  53.    *  interval is not changed.
  54.    */
  55.   void onlyLeft(Uint32 n);
  56.   /**
  57.    *  Reduce the interval to have at most the value n 
  58.    *  as the last value.
  59.    *  This method can make the interval empty.
  60.    */
  61.   void onlyUpToValue(Uint32 n);
  62.   /**
  63.    *  Print
  64.    */
  65.   void print() {
  66.     ndbout << "[" << m_first << "," << m_last << "]";
  67.   }
  68.   void normalize();
  69. private:
  70.   Uint32 m_first;
  71.   Uint32 m_last;
  72. };
  73. const Uint32 intervalMin = 0;
  74. const Uint32 intervalMax = 0xffffffff;
  75. const Interval emptyInterval(1, 0);
  76. const Interval universeInterval(intervalMin, intervalMax);
  77. /**
  78.  *  @return true if intervals could be added
  79.  */
  80. bool intervalAdd(const Interval a, const Interval b, Interval * c);
  81. void intervalLeftMinus(const Interval a, const Interval b, Interval * c);
  82. void intervalCut(const Interval a, const Interval b, Interval * c);
  83. /**
  84.  *  @return true if intervals are disjoint
  85.  */
  86. bool intervalDisjoint(const Interval a, const Interval b);
  87. #endif