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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#pragma once
#include "Core/StrBuf.h"
#include "Compiler/Syntax/TokenColor.h"
namespace storm {
namespace server {
STORM_PKG(core.lang.server);
/**
* Represents a range in a file.
*/
class Range {
STORM_VALUE;
public:
STORM_CTOR Range();
STORM_CTOR Range(Nat from, Nat to);
Nat from;
Nat to;
// Is this range empty?
inline Bool STORM_FN empty() const { return from == to; }
// Does this range intersect another range?
Bool STORM_FN intersects(Range other) const;
// Does this range contain another point?
Bool STORM_FN contains(Nat pt) const;
// Distance from this range to a point.
Nat STORM_FN distance(Nat pt) const;
// Size of this range.
inline Nat STORM_FN count() const { return to - from; }
// Deep copy.
void STORM_FN deepCopy(CloneEnv *env);
// Equality.
inline Bool STORM_FN operator ==(const Range &o) const {
return to == o.to && from == o.from;
}
inline Bool STORM_FN operator !=(const Range &o) const {
return !(*this == o);
}
// Output.
void STORM_FN toS(StrBuf *to) const;
};
wostream &operator <<(wostream &to, Range r);
// Compute the union of two ranges.
Range STORM_FN merge(Range a, Range b);
/**
* Represents a a region to be colored in a file.
*/
class ColoredRange {
STORM_VALUE;
public:
STORM_CTOR ColoredRange(Range r, syntax::TokenColor c);
Range range;
// TODO: Use strings or symbols here?
syntax::TokenColor color;
// Output.
void STORM_FN toS(StrBuf *to) const;
};
}
}
|