using Microsoft.CodeAnalysis.CSharp; using Microsoft.EntityFrameworkCore; using System.Reflection.PortableExecutable; namespace ComiServ.Models; public class Truncated { public int Max { get; } public int Count { get; } public bool Complete { get; } public List Items { get; } public Truncated(int max, IEnumerable iter) { if (max <= 0) { throw new ArgumentOutOfRangeException(nameof(max), max, "must be greater than 0"); } Max = max; Items = iter.Take(max+1).ToList(); if (Items.Count <= max) { Complete = true; } else { Items.RemoveAt(max); Complete = false; } Count = Items.Count; } private Truncated(int max, bool complete, List items) { Max = max; Complete = complete; Count = items.Count; Items = items; } public static async Task> CreateAsync(int max, IQueryable iter) { if (max <= 0) { throw new ArgumentOutOfRangeException(nameof(max), max, "must be greater than 0"); } var items = await iter.Take(max+1).ToListAsync(); var complete = true; if (items.Count < max) { items.RemoveAt(max); complete = false; } return new(max, complete, items); } public static async Task> CreateAsync(int max, IAsyncEnumerable iter) { if (max <= 0) { throw new ArgumentOutOfRangeException(nameof(max), max, "must be greater than 0"); } List items = []; await foreach (T item in iter) { items.Add(item); if (items.Count > max) break; } var complete = true; if (items.Count <= max) { items.RemoveAt(max); complete = false; } return new Truncated(max, complete, items); } }