DavidNorgren

Untitled

May 16th, 2014
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. ############################################ IntervalIntSet.h ########################################
  2. #pragma once
  3. #include <vector>
  4. #include "IntSet.h"
  5. #include "Interval.h"
  6.  
  7. class IntervalIntSet: public IntSet
  8. {
  9. public:
  10.     IntervalIntSet() { count = 0; lastValue = 0; }
  11.     bool Contains(int elem);
  12.     void Add(int elem);
  13.     IntSet* Union(IntSet& other);
  14.     void Rewind() { iterator = 0; iteratorInterval = 0; iteratorIntervalStart = 0; }
  15.     bool IsEnd() { return (iterator == count); }
  16.     int Current();
  17.     void MoveNext();
  18. private:
  19.     std::vector<Interval> interval;
  20.     int lastValue, iterator, iteratorInterval, iteratorIntervalStart;
  21. };
  22.  
  23. ############################################ IntervalIntSet.cpp ########################################
  24. #include "IntervalIntSet.h"
  25.  
  26. bool IntervalIntSet::Contains(int elem) {
  27.     for (unsigned int i = 0; i < interval.size(); i++) {
  28.         if (elem >= interval[i].startValue && elem <= interval[i].endValue) return true;
  29.     }
  30.     return false;
  31. }
  32.  
  33. void IntervalIntSet::Add(int elem) {
  34.     if (interval.size() == 0 || elem != lastValue + 1) { // Start new interval
  35.         Interval newInterval;
  36.         newInterval.startValue = elem;
  37.         interval.push_back(newInterval);
  38.     }
  39.     interval[interval.size() - 1].endValue = elem;
  40.     lastValue = elem;
  41.     count++;
  42. }
  43.  
  44. IntSet* IntervalIntSet::Union(IntSet& other) {
  45.     return 0;//new IntSet();
  46. }
  47.  
  48. int IntervalIntSet::Current() {
  49.     return interval[iteratorInterval].startValue + (iterator - iteratorIntervalStart);
  50. }
  51.  
  52. void IntervalIntSet::MoveNext() {
  53.     int currentIntervalLength = interval[iteratorInterval].endValue - interval[iteratorInterval].startValue;
  54.     iterator++;
  55.     if (iterator - iteratorIntervalStart > currentIntervalLength) { // Stepped beyond current interval
  56.         iteratorInterval++;
  57.         iteratorIntervalStart += currentIntervalLength + 1;
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment