1 /*
   2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 package sun.hotspot.cpuinfo;
  26 
  27 import java.util.List;
  28 import java.util.ArrayList;
  29 import java.util.Arrays;
  30 import java.util.Collections;
  31 import java.util.regex.Pattern;
  32 import java.util.regex.Matcher;
  33 
  34 public class CPUInfo {
  35 
  36     private List<String> features;
  37     private String additionalCPUInfo = "";
  38 
  39     private static final Pattern additionalCPUInfoRE =
  40         Pattern.compile("([^(]*\\([^)]*\\)[^,]*),\\s*");
  41 
  42     /**
  43      * Gather information about CPU from a string containing
  44      * CPU features.
  45      *
  46      * @param cpuFeaturesString The string with CPU features.
  47      */
  48     public CPUInfo(String cpuFeaturesString) {
  49         Matcher matcher = additionalCPUInfoRE.matcher(cpuFeaturesString);
  50         if (matcher.find()) {
  51             additionalCPUInfo = matcher.group(1);
  52         }
  53         String splittedFeatures[] = matcher.replaceAll("").split("(, )| ");
  54 
  55         features = Collections.unmodifiableList(Arrays.
  56                                                 asList(splittedFeatures));
  57     }
  58 
  59     /**
  60      * Get additional information about CPU.
  61      * For example, on X86 in will be family/model/stepping
  62      * and number of cores.
  63      *
  64      * @return additional CPU info
  65      */
  66     public String getAdditionalCPUInfo() {
  67         return additionalCPUInfo;
  68     }
  69 
  70     /**
  71      * Get all known features supported by CPU.
  72      *
  73      * @return unmodifiable list with names of all known features
  74      *         supported by CPU.
  75      */
  76     public List<String> getFeatures() {
  77         return features;
  78     }
  79 
  80     /**
  81      * Check if some feature is supported by CPU.
  82      *
  83      * @param feature Name of feature to be tested.
  84      * @return <b>true</b> if tested feature is supported by CPU.
  85      */
  86     public boolean hasFeature(String feature) {
  87         return features.contains(feature.toLowerCase());
  88     }
  89 }