1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
#ifndef RANGE_LIST_H
#define RANGE_LIST_H
#define RANGE_LIST_HEADER_ID "$Id: RangeList.h,v 1.4 2005/03/07 18:58:08 rcook Exp $"
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
void PrintVersion(void);
struct range {
range(long range_start, long range_end) { start = range_start; end = range_end; }
long start, end;
void Print(void) {
cout << "range: (" << start << ", " << end << ")" << endl;
}
bool operator ==(range &r) const { return r.start == start && r.end == end;}
bool Contains(long num) const { return num >= start && num <= end;}
bool operator < (const range &r) const { return start < r.start; }
bool operator < (long num) const { return num > end; }
bool operator > (long num) const { return num < start; }
};
// for templated searches:
bool operator < (long num, const range &r) ;
bool operator > (long num, const range &r) ;
bool operator ==(long num, const range &r);
bool operator ==(const range &r, long num) ;
struct RangeList {
RangeList(char *filterfile, char verbosity=0) {Init(verbose); Parse(filterfile);}
RangeList(){Init(0);} // ok to not give a file to start with
void Init(int verbose=0) { verbose = verbose; ranges.clear(); }
void Parse(char *filterfile) ;//open and parse the filter file; add ranges therein to ranges, throw exception if problem
void AddRange(long start, long end);
bool InRange(long num) { return binary_search(ranges.begin(), ranges.end(), num); }
void Print(void);
void Sort(void){ sort(ranges.begin(), ranges.end());}
void Unique(void) {unique(ranges.begin(), ranges.end());}
void GetOneRange(ifstream &filterfile); //throw exception if parse error
char verbose;
vector<range> ranges;
};
#endif
|