using System;
namespace InABox.Core
{
public enum CoreRangeType
{
///
/// Get specific range in the database query.
///
Database,
///
/// Get everything from the database, but only return a small number to the client.
///
Paged
}
public class CoreRange : ISerializeBinary
{
public static CoreRange All => new CoreRange()
{
Type = CoreRangeType.Database,
Offset = 0,
Limit = int.MaxValue
};
public static CoreRange Database(int limit) => new CoreRange()
{
Type = CoreRangeType.Database,
Offset = 0,
Limit = limit
};
public static CoreRange Paged(int pagesize) => new CoreRange()
{
Type = CoreRangeType.Paged,
Offset = 0,
Limit = pagesize
};
public CoreRange Next()
{
Offset = (int)Math.Min((long)int.MaxValue, (long)Offset + (long)Limit);
return this;
}
public CoreRangeType Type { get; set; }
public int Offset { get; set; }
public int Limit { get; set; }
public void SerializeBinary(CoreBinaryWriter writer)
{
writer.Write((byte)Type);
writer.Write(Offset);
writer.Write(Limit);
}
public void DeserializeBinary(CoreBinaryReader reader)
{
Type = (CoreRangeType)reader.ReadByte();
Offset = reader.ReadInt32();
Limit = reader.ReadInt32();
}
}
}