1 #ifndef FILESEQ_RANGES_P_H_
2 #define FILESEQ_RANGES_P_H_
24 void reset(
const Range* range );
38 bool isValid()
const {
return m_range != NULL; }
61 Range(
long start,
long end,
long step=0);
66 size_t length()
const;
69 long start()
const {
return m_start; }
80 long step()
const {
return m_step; }
83 long min()
const {
return (start() < end() ? start() : end()); }
86 long max()
const {
return (start() > end() ? start() : end()); }
90 bool contains(
long value)
const;
96 long value(
size_t idx,
Status* ok=NULL)
const;
102 ssize_t index(
long value)
const;
111 std::string string()
const;
113 operator std::string()
const {
return string(); }
115 friend std::ostream& operator<< (std::ostream& stream,
const Range& fs) {
116 stream << fs.string();
125 long closestInRange(
long value,
long start,
long end,
long step=0)
const;
132 mutable long m_cachedEnd;
133 mutable bool m_isEndCached;
135 mutable size_t m_cachedSize;
136 mutable bool m_isSizeCached;
147 void reset(
const Ranges* ranges );
162 bool isValid()
const {
return m_ranges != NULL; }
198 swap(first.m_blocks, second.m_blocks);
203 std::string string()
const;
206 size_t length()
const;
224 void append(
long start,
long end,
long step=0) {
225 m_blocks.push_back(
new Range(start, end, step));
231 void appendUnique(
long start,
long end,
long step=0);
235 bool contains(
long value)
const;
240 long value(
size_t idx,
Status* ok=NULL)
const;
246 ssize_t index(
long value)
const;
258 void inverted(
Ranges &out)
const { normalized(out,
true); }
262 void normalized(
Ranges &out)
const { normalized(out,
false); }
271 void normalized(
Ranges &outRanges,
bool invert)
const;
275 const Range* rangeAt(
size_t idx)
const {
276 return (idx >= m_blocks.size()) ? NULL : m_blocks[idx];
279 typedef std::vector<Range*> Blocks;