!arrays.avt

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

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

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

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

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

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

package ru.malik.elaborarer.avtoo.compiler;

import avt.lang.array.*;

public class StringArray(ru.malik.elaborarer.avtoo.lang.StringArray, Cloneable, Measureable, ObjectArray)
{
    private long[] fldHashs;

    public (): super(new String[0x0f]) {
        long[] hashs = new long[0x0f];
        fldArray.length = hashs.length = 0;
        fldHashs = hashs;
    }

    public void append(String item) {
        long[] hashs = fldHashs;
        String[] array = fldArray;
        int length = array.length;
        if(length == array.capacity)
        {
            if(length == Int.MAX_VALUE)
            {
                throw new BufferTooLargeError(avt.lang.package.getResourceString("!error.buffer-too-large"));
            }
            int capacity = length << 1 | 1;
            Array.copy(hashs, 0, fldHashs = hashs = new long[capacity], 0, length);
            Array.copy(array, 0, fldArray = array = new String[capacity], 0, length);
        }
        hashs.length = array.length = length + 1;
        hashs[length] = item == null ? 0 : item.hashCodeAsLong();
        array[length] = item;
    }

    public boolean contains(String item) {
        String[] array = fldArray;
        if(item == null) return Array.indexOf(null, array, 0, 0) >= 0;
        if(Array.indexOf(item, array, 0, 0) >= 0) return true;
        for(long[] hashs = fldHashs, long hash = item.hashCodeAsLong(), int index = -1; (index = Array.indexOf(hash, hashs, index + 1, 0)) >= 0; ) if(item.equals(array[index])) return true;
        return false;
    }
}