PlatformServices.avt

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

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

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

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

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

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

package platform.dependent;

import avt.io.*;
import platform.independent.filesystem.*;
import platform.independent.osservices.*;

public abstract class PlatformServices(Runtime)
{
    private static PlatformServices instance;

    public static PlatformServices getInstance() { return instance; }

    private static native int getProcessorBrandString(char[] dst);

    private String fldProcessorBrandString;

    protected () { instance = this; }

    /* время */

    public abstract int currentOffsetInMillis();

    public abstract long currentTimeInMillis();

    /* память */

    public abstract void deallocateRegion(long2 region, int flags);

    public abstract void setRegionProtectionBits(long2 region, int pbits);

    public abstract int getRegionProtectionBits(long2 region);

    public abstract long2 allocateRegion(long2 region, int flags);

    public abstract long2[] enumerateRegions();

    /* событие */

    public abstract void destroyEvent(long eventDs);

    public abstract void setSignalledEvent(long eventDs);

    public abstract void clearSignalledEvent(long eventDs);

    public abstract void waitSignalledEvent(long eventDs, long timeInMillis, int timeInNanos);

    public abstract long createEvent(boolean manualReset, boolean initialState, char[] name);

    /* поток исполнения */

    public abstract void yieldThread();

    public abstract void setThreadPriority(long2 threadId, int priority);

    public abstract void setThreadDescription(long2 threadId, byte[] src, int offset, int length);

    public abstract boolean isAliveThread(long threadMainId);

    public abstract int getThreadPriority(long2 threadId);

    public abstract int getThreadDescription(long2 threadId, byte[] dst, int offset);

    public abstract int getActiveThreadsQuantity();

    public abstract long startThread(Runnable ref);

    public abstract long2 getCurrentThreadId();

    public abstract long[] getActiveThreadsMainIds();

    public abstract Mutex newMutex();

    public abstract Monitor newMonitor();

    /* процесс */

    public abstract void closeProcessDescriptor(long2 procDs);

    public abstract void joinProcess(long2 procDs, long timeInMillis, int timeInNanos);

    public abstract boolean isProcessTerminated(long2 procDs);

    public abstract boolean isPlatformOutputStream(ByteWriter stream);

    public abstract boolean isPlatformInputStream(ByteReader stream);

    public abstract boolean isCurrentProcessHasInstance();

    public abstract int getProcessExitCode(long2 procDs);

    public abstract long getCurrentProcessId();

    public abstract long2 startProcess(ProcessParameters ref) throws DirectoryNotFoundException, FileNotFoundException, IOException;

    public abstract Process getCurrentProcess();

    public abstract EnvironmentTable newEnvironmentTable();

    public abstract ByteStream newPipe();

    public abstract String getConsoleInputCharsetName();

    public abstract String getConsoleOutputCharsetName();

    /* файловая система */

    public abstract boolean isObjectPathCaseSensitive();

    public abstract boolean isInternalPathFull(String internalPath);

    public abstract FileSystemRoot[] enumerateRoots() throws IOException;

    public abstract FileSystemRoot getRoot(String objectPath) throws FileSystemNotFoundException, IOException;

    public abstract String getUserConfigDir() throws IOException;

    public abstract String getUserCacheDir() throws IOException;

    public abstract String getUserLocalDir() throws IOException;

    public abstract String toInternalPath(String objectPath);

    public abstract String toObjectPath(String internalPath);

    /* свойства платформы */

    public abstract int processorNumberOfCores { read }

    public abstract String operatingSystemName { read }

    public abstract String operatingSystemVersion { read }

    public abstract String lineSeparator { read }

    public final int processorCodeBits { read = 64 }

    public final String processorBrandString { read = fldProcessorBrandString }

    /* инициализация и финализация */

    protected void afterConstruction() {
        char[] processorBrandStringChars = new char[48];
        int processorBrandStringLength = getProcessorBrandString(processorBrandStringChars);
        fldProcessorBrandString = new String(processorBrandStringChars, 0, processorBrandStringLength);
        super.afterConstruction();
    }
}