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

org.apache.commons.lang3.arch.Processor Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.commons.lang3.arch;

/**
 * The {@link Processor} represents a microprocessor and defines
 * some properties like architecture and type of the microprocessor.
 *
 * @since 3.6
 */
public class Processor {

    /**
     * The {@link Arch} enum defines the architecture of
     * a microprocessor. The architecture represents the bit value
     * of the microprocessor.
     * The following architectures are defined:
     * 
    *
  • 32-bit
  • *
  • 64-bit
  • *
  • Unknown
  • *
*/ public enum Arch { /** * A 32-bit processor architecture. */ BIT_32("32-bit"), /** * A 64-bit processor architecture. */ BIT_64("64-bit"), /** * An unknown-bit processor architecture. */ UNKNOWN("Unknown"); /** * A label suitable for display. */ private final String label; Arch(final String label) { this.label = label; } /** * Gets the label suitable for display. * * @return the label. */ public String getLabel() { return label; } } /** * The {@link Type} enum defines types of a microprocessor. * The following types are defined: *
    *
  • AArch64
  • *
  • x86
  • *
  • ia64
  • *
  • PPC
  • *
  • RISCV
  • *
  • Unknown
  • *
*/ public enum Type { /** * ARM 64-bit. * * @since 3.13.0 */ AARCH_64("AArch64"), /** * Intel x86 series of instruction set architectures. */ X86("x86"), /** * Intel Itanium 64-bit architecture. */ IA_64("IA-64"), /** * Apple–IBM–Motorola PowerPC architecture. */ PPC("PPC"), /** * RISC-V architecture. * * @since 3.14.0 */ RISC_V("RISC-V"), /** * Unknown architecture. */ UNKNOWN("Unknown"); /** * A label suitable for display. */ private final String label; Type(final String label) { this.label = label; } /** * Gets the label suitable for display. * * @return the label. * @since 3.13.0 */ public String getLabel() { return label; } } private final Arch arch; private final Type type; /** * Constructs a {@link Processor} object with the given * parameters. * * @param arch The processor architecture. * @param type The processor type. */ public Processor(final Arch arch, final Type type) { this.arch = arch; this.type = type; } /** * Gets the processor architecture as an {@link Arch} enum. * The processor architecture defines, if the processor has * a 32 or 64 bit architecture. * * @return A {@link Arch} enum. */ public Arch getArch() { return arch; } /** * Gets the processor type as {@link Type} enum. * The processor type defines, if the processor is for example * an x86 or PPA. * * @return A {@link Type} enum. */ public Type getType() { return type; } /** * Tests if {@link Processor} is 32 bit. * * @return {@code true}, if {@link Processor} is {@link Arch#BIT_32}, else {@code false}. */ public boolean is32Bit() { return Arch.BIT_32 == arch; } /** * Tests if {@link Processor} is 64 bit. * * @return {@code true}, if {@link Processor} is {@link Arch#BIT_64}, else {@code false}. */ public boolean is64Bit() { return Arch.BIT_64 == arch; } /** * Tests if {@link Processor} is type of Aarch64. * * @return {@code true}, if {@link Processor} is {@link Type#AARCH_64}, else {@code false}. * * @since 3.13.0 */ public boolean isAarch64() { return Type.AARCH_64 == type; } /** * Tests if {@link Processor} is type of Intel Itanium. * * @return {@code true}. if {@link Processor} is {@link Type#IA_64}, else {@code false}. */ public boolean isIA64() { return Type.IA_64 == type; } /** * Tests if {@link Processor} is type of Power PC. * * @return {@code true}. if {@link Processor} is {@link Type#PPC}, else {@code false}. */ public boolean isPPC() { return Type.PPC == type; } /** * Tests if {@link Processor} is type of RISC-V. * * @return {@code true}. if {@link Processor} is {@link Type#RISC_V}, else {@code false}. * @since 3.14.0 */ public boolean isRISCV() { return Type.RISC_V == type; } /** * Tests if {@link Processor} is type of x86. * * @return {@code true}, if {@link Processor} is {@link Type#X86}, else {@code false}. */ public boolean isX86() { return Type.X86 == type; } @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append(type.getLabel()).append(' ').append(arch.getLabel()); return builder.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy