You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.1 KiB
62 lines
2.1 KiB
/***************************************************************************
|
|
* Copyright (C) 2005-2006 Nicolas Hadacek <hadacek@kde.org> *
|
|
* *
|
|
* 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. *
|
|
***************************************************************************/
|
|
#ifndef RANGE_H
|
|
#define RANGE_H
|
|
|
|
#include "common/global/global.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
template <typename Type>
|
|
class GenericRange
|
|
{
|
|
public:
|
|
virtual ~GenericRange() {}
|
|
virtual bool isEmpty() const = 0;
|
|
bool contains(Type v) const { return !isEmpty() && v>=start && v<=end; }
|
|
|
|
Type start, end;
|
|
};
|
|
|
|
class Range : public GenericRange<uint>
|
|
{
|
|
public:
|
|
Range() { start = 0; end = 0; }
|
|
Range(uint s, uint e) { start = s; end = e; }
|
|
virtual bool isEmpty() const { return end<=start; }
|
|
};
|
|
|
|
template <typename Type>
|
|
inline TQDataStream &operator >>(TQDataStream &s, GenericRange<Type> &r) { s >> r.start >> r.end; return s; }
|
|
template <typename Type>
|
|
inline TQDataStream &operator <<(TQDataStream &s, const GenericRange<Type> &r) { s << r.start << r.end; return s; }
|
|
template <typename Type>
|
|
inline bool operator ==(const GenericRange<Type> &r1, const GenericRange<Type> &r2) { return ( r1.start==r2.start && r1.end==r2.end ); }
|
|
|
|
template <typename Type, typename RangeType>
|
|
class GenericRangeVector : public TQValueVector<RangeType>
|
|
{
|
|
public:
|
|
GenericRangeVector() {}
|
|
GenericRangeVector(const RangeType &range) { this->append(range); }
|
|
bool isEmpty() const {
|
|
uint nb = this->count();
|
|
for (uint i=0; i<nb; i++) if ( !this->at(i).isEmpty() ) return false;
|
|
return true;
|
|
}
|
|
bool contains(Type v) const {
|
|
uint nb = this->count();
|
|
for (uint i=0; i<nb; i++) if ( this->at(i).contains(v) ) return true;
|
|
return false;
|
|
}
|
|
};
|
|
|
|
typedef GenericRangeVector<uint, Range> RangeVector;
|
|
|
|
#endif
|