001/*
002 *  This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 *  This file is licensed to You under the Eclipse Public License (EPL);
005 *  You may not use this file except in compliance with the License. You
006 *  may obtain a copy of the License at
007 *
008 *      http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 *  See the COPYRIGHT.txt file distributed with this work for information
011 *  regarding copyright ownership.
012 */
013package org.mmtk.utility.options;
014
015/**
016 * The number of GC threads to use for parallel collection.
017 *
018 * This is slightly unclean as the default value is not known at build time.
019 */
020public final class Threads extends org.vmutil.options.IntOption {
021
022  /** Has a value been set? */
023  private boolean valueSet;
024
025  /**
026   * Create the option.
027   */
028  public Threads() {
029    super(Options.set, "Threads",
030          "Number of GC threads to use",
031          1);
032    valueSet = false;
033  }
034
035  /**
036   * Update the default value, only overriding value if no explicit value was set.
037   *
038   * @param defaultValue The actual default value.
039   */
040  public void updateDefaultValue(int defaultValue) {
041    this.defaultValue = defaultValue;
042    if (!valueSet) {
043      this.value = defaultValue;
044    }
045  }
046
047  /**
048   * Return the number of threads to use, or delegate to the runtime if this has not been set.
049   */
050  @Override
051  public void setValue(int value) {
052    super.setValue(value);
053    valueSet = true;
054  }
055
056  /**
057   * Only accept values of 1 or higher.
058   */
059  @Override
060  protected void validate() {
061    failIf(this.value < 1, "Must have at least one gc thread");
062  }
063}