All Downloads are FREE. Search and download functionalities are using the official Maven repository.

redis.embedded.model.Architecture Maven / Gradle / Ivy

package redis.embedded.model;

import redis.embedded.error.OsArchitectureNotFound;

import java.io.IOException;
import java.util.stream.Stream;

import static redis.embedded.util.IO.processToLines;

public enum Architecture {
    x86,
    x86_64,
    aarch64;

    public static Architecture detectWindowsArchitecture() {
        final String arch = System.getenv("PROCESSOR_ARCHITECTURE");
        final String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432");

        return isWindows64Bit(arch, wow64Arch) ? x86_64 : x86;
    }

    public static Architecture detectUnixArchitecture() {
        try (final Stream lines = processToLines("uname -m")) {
            return lines.filter(Architecture::isUnix64Bit)
                .map(line -> line.contains("aarch64") ? aarch64:  x86_64)
                .findFirst().orElse(x86);
        } catch (IOException e) {
            throw new OsArchitectureNotFound(e);
        }
    }

    public static Architecture detectMacOSXArchitecture() {
        try (final Stream lines = processToLines("sysctl hw")) {
            return lines.filter(Architecture::isMacOS64Bit)
                .map(line -> x86_64)
                .findFirst().orElse(x86);
        } catch (IOException e) {
            throw new OsArchitectureNotFound(e);
        }
    }

    private static boolean isWindows64Bit(final String arch, final String wow64Arch) {
        return arch.endsWith("64") || wow64Arch != null && wow64Arch.endsWith("64");
    }

    private static boolean isUnix64Bit(final String line) {
        return !line.isEmpty() && line.contains("64");
    }

    private static boolean isMacOS64Bit(final String line) {
        return !line.isEmpty() && line.contains("cpu64bit_capable") && line.trim().endsWith("1");
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy