!storages.avt

Переключить прокрутку окна
Загрузить этот исходный код

/*
    Компилятор языка программирования
    Объектно-ориентированный продвинутый векторный транслятор

    Copyright © 2021, 2024, 2026 Малик Разработчик

    Это свободная программа: вы можете перераспространять ее и/или изменять
    ее на условиях Стандартной общественной лицензии GNU в том виде,
    в каком она была опубликована Фондом свободного программного обеспечения;
    либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

    Эта программа распространяется в надежде, что она будет полезной,
    но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
    или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Стандартной
    общественной лицензии GNU.

    Вы должны были получить копию Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <https://www.gnu.org/licenses/>.
*/

package ru.malik.elaborarer.avtoo.lang;

import avt.lang.array.*;

public final class Byte2Storage(Storage, Cloneable, Measureable, Byte2Array)
{
    private byte2[] fldArray;

    public () {
        byte2[] array = new byte2[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Byte2Storage source) {
        byte2[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new byte2[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Byte2Storage clone() { return new Byte2Storage(this); }

    public int indexOf(byte2 item) {
        for(byte2[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(byte2 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            byte2[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new byte2[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public byte2 operator [](int index) { return fldArray[index]; }
}

public final class Byte4Storage(Storage, Cloneable, Measureable, Byte4Array)
{
    private byte4[] fldArray;

    public () {
        byte4[] array = new byte4[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Byte4Storage source) {
        byte4[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new byte4[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Byte4Storage clone() { return new Byte4Storage(this); }

    public int indexOf(byte4 item) {
        for(byte4[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(byte4 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            byte4[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new byte4[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public byte4 operator [](int index) { return fldArray[index]; }
}

public final class Byte8Storage(Storage, Cloneable, Measureable, Byte8Array)
{
    private byte8[] fldArray;

    public () {
        byte8[] array = new byte8[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Byte8Storage source) {
        byte8[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new byte8[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Byte8Storage clone() { return new Byte8Storage(this); }

    public int indexOf(byte8 item) {
        for(byte8[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(byte8 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            byte8[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new byte8[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public byte8 operator [](int index) { return fldArray[index]; }
}

public final class Short2Storage(Storage, Cloneable, Measureable, Short2Array)
{
    private short2[] fldArray;

    public () {
        short2[] array = new short2[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Short2Storage source) {
        short2[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new short2[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Short2Storage clone() { return new Short2Storage(this); }

    public int indexOf(short2 item) {
        for(short2[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(short2 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            short2[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new short2[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public short2 operator [](int index) { return fldArray[index]; }
}

public final class Short4Storage(Storage, Cloneable, Measureable, Short4Array)
{
    private short4[] fldArray;

    public () {
        short4[] array = new short4[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Short4Storage source) {
        short4[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new short4[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Short4Storage clone() { return new Short4Storage(this); }

    public int indexOf(short4 item) {
        for(short4[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(short4 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            short4[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new short4[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public short4 operator [](int index) { return fldArray[index]; }
}

public final class Short8Storage(Storage, Cloneable, Measureable, Short8Array)
{
    private short8[] fldArray;

    public () {
        short8[] array = new short8[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Short8Storage source) {
        short8[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new short8[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Short8Storage clone() { return new Short8Storage(this); }

    public int indexOf(short8 item) {
        for(short8[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(short8 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            short8[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new short8[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public short8 operator [](int index) { return fldArray[index]; }
}

public final class Int2Storage(Storage, Cloneable, Measureable, Int2Array)
{
    private int2[] fldArray;

    public () {
        int2[] array = new int2[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Int2Storage source) {
        int2[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new int2[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Int2Storage clone() { return new Int2Storage(this); }

    public int indexOf(int2 item) {
        for(int2[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(int2 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            int2[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new int2[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public int2 operator [](int index) { return fldArray[index]; }
}

public final class Int4Storage(Storage, Cloneable, Measureable, Int4Array)
{
    private int4[] fldArray;

    public () {
        int4[] array = new int4[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Int4Storage source) {
        int4[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new int4[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Int4Storage clone() { return new Int4Storage(this); }

    public int indexOf(int4 item) {
        for(int4[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(int4 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            int4[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new int4[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public int4 operator [](int index) { return fldArray[index]; }
}

public final class Int8Storage(Storage, Cloneable, Measureable, Int8Array)
{
    private int8[] fldArray;

    public () {
        int8[] array = new int8[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Int8Storage source) {
        int8[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new int8[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Int8Storage clone() { return new Int8Storage(this); }

    public int indexOf(int8 item) {
        for(int8[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(int8 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            int8[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new int8[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public int8 operator [](int index) { return fldArray[index]; }
}

public final class LongStorage(Storage, Cloneable, Measureable, LongArray)
{
    private long[] fldArray;

    public () {
        long[] array = new long[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (LongStorage source) {
        long[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public LongStorage clone() { return new LongStorage(this); }

    public int indexOf(long item) { return Array.indexOf(item, fldArray, 0, 0); }

    public int indexAcquire(long item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public long operator [](int index) { return fldArray[index]; }
}

public final class Long2Storage(Storage, Cloneable, Measureable, Long2Array)
{
    private long2[] fldArray;

    public () {
        long2[] array = new long2[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Long2Storage source) {
        long2[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long2[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Long2Storage clone() { return new Long2Storage(this); }

    public int indexOf(long2 item) {
        for(long2[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(long2 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long2[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long2[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public long2 operator [](int index) { return fldArray[index]; }
}

public final class Long4Storage(Storage, Cloneable, Measureable, Long4Array)
{
    private long4[] fldArray;

    public () {
        long4[] array = new long4[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Long4Storage source) {
        long4[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long4[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Long4Storage clone() { return new Long4Storage(this); }

    public int indexOf(long4 item) {
        for(long4[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(long4 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long4[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long4[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public long4 operator [](int index) { return fldArray[index]; }
}

public final class Long8Storage(Storage, Cloneable, Measureable, Long8Array)
{
    private long8[] fldArray;

    public () {
        long8[] array = new long8[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Long8Storage source) {
        long8[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long8[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Long8Storage clone() { return new Long8Storage(this); }

    public int indexOf(long8 item) {
        for(long8[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == item) return index;
        return -1;
    }

    public int indexAcquire(long8 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long8[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long8[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public long8 operator [](int index) { return fldArray[index]; }
}

public final class FloatStorage(Storage, Cloneable, Measureable, FloatArray)
{
    private int[] fldArray;

    public () {
        int[] array = new int[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (FloatStorage source) {
        int[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new int[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public FloatStorage clone() { return new FloatStorage(this); }

    public int indexOf(float item) { return Array.indexOf(Float.toIntBits(item), fldArray, 0, 0); }

    public int indexAcquire(float item) {
        int result = indexOf(item);
        if(result < 0)
        {
            int[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new int[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Float.toIntBits(item);
        }
        return result;
    }

    public float operator [](int index) { return Int.toFloatBits(fldArray[index]); }
}

public final class Float2Storage(Storage, Cloneable, Measureable, Float2Array)
{
    private int2[] fldArray;

    public () {
        int2[] array = new int2[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Float2Storage source) {
        int2[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new int2[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Float2Storage clone() { return new Float2Storage(this); }

    public int indexOf(float2 item) {
        for(int2 bits = Float2.toInt2Bits(item), int2[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == bits) return index;
        return -1;
    }

    public int indexAcquire(float2 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            int2[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new int2[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Float2.toInt2Bits(item);
        }
        return result;
    }

    public float2 operator [](int index) { return Int2.toFloat2Bits(fldArray[index]); }
}

public final class Float4Storage(Storage, Cloneable, Measureable, Float4Array)
{
    private int4[] fldArray;

    public () {
        int4[] array = new int4[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Float4Storage source) {
        int4[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new int4[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Float4Storage clone() { return new Float4Storage(this); }

    public int indexOf(float4 item) {
        for(int4 bits = Float4.toInt4Bits(item), int4[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == bits) return index;
        return -1;
    }

    public int indexAcquire(float4 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            int4[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new int4[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Float4.toInt4Bits(item);
        }
        return result;
    }

    public float4 operator [](int index) { return Int4.toFloat4Bits(fldArray[index]); }
}

public final class Float8Storage(Storage, Cloneable, Measureable, Float8Array)
{
    private int8[] fldArray;

    public () {
        int8[] array = new int8[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Float8Storage source) {
        int8[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new int8[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Float8Storage clone() { return new Float8Storage(this); }

    public int indexOf(float8 item) {
        for(int8 bits = Float8.toInt8Bits(item), int8[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == bits) return index;
        return -1;
    }

    public int indexAcquire(float8 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            int8[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new int8[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Float8.toInt8Bits(item);
        }
        return result;
    }

    public float8 operator [](int index) { return Int8.toFloat8Bits(fldArray[index]); }
}

public final class DoubleStorage(Storage, Cloneable, Measureable, DoubleArray)
{
    private long[] fldArray;

    public () {
        long[] array = new long[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (DoubleStorage source) {
        long[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public DoubleStorage clone() { return new DoubleStorage(this); }

    public int indexOf(double item) { return Array.indexOf(Double.toLongBits(item), fldArray, 0, 0); }

    public int indexAcquire(double item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Double.toLongBits(item);
        }
        return result;
    }

    public double operator [](int index) { return Long.toDoubleBits(fldArray[index]); }
}

public final class Double2Storage(Storage, Cloneable, Measureable, Double2Array)
{
    private long2[] fldArray;

    public () {
        long2[] array = new long2[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Double2Storage source) {
        long2[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long2[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Double2Storage clone() { return new Double2Storage(this); }

    public int indexOf(double2 item) {
        for(long2 bits = Double2.toLong2Bits(item), long2[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == bits) return index;
        return -1;
    }

    public int indexAcquire(double2 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long2[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long2[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Double2.toLong2Bits(item);
        }
        return result;
    }

    public double2 operator [](int index) { return Long2.toDouble2Bits(fldArray[index]); }
}

public final class Double4Storage(Storage, Cloneable, Measureable, Double4Array)
{
    private long4[] fldArray;

    public () {
        long4[] array = new long4[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Double4Storage source) {
        long4[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long4[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Double4Storage clone() { return new Double4Storage(this); }

    public int indexOf(double4 item) {
        for(long4 bits = Double4.toLong4Bits(item), long4[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == bits) return index;
        return -1;
    }

    public int indexAcquire(double4 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long4[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long4[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Double4.toLong4Bits(item);
        }
        return result;
    }

    public double4 operator [](int index) { return Long4.toDouble4Bits(fldArray[index]); }
}

public final class Double8Storage(Storage, Cloneable, Measureable, Double8Array)
{
    private long8[] fldArray;

    public () {
        long8[] array = new long8[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (Double8Storage source) {
        long8[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new long8[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public Double8Storage clone() { return new Double8Storage(this); }

    public int indexOf(double8 item) {
        for(long8 bits = Double8.toLong8Bits(item), long8[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(array[index] == bits) return index;
        return -1;
    }

    public int indexAcquire(double8 item) {
        int result = indexOf(item);
        if(result < 0)
        {
            long8[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new long8[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = Double8.toLong8Bits(item);
        }
        return result;
    }

    public double8 operator [](int index) { return Long8.toDouble8Bits(fldArray[index]); }
}

public final class RealStorage(Storage, Cloneable, Measureable, RealArray)
{
    private real[] fldArray;

    public () {
        real[] array = new real[0x3f];
        array.length = 0;
        fldData = fldArray = array;
    }

    private (RealStorage source) {
        real[] array = source.fldArray;
        int capacity = array.capacity;
        int length = array.length;
        Array.copy(array, 0, array = new real[capacity], 0, array.length = length);
        fldData = fldArray = array;
    }

    public RealStorage clone() { return new RealStorage(this); }

    public int indexOf(real item) {
        for(long2 bits = Real.toLong2Bits(item), real[] array = fldArray, int length = array.length, int index = 0; index < length; index++) if(Real.toLong2Bits(array[index]) == bits) return index;
        return -1;
    }

    public int indexAcquire(real item) {
        int result = indexOf(item);
        if(result < 0)
        {
            real[] array = fldArray;
            if((result = array.length) == array.capacity)
            {
                if(result == Int.MAX_VALUE)
                {
                    throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
                }
                Array.copy(array, 0, array = new real[result << 1 | 1], 0, result);
                fldData = fldArray = array;
            }
            array.length = result + 1;
            array[result] = item;
        }
        return result;
    }

    public real operator [](int index) { return fldArray[index]; }
}

public final class StringStorage(ObjectStorage, Cloneable, Measureable, ObjectArray)
{
    private String[] fldArray;

    public () {  }

    private (StringStorage source): super(source) {  }

    public StringStorage clone() { return new StringStorage(this); }

    public int indexOf(String item) { return super.indexOf(item); }

    public int indexAcquire(String item) { return super.indexAcquire(item); }

    public String operator [](int index) { return fldArray[index]; }

    protected void setArray(Object[] array) { fldArray = (String[]) array; }

    protected String getEmpty() { return ""; }

    protected String[] newArray(int capacity) { return new String[capacity]; }
}

public final class ArgumentArrayStorage(ObjectStorage, Cloneable, Measureable, ObjectArray)
{
    private static final ArgumentArray empty;

    private static { empty = new ArgumentArray(null, new Local[0]); }

    private ArgumentArray[] fldArray;

    public () {  }

    private (ArgumentArrayStorage source): super(source) {  }

    public ArgumentArrayStorage clone() { return new ArgumentArrayStorage(this); }

    public int indexOf(ArgumentArray item) { return super.indexOf(item); }

    public int indexAcquire(ArgumentArray item) { return super.indexAcquire(item); }

    public ArgumentArray operator [](int index) { return fldArray[index]; }

    protected void setArray(Object[] array) { fldArray = (ArgumentArray[]) array; }

    protected ArgumentArray getEmpty() { return empty; }

    protected ArgumentArray[] newArray(int capacity) { return new ArgumentArray[capacity]; }
}