123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System;
- namespace InABox.Core
- {
- public enum CoreRangeType
- {
- /// <summary>
- /// Get specific range in the database query.
- /// </summary>
- Database,
- /// <summary>
- /// Get everything from the database, but only return a small number to the client.
- /// </summary>
- 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();
- }
- }
- }
|