/*
 *  This file is part of the Jikes RVM project (http://jikesrvm.org).
 *
 *  This file is licensed to You under the Common Public License (CPL);
 *  You may not use this file except in compliance with the License. You
 *  may obtain a copy of the License at
 *
 *      http://www.opensource.org/licenses/cpl1.0.php
 *
 *  See the COPYRIGHT.txt file distributed with this work for information
 *  regarding copyright ownership.
 */
package org.mmtk.utility.gcspy;

import org.mmtk.vm.VM;

import org.vmmagic.pragma.*;

/**
 * Color.java
 *
 * Cut-down implementation of java.awt.Color sufficient to provide
 * the server side (Stream) with colours
 */
@Uninterruptible public class Color {

  /**
   * Some gcspy standard colours (taken from gcspy_color_db.c).
   */
  public static final Color Black     = new Color(0, 0, 0);
  public static final Color Blue      = new Color(0, 0, 255);
  public static final Color Cyan      = new Color(0, 255, 255);
  public static final Color DarkGray  = new Color(64, 64, 64);
  public static final Color Gray      = new Color(128, 128, 128);
  public static final Color Green     = new Color(0, 255, 0);
  public static final Color LightGray = new Color(192, 192, 192);
  public static final Color Magenta   = new Color(255, 0, 255);
  public static final Color MidGray   = new Color(160, 160, 160);
  public static final Color NavyBlue  = new Color(0, 0, 150);
  public static final Color OffWhite  = new Color(230, 230, 230);
  public static final Color Orange    = new Color(255, 200, 0);
  public static final Color Pink      = new Color(255, 175, 175);
  public static final Color Red       = new Color(255, 0, 0);
  public static final Color White     = new Color(255, 255, 255);
  public static final Color Yellow    = new Color(255, 255, 0);

  private short r; // red component
  private short g; // green component
  private short b; // blue component

  /**
   * Constructor for a simple RGB colour model.
   *
   * @param r red component
   * @param g green component
   * @param b blue component
   */
  public Color(short r, short g, short b) {
    if (VM.VERIFY_ASSERTIONS)
      VM.assertions._assert((0 <= r) && (r <= 255) &&
                           (0 <= g) && (g <= 255) &&
                           (0 <= b) && (b <= 255));
    this.r = r;
    this.g = g;
    this.b = b;
  }

  /**
   * Constructor for a simple RGB colour model.
   *
   * @param r red component
   * @param g green component
   * @param b blue component
   */
  private Color(int r, int g, int b) {
    this((short) r, (short) g, (short) b);
  }


  /**
   * Red component
   *
   * @return the red component
   */
  public short getRed() { return r; }

  /**
   * Green component
   *
   * @return the green component
   */
  public short getGreen() { return g; }

  /**
   * Blue component
   *
   * @return the blue component
   */
  public short getBlue() { return b; }
}
