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     */
013    package org.mmtk.vm;
014    
015    import org.mmtk.plan.Plan;
016    import org.mmtk.plan.CollectorContext;
017    import org.mmtk.plan.MutatorContext;
018    import org.mmtk.plan.PlanConstraints;
019    
020    import org.mmtk.utility.Log;
021    
022    import org.vmmagic.pragma.*;
023    
024    /**
025     * Stub to give access to plan local, constraint and global instances
026     */
027    @Uninterruptible public abstract class ActivePlan {
028    
029      /** @return The active Plan instance. */
030      public abstract Plan global();
031    
032      /** @return The active PlanConstraints instance. */
033      public abstract PlanConstraints constraints();
034    
035      /** @return The active <code>CollectorContext</code> instance. */
036      public abstract CollectorContext collector();
037    
038      /** @return Is the active thread a mutator thread. */
039      public abstract boolean isMutator();
040    
041      /** @return The active <code>MutatorContext</code> instance. */
042      public abstract MutatorContext mutator();
043    
044      /** @return The log for the active thread */
045      public abstract Log log();
046    
047      /** @return The maximum number of collector threads that may participate in parallel GC. */
048      public abstract int collectorCount();
049    
050      /** Reset the mutator iterator */
051      public abstract void resetMutatorIterator();
052    
053      /**
054       * Return the next <code>MutatorContext</code> in a
055       * synchronized iteration of all mutators.
056       *
057       * @return The next <code>MutatorContext</code> in a
058       *  synchronized iteration of all mutators, or
059       *  <code>null</code> when all mutators have been done.
060       */
061      public abstract MutatorContext getNextMutator();
062    }