<?xml version="1.0" encoding="UTF-8"?>

<!--|
    | Atom feed templated extracted from the Zola SSG builtin templates source code.
    | Modified to add support for a custom icon image.
    |
    | File copied at 2026-08-22, permalink:
    |   <https://github.com/getzola/zola/blob/5835ee8ea605ae7bc6a8dba28f032233a6c00b43/components/templates/src/builtins/atom.xml>.
    |
    | This file is licensed under the MIT Licence.
    | It is Copyright (c) 2026 Jorge Dobón Blanco, Vincent Prouillet
    | and contributors (see <https://github.com/getzola/zola/graphs/contributors>).
    |
    |-->

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    
    <icon>https://dobon.dev/processed_images/icon.ab5074eb75da7606.avif</icon>
    
    <title>
         
        Notes — 
         
        Jorge Dobón Blanco
    </title>
    <subtitle>Personal website about computer science, art, politics and other topics.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://dobon.dev/en/notes/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://dobon.dev/en/notes/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-10T00:00:00+00:00</updated>
    <id>https://dobon.dev/en/notes/atom.xml</id>
    <entry xml:lang="en">
        <title>Exploring Paginated Arrays</title>
        <published>2026-08-10T00:00:00+00:00</published>
        <updated>2026-08-10T00:00:00+00:00</updated>
        
        <author>
            <name>Jorge Dobón Blanco</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://dobon.dev/en/notes/exploring-paginated-arrays/"/>
        <id>https://dobon.dev/en/notes/exploring-paginated-arrays/</id>
        
        <content type="html" xml:base="https://dobon.dev/en/notes/exploring-paginated-arrays/">&lt;p&gt;&lt;em&gt;Throughout this text, I work exclusively with signed numbers.&lt;/em&gt;
&lt;em&gt;This is because one of my personal requirements is that my libraries must be compatible&lt;/em&gt;
&lt;em&gt;with the &lt;a rel=&quot;external&quot; href=&quot;https://learn.microsoft.com/es-es/dotnet/standard/language-independence&quot;&gt;CLS independence agreement&lt;/a&gt; described in the &lt;a rel=&quot;external&quot; href=&quot;https://ecma-international.org/publications-and-standards/standards/ecma-335/&quot;&gt;ECMA-335 CLI&lt;/a&gt; standard.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Recently, I was working on a personal project developed in C# that,
for various reasons and with the desire to experiment a bit, required an array
that could use a &lt;code&gt;long&lt;/code&gt; integer as its index, that is, with 64 bits of indexing.&lt;/p&gt;
&lt;p&gt;The .NET runtime environment only natively supports arrays with &lt;code&gt;int&lt;/code&gt; integers,32 bits, as indices.
This is not only a limitation of its standard library but also of its own &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)&quot;&gt;garbage collector (GC)&lt;/a&gt;;
unless a specific configuration is enabled, objects are limited to 2 GiB.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;gcAllowVeryLargeObjects&amp;gt;&lt;/code&gt; element&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On 64-bit platforms, enables arrays that are greater than 2 gigabytes (GB)
in total size.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F2F4F8; background-color: #000000;&quot; &gt;&lt;code data-lang=&quot;xml&quot; data-name=&quot;Company.Project.csproj&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;gcAllowVeryLargeObjects&lt;/span&gt;&lt;span&gt; enabled=&lt;/span&gt;&lt;span style=&quot;color: #BE95FF;&quot;&gt;&amp;quot;true|false&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;— Microsoft Learn (&lt;a rel=&quot;external&quot; href=&quot;https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcallowverylargeobjects-element&quot;&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In any case, creating an array of such a size wouldn&#39;t be ideal either,
as it would result in large monolithic blocks of managed memory that would be problematic
for the GC.&lt;/p&gt;
&lt;h2 id=&quot;paginated-arrays&quot;&gt;Paginated Arrays&lt;/h2&gt;
&lt;p&gt;I decided to use a resource that would solve the memory problems and,
in my mind, would also allow me to have 64-bit indexing: paginated arrays.&lt;/p&gt;
&lt;p&gt;A paginated array is a data structure in which the elements are stored in
fixed-size arrays called pages. My theory was that with enough pages,
I could simulate 64-bit indexing.&lt;/p&gt;
&lt;p&gt;My implementation consisted of a sparse list, a data structure that allows
access to non-contiguous indices by inserting null pointers into completely empty pages.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F2F4F8; background-color: #000000;&quot; &gt;&lt;code data-lang=&quot;csharp&quot; data-name=&quot;SparseList.cs&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; Redacted&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;Collections&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;internal&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; SparseList&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; pageSize&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T tombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; = default!&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 4&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; this&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; index&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 6&lt;/span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        get&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; Get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        set&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; Set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; value&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 9&lt;/span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    private readonly&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;SparseListPage&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;?&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; _pages&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;12&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; Get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; index&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;14&lt;/span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        var&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;pageIndex&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; elementIndex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; GetIndices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageIndex&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; &amp;gt;=&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _pages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;Count&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; tombstone&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _pages&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageIndex&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;19&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;page&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: #82CFFF;&quot;&gt; null&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; tombstone&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;20&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;21&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _pages&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageIndex&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;!&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;elementIndex&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;22&lt;/span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;23&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    private&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; void&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; Set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T value&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;25&lt;/span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;26&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        var&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;pageIndex&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; elementIndex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; GetIndices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;27&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; isValueTombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; Equals&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; tombstone&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;28&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; missingPages&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageIndex&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color: #82CFFF;&quot;&gt; 1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _pages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;Count&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;missingPages&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #82CFFF;&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; isValueTombstone&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;31&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;        for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #82CFFF;&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; missingPages&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;++&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;33&lt;/span&gt;&lt;span&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;34&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;            _pages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt;Add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #82CFFF;&quot;&gt;null&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;35&lt;/span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;36&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;37&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;        _pages&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageIndex&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; ??= new&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; SparseListPage&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageSize&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; tombstone&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;38&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        var&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; page&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _pages&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageIndex&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;!&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;39&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;Count&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: #82CFFF;&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; isValueTombstone&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;41&lt;/span&gt;&lt;span&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;42&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;            _pages&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;pageIndex&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #82CFFF;&quot;&gt; null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;43&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;            return&lt;/span&gt;&lt;span&gt;;   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;44&lt;/span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;45&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;46&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;        page&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;elementIndex&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; value&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;47&lt;/span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;48&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;49&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    private&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; pageIndex&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; elementIndex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; GetIndices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; index&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;50&lt;/span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;51&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;        return&lt;/span&gt;&lt;span&gt; ((&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;int&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; pageSize&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;int&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; pageSize&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;52&lt;/span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;53&lt;/span&gt;&lt;span&gt;}⏎&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F2F4F8; background-color: #000000;&quot; &gt;&lt;code data-lang=&quot;csharp&quot; data-name=&quot;SparseListPage.cs&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; Redacted&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;Collections&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;internal&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; SparseListPage&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 4&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; Size&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _size&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; Count&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 7&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; this&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; index&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt; 9&lt;/span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        get&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _data&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;11&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;        set&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;12&lt;/span&gt;&lt;span&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;            var&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; isNewValueTombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; Equals&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _tombstone&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;font-style: italic;&quot;&gt;            var&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; isStoredValueTombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; Equals&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;_data&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _tombstone&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;15&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;            if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;isNewValueTombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; isStoredValueTombstone&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;17&lt;/span&gt;&lt;span&gt;            {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;                Count&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;19&lt;/span&gt;&lt;span&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;            else if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;isNewValueTombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; &amp;amp;&amp;amp; !&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;isStoredValueTombstone&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;21&lt;/span&gt;&lt;span&gt;            {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;                Count&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;--&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;23&lt;/span&gt;&lt;span&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;24&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;25&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;            _data&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;index&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; value&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;26&lt;/span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;27&lt;/span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;28&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;29&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    private readonly&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; _size&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    private readonly&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T _tombstone&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;31&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    private readonly&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T&lt;/span&gt;&lt;span&gt;[]&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; _data&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;33&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;34&lt;/span&gt;&lt;span style=&quot;color: #33B1FF;&quot;&gt;    public&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt; SparseListPage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #78A9FF;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; size&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T tombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; = default!&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;35&lt;/span&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;36&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;        _size&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; size&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;37&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;        _tombstone&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; tombstone&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;38&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;39&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;        _data&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt; = new&lt;/span&gt;&lt;span style=&quot;color: #DDE1E6;&quot;&gt; T&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;size&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;        Array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #FF7EB6;font-weight: bold;&quot;&gt;Fill&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt;_data&lt;/span&gt;&lt;span style=&quot;color: #3DDBD9;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #FFFFFF;&quot;&gt; _tombstone&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;41&lt;/span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: #393939;&quot;&gt;42&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With my implementation working and passing my unit tests,
I set about bringing these structures to the real world. I dedicated a few hours to my project,
I ran &lt;code&gt;dotnet run&lt;/code&gt; in the terminal and...&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F2F4F8; background-color: #000000;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter &amp;#39;index&amp;#39;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    at System.Collections.Generic.List`1.get_Item(Int32 index)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    at Redacted.Collections.SparseSet.SparseList`1.Get(Int64 index) in [...]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    at Redacted.Collections.SparseSet.SparseList`1.get_Item(Int64 index) in [...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At that moment I was surprised. It turns out that when trying to use the highest possible index,
&lt;code&gt;long.MaxValue&lt;/code&gt;, that is, with the number 9,223,372,036,854,775,807, the &lt;code&gt;GetIndices()&lt;/code&gt; method
returns the value -1 as the page index.&lt;/p&gt;
&lt;p&gt;This is because the &lt;code&gt;index / pageSize&lt;/code&gt; operation does not guarantee that it will be
a value less than or equal to &lt;code&gt;int.maxValue&lt;/code&gt;, that is, the number 2,147,483,648.&lt;/p&gt;
&lt;p&gt;This makes sense; it&#39;s not hard to see that any &lt;code&gt;long / int&lt;/code&gt; operation doesn&#39;t guarantee this.&lt;/p&gt;
&lt;h2 id=&quot;reason&quot;&gt;Reason&lt;/h2&gt;
&lt;p&gt;The reason, which disproves any possibility that my theory was true, is straightforward.&lt;/p&gt;
&lt;p&gt;An array with 32-bit indices can store up to $ 2^{31} $ elements.
This implies that each page can store that many elements;
and since pointers to pages are also stored in an array, there can be up to $ 2^{31} $ pages.&lt;/p&gt;
&lt;p&gt;This means there can be up to $ 2^{31} * 2^{31} = 2^{31 + 31} = 2^{62} $
elements in total in a paginated array, but an array with 64-bit indices can
accumulate up to $ 2^{63} $ elements. There are $ 2^{63} - 2^{62} $ inaccessible elements;
that is, the last $ 4,611,686,018,427,387,904 $ indices of the array are not indexable.&lt;/p&gt;
&lt;h3 id=&quot;what-if-we-removed-the-sign&quot;&gt;What if we removed the sign?&lt;/h3&gt;
&lt;p&gt;If we encountered a language that allowed 32-bit unsigned indices,
up to $ 2^{32} $ elements could be stored; using the same reasoning as before,
we could have up to $ 2^{32} $ pages.&lt;/p&gt;
&lt;p&gt;This would allow us to reach $ 2^{32} * 2^{32} = 2^{32 + 32} = 2^{64} $ elements
in total when using a paginated array. It&#39;s interesting that in this hypothetical language,
a paginated array could store not only all the elements of a 64-bit signed index
array ($ 2^{63} $ elements) but also of a 64-bit unsigned index array ($ 2^{64} $ elements).&lt;/p&gt;
&lt;h3 id=&quot;proof&quot;&gt;Proof&lt;/h3&gt;
&lt;p&gt;Given the previous results, it&#39;s natural to be interested in finding a mathematical proof:&lt;/p&gt;
&lt;p&gt;We set up $a \gt b$, where $a \in \mathbb{N^+}$ is the number of bits of the
indices of the array we want to replicate, and $b \in \mathbb{N^+}$ is the number
of bits of the indices of the arrays that make up our paginated array (the replica).&lt;/p&gt;
&lt;p&gt;For the replica to be valid, all elements of the original array must be able to
be included in the replica:&lt;/p&gt;
&lt;p&gt;$$ 2^a = 2^b * 2^b \implies 2^a = 2^{b + b} \implies a = 2b \implies a / 2 = b $$&lt;/p&gt;
&lt;p&gt;And since we are working with integer arithmetic, the expression $a / 2$
only exists if $a \bmod 2 = 0$;
In other words, &lt;u&gt;$ a $ must be an even number&lt;/u&gt; $ \blacksquare $.&lt;/p&gt;
&lt;h2 id=&quot;alternatives&quot;&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;I doubt there are alternatives to cover this specific case; most systems
where such a need might arise are capable of using 64-bit indices.&lt;/p&gt;
&lt;p&gt;This attempt of mine has turned out to be little more than a curious experiment
that I wanted to share.&lt;/p&gt;
</content>
        
    </entry>
</feed>