本文整理汇总了C#中DataObject.CompareTo方法的典型用法代码示例。如果您正苦于以下问题:C# DataObject.CompareTo方法的具体用法?C# DataObject.CompareTo怎么用?C# DataObject.CompareTo使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DataObject
的用法示例。
在下文中一共展示了DataObject.CompareTo方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: HighestSearch
/// <summary>
/// Searches for a given <see cref="DataObject"/> (<paramref name="ob"/>) in the
/// row list between the two bounds.
/// </summary>
/// <param name="ob"></param>
/// <param name="list"></param>
/// <param name="lower"></param>
/// <param name="higher"></param>
/// <remarks>
/// This returns the place to insert ob into the vector, it should not be used to
/// determine if <paramref name="ob"/> is in the list or not.
/// </remarks>
/// <returns>
/// This will return the highest row of the set of values that are equal to <paramref name="ob"/>.
/// </returns>
private long HighestSearch(DataObject ob, IList<long> list, long lower, long higher)
{
if ((higher - lower) <= 5) {
// Start from the bottom up until we find the highest val
for (long i = higher; i >= lower; --i) {
int res = ob.CompareTo(GetCellContents(list[(int)i]));
if (res >= 0)
return i + 1;
}
// Didn't find return lowest
return lower;
}
long mid = (lower + higher) / 2;
int compResult = ob.CompareTo(GetCellContents(list[(int)mid]));
if (compResult == 0)
// We know the bottom is between 'mid' and 'higher'
return HighestSearch(ob, list, mid, higher);
if (compResult < 0)
return HighestSearch(ob, list, lower, mid - 1);
return HighestSearch(ob, list, mid + 1, higher);
}
示例2: HighestSearch
private int HighestSearch(DataObject ob, IList<int> list, int lower, int higher)
{
if ((higher - lower) <= 5) {
// Start from the bottom up until we find the highest val
for (var i = higher; i >= lower; --i) {
int res = ob.CompareTo(GetValue(list[i]));
if (res >= 0)
return i + 1;
}
// Didn't find return lowest
return lower;
}
var mid = (lower + higher)/2;
int compResult = ob.CompareTo(GetValue(list[mid]));
if (compResult == 0)
// We know the bottom is between 'mid' and 'higher'
return HighestSearch(ob, list, mid, higher);
if (compResult < 0)
return HighestSearch(ob, list, lower, mid - 1);
return HighestSearch(ob, list, mid + 1, higher);
}
示例3: IntersectOn
private static IndexRange IntersectOn(IndexRange range, SqlExpressionType op, DataObject value, bool nullCheck)
{
var start = range.StartValue;
var startPosition = range.StartOffset;
var end = range.EndValue;
var endPosition = range.EndOffset;
bool inclusive = op == SqlExpressionType.Is ||
op == SqlExpressionType.Equal ||
op == SqlExpressionType.GreaterOrEqualThan ||
op == SqlExpressionType.SmallerOrEqualThan;
if (op == SqlExpressionType.Is ||
op == SqlExpressionType.Equal ||
op == SqlExpressionType.GreaterThan ||
op == SqlExpressionType.GreaterOrEqualThan) {
// With this operator, NULL values must return null.
if (nullCheck && value.IsNull) {
return IndexRange.Null;
}
if (start.Equals(IndexRange.FirstInSet)) {
start = value;
startPosition = inclusive ? RangeFieldOffset.FirstValue : RangeFieldOffset.AfterLastValue;
} else {
int c = value.CompareTo(start);
if ((c == 0 && startPosition == RangeFieldOffset.FirstValue) || c > 0) {
start = value;
startPosition = inclusive ? RangeFieldOffset.FirstValue : RangeFieldOffset.AfterLastValue;
}
}
}
if (op == SqlExpressionType.Is ||
op == SqlExpressionType.Equal ||
op == SqlExpressionType.SmallerThan ||
op == SqlExpressionType.SmallerOrEqualThan) {
// With this operator, NULL values must return null.
if (nullCheck && value.IsNull) {
return IndexRange.Null;
}
// If start is first in set, then we have to change it to after NULL
if (nullCheck && start.Equals(IndexRange.FirstInSet)) {
start = DataObject.Null();
startPosition = RangeFieldOffset.AfterLastValue;
}
if (end.Equals(IndexRange.LastInSet)) {
end = value;
endPosition = inclusive ? RangeFieldOffset.LastValue : RangeFieldOffset.BeforeFirstValue;
} else {
int c = value.CompareTo(end);
if ((c == 0 && endPosition == RangeFieldOffset.LastValue) || c < 0) {
end = value;
endPosition = inclusive ? RangeFieldOffset.LastValue : RangeFieldOffset.BeforeFirstValue;
}
}
}
// If start and end are not null types (if either are, then it means it
// is a placeholder value meaning start or end of set).
if (!start.Equals(IndexRange.FirstInSet) &&
!end.Equals(IndexRange.LastInSet)) {
// If start is higher than end, return null
int c = start.CompareTo(end);
if ((c == 0 && (startPosition == RangeFieldOffset.AfterLastValue ||
endPosition == RangeFieldOffset.BeforeFirstValue)) ||
c > 0) {
return IndexRange.Null;
}
}
// The new intersected range
return new IndexRange(startPosition, start, endPosition, end);
}
示例4: IntersectRange
/// <summary>
/// Intersects the given SelectableRange object with the given operator and
/// value constraint.
/// </summary>
/// <remarks>
/// <b>Note</b>: This does not work with the <c><></c> operator
/// which must be handled another way.
/// </remarks>
private static SelectableRange IntersectRange(SelectableRange range, Operator op, DataObject val, bool nullCheck)
{
DataObject start = range.Start;
RangePosition startPosition = range.StartPosition;
DataObject end = range.End;
RangePosition endPosition = range.EndPosition;
bool inclusive = op.IsEquivalent(Operator.Is) ||
op.IsEquivalent(Operator.Equal) ||
op.IsEquivalent(Operator.GreaterOrEqual) ||
op.IsEquivalent(Operator.SmallerOrEqual);
if (op.IsEquivalent(Operator.Is) ||
op.IsEquivalent(Operator.Equal) ||
op.IsEquivalent(Operator.Greater) ||
op.IsEquivalent(Operator.GreaterOrEqual)) {
// With this operator, NULL values must return null.
if (nullCheck && val.IsNull) {
return null;
}
if (start == SelectableRange.FirstInSet) {
start = val;
startPosition = inclusive
? RangePosition.FirstValue
: RangePosition.AfterLastValue;
} else {
int c = val.CompareTo(start);
if ((c == 0 && startPosition == RangePosition.FirstValue) || c > 0) {
start = val;
startPosition = inclusive
? RangePosition.FirstValue
: RangePosition.AfterLastValue;
}
}
}
if (op.IsEquivalent(Operator.Is) ||
op.IsEquivalent(Operator.Equal) ||
op.IsEquivalent(Operator.Smaller) ||
op.IsEquivalent(Operator.SmallerOrEqual)) {
// With this operator, NULL values must return null.
if (nullCheck && val.IsNull) {
return null;
}
// If start is first in set, then we have to change it to after NULL
if (nullCheck && start == SelectableRange.FirstInSet) {
start = DataObject.Null;
startPosition = RangePosition.AfterLastValue;
}
if (end == SelectableRange.LastInSet) {
end = val;
endPosition = inclusive
? RangePosition.LastValue
: RangePosition.BeforeFirstValue;
} else {
int c = val.CompareTo(end);
if ((c == 0 && endPosition == RangePosition.LastValue) || c < 0) {
end = val;
endPosition = inclusive
? RangePosition.LastValue
: RangePosition.BeforeFirstValue;
}
}
}
// If start and end are not null types (if either are, then it means it
// is a placeholder value meaning start or end of set).
if (start != SelectableRange.FirstInSet &&
end != SelectableRange.LastInSet) {
// If start is higher than end, return null
int c = start.CompareTo(end);
if ((c == 0 && (startPosition == RangePosition.AfterLastValue ||
endPosition == RangePosition.BeforeFirstValue)) ||
c > 0) {
return null;
}
}
// The new intersected range
return new SelectableRange(startPosition, start, endPosition, end);
}