/*
 *  This file is part of the Jikes RVM project (http://jikesrvm.org).
 *
 *  This file is licensed to You under the Eclipse Public License (EPL);
 *  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/eclipse-1.0.php
 *
 *  See the COPYRIGHT.txt file distributed with this work for information
 *  regarding copyright ownership.
 */
package org.mmtk.plan.refcount.fullheap;

import org.mmtk.plan.TraceLocal;
import org.mmtk.plan.TransitiveClosure;
import org.mmtk.plan.refcount.RCBaseCollector;
import org.vmmagic.pragma.*;

/**
 * This class implements the collector context for a simple reference counting
 * collector.
 */
@Uninterruptible
public class RCCollector extends RCBaseCollector {
  /************************************************************************
   * Initialization
   */
  private final RCFindRootSetTraceLocal rootTrace;
  private final RCModifiedProcessor modProcessor;

  /**
   * Constructor.
   */
  public RCCollector() {
    rootTrace = new RCFindRootSetTraceLocal(global().rootTrace, newRootBuffer);
    modProcessor = new RCModifiedProcessor();
  }

  /**
   * Get the modified processor to use.
   */
  protected final TransitiveClosure getModifiedProcessor() {
    return modProcessor;
  }

  /**
   * Get the root trace to use.
   */
  protected final TraceLocal getRootTrace() {
    return rootTrace;
  }
}
