<?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="es">
    
    <icon>https://dobon.dev/processed_images/icon.ab5074eb75da7606.avif</icon>
    
    <title>
         
        Notas — 
         
        Jorge Dobón Blanco
    </title>
    <subtitle>Sitio web personal sobre informática, arte, política y otros temas.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://dobon.dev/es/notes/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://dobon.dev/es/notes/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-14T00:00:00+00:00</updated>
    <id>https://dobon.dev/es/notes/atom.xml</id>
    <entry xml:lang="es">
        <title>Explorando los arrays paginados</title>
        <published>2026-08-10T00:00:00+00:00</published>
        <updated>2026-08-14T00:00:00+00:00</updated>
        
        <author>
            <name>Jorge Dobón Blanco</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://dobon.dev/es/notes/exploring-paginated-arrays/"/>
        <id>https://dobon.dev/es/notes/exploring-paginated-arrays/</id>
        
        <content type="html" xml:base="https://dobon.dev/es/notes/exploring-paginated-arrays/">&lt;p&gt;&lt;em&gt;A lo largo de este texto se trabaja únicamente con números con signo,&lt;/em&gt;
&lt;em&gt;esto es debido a que uno de mis requisitos personales es que mis librerías&lt;/em&gt;
&lt;em&gt;sea compatible con &lt;a rel=&quot;external&quot; href=&quot;https://learn.microsoft.com/es-es/dotnet/standard/language-independence&quot;&gt;el acuerdo de independencia CLS&lt;/a&gt; descrito en&lt;/em&gt;
&lt;em&gt;el estándar &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;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Recientemente, me encontraba trabajando un proyecto personal desarrollado en C#
que por diversas razones, y con el afán de experimentar un poco, necesitaba
de un &lt;em&gt;array&lt;/em&gt; que pudiera tomar como índice un entero &lt;code&gt;long&lt;/code&gt;, es decir,
con 64 bits de indexación.&lt;/p&gt;
&lt;p&gt;El entorno de ejecución .NET solo soporta nativamente &lt;em&gt;arrays&lt;/em&gt; con enteros &lt;code&gt;int&lt;/code&gt;,
32 bits, como índices. Esto no solo se trata de una limitación de su librería
estándar sino de su propio &lt;a rel=&quot;external&quot; href=&quot;https://es.wikipedia.org/wiki/Recolector_de_basura&quot;&gt;recolector de basura (&lt;em&gt;GC&lt;/em&gt;)&lt;/a&gt;; a menos que se active
una configuración en concreto, los objetos se encuentran limitados a 2 GiB.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Elemento &lt;code&gt;&amp;lt;gcAllowVeryLargeObjects&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En plataformas de 64 bits, habilita matrices que tienen un tamaño total
de más de 2 gigabytes (GB).&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;span class=&quot;giallo-l&quot;&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/es-es/dotnet/framework/configure-apps/file-schema/runtime/gcallowverylargeobjects-element&quot;&gt;fuente&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En todo caso, crear un &lt;em&gt;array&lt;/em&gt; de tal tamaño tampoco sería ideal, pues supondría
la aparición grandes monolíticos bloques de memoria manejada que serían problemáticos
para el &lt;em&gt;GC&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;arrays-paginados&quot;&gt;&lt;em&gt;Arrays&lt;/em&gt; paginados&lt;/h2&gt;
&lt;p&gt;Decidí acudir a un recurso que solventaría los problemas de memoria y que,
en mi cabeza, también me permitiría tener una indexación de 64 bits, los &lt;em&gt;arrays&lt;/em&gt;
paginados.&lt;/p&gt;
&lt;p&gt;Un &lt;em&gt;array&lt;/em&gt; paginado se trata de una estructura de datos en la que los elementos
se almacenan en &lt;em&gt;arrays&lt;/em&gt; de tamaño fijo denominados páginas. Mi teoría consistía
en que con la suficiente cantidad de páginas podría simular una indexación
de 64 bits.&lt;/p&gt;
&lt;p&gt;Mi implementación consistía en una &lt;em&gt;sparse list&lt;/em&gt;, una estructura de datos que permite
el acceso a índices discontinuos introduciendo punteros nulos en aquellas páginas
completamente vacías.&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;Con mi implementación funcionando y respondiendo correctamente a mis tests unitarios
me dispuse a llevar estas estructuras al mundo real. Le dedico unas horas a mi proyecto,
ejecuto &lt;code&gt;dotnet run&lt;/code&gt; en la terminal y...&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;En ese momento me sorprendió, resulta que al intentar usar el índice más alto posible,
&lt;code&gt;long.MaxValue&lt;/code&gt;, es decir, con el número 9.223.372.036.854.775.807, el método &lt;code&gt;GetIndices()&lt;/code&gt;
devuelve el valor -1 como índice de página.&lt;/p&gt;
&lt;p&gt;Esto es debído a que la operación &lt;code&gt;index / pageSize&lt;/code&gt; no garantiza que sea
un valor menor o igual a &lt;code&gt;int.maxValue&lt;/code&gt;, es decir, el número 2.147.483.648.
Esto tiene sentido, no es difícil ver que toda operación &lt;code&gt;long / int&lt;/code&gt; no garantiza
esto.&lt;/p&gt;
&lt;h2 id=&quot;justificacion&quot;&gt;Justificación&lt;/h2&gt;
&lt;p&gt;La razón, que rompe cualquier posibilidad de que mi teoría fuese cierta,
es sencilla.&lt;/p&gt;
&lt;p&gt;Un &lt;em&gt;array&lt;/em&gt; con índices de 32 bits puede almacenar hasta $ 2^{31} $ elementos, esto
implica que cada página puede almacenar dicha cantidad; y dado que los punteros
hacia las páginas también se almacenan en un &lt;em&gt;array&lt;/em&gt;, puede haber hasta $ 2^{31} $ páginas.&lt;/p&gt;
&lt;p&gt;Es significa que puede haber hasta $ 2^{31} * 2^{31} = 2^{31 + 31} = 2^{62} $ elementos
en total en un &lt;em&gt;array&lt;/em&gt; paginado, pero un &lt;em&gt;array&lt;/em&gt; con índices de 64 bits puede
acumular hasta $ 2^{63} $ elementos. Hay $ 2^{63} - 2^{62} $ elementos inaccesibles,
es decir, los últimos $ 4.611.686.018.427.387.904 $ índices del &lt;em&gt;array&lt;/em&gt; no son
&lt;em&gt;indexables&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;y-si-quitaramos-el-signo&quot;&gt;¿Y si quitáramos el signo?&lt;/h3&gt;
&lt;p&gt;Si nos encontrásemos con un lenguaje que permitiese índices de 32 bits sin signo,
se podrían almacenar hasta $ 2^{32} $ elementos; con el mismo razonamiento de antes,
podríamos tener hasta $ 2^{32} $ páginas.&lt;/p&gt;
&lt;p&gt;Esto nos permitiría llegar hasta los $ 2^{32} * 2^{32} = 2^{32 + 32} = 2^{64} $ elementos
en total al dar uso de un &lt;em&gt;array&lt;/em&gt; paginado. Es interesante que en este lenguaje
hipotético, un &lt;em&gt;array&lt;/em&gt; paginado no solo podría almacenar todos los elementos
de un &lt;em&gt;array&lt;/em&gt; de índices &lt;strong&gt;con signo&lt;/strong&gt; de 64 bits ($ 2^{63} $ elementos) si no también
de un &lt;em&gt;array&lt;/em&gt; de índices &lt;strong&gt;sin signo&lt;/strong&gt; de 64 bits ($ 2^{64} $ elementos).&lt;/p&gt;
&lt;h3 id=&quot;demostracion&quot;&gt;Demostración&lt;/h3&gt;
&lt;p&gt;Vistos los resultados anteriores es natural que surja interés de en hallar una
demostración matemática:&lt;/p&gt;
&lt;p&gt;Planteamos $ a \gt b$, donde $ a \in \mathbb{N^+} $ es el número de bits de
los índices del &lt;em&gt;array&lt;/em&gt; que queremos replicar, y $ b \in \mathbb{N^+} $ el número de
bits de los índices de los &lt;em&gt;arrays&lt;/em&gt; que  conforman nuestro &lt;em&gt;array&lt;/em&gt; paginado (&lt;em&gt;la réplica&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Para que la réplica sea válida todos los elementos del &lt;em&gt;array&lt;/em&gt; original deben
poder ser introducidos en la réplica:&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;Y dado que nos encontramos trabajando con aritmética entera,
la expresión $ a / 2 $ solo existe si $ a \bmod 2 = 0 $;
dicho de otro modo, &lt;em&gt;$ a $ debe ser un número par $ \blacksquare $&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;alternativas&quot;&gt;Alternativas&lt;/h2&gt;
&lt;p&gt;Dudo que existan alternativas para cubrir este concreto caso, la mayoría de sistemas
donde puede surgir una necesidad así son capaces usar índices de 64 bits.
Este intento mio ha resultado ser poco más que un curioso experimento que quería compartir.&lt;/p&gt;
</content>
        
    </entry>
</feed>