/*******************************************************************************
* Copyright 2012 Analog Devices, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
********************************************************************************/
package com.analog.lyric.dimple.schedulers.schedule;
import org.eclipse.jdt.annotation.Nullable;
import com.analog.lyric.dimple.model.core.FactorGraph;
import com.analog.lyric.dimple.schedulers.IScheduler;
import com.analog.lyric.dimple.schedulers.scheduleEntry.IScheduleEntry;
import com.analog.lyric.dimple.solvers.interfaces.ISolverFactorGraph;
import com.analog.lyric.options.IOptionValue;
/**
* @author jeffb
*
* Any schedule produced by a scheduler must implement this interface. A
* schedule is required to implement the Iterable interface, with each
* iteration, returning a sequence of ScheduleEntry objects.
*/
public interface ISchedule extends Iterable<IScheduleEntry>, IOptionValue
{
/*
* This method is called when setSchedule is called on the FactorGraph.
*/
@Deprecated
public void attach(FactorGraph factorGraph) ;
public @Nullable FactorGraph getFactorGraph();
/**
* The scheduler that created this schedule, if any.
* @since 0.08
*/
public @Nullable IScheduler getScheduler();
/**
* Override the {@link #getScheduler scheduler} attribute.
* <p>
* This should be used by schedulers that use another scheduler to do their work.
*/
public void setScheduler(IScheduler scheduler);
/**
* True if this is a custom schedule.
* <p>
* Custom schedule's are subject to validation upon graph initialization.
* <p>
* Currently only true for {@link FixedSchedule}s produced manually or by a
* {@linkplain IScheduler#isCustomScheduler() custom scheduler}.
* @since 0.08
*/
public boolean isCustom();
public boolean isUpToDateForSolver(ISolverFactorGraph sgraph);
/**
* A simple counter that is incremented if the schedule changes.
* <p>
* For dynamic schedules, this number should only be incremented if the
* the parameters of the schedule changes.
*/
public long scheduleVersion();
/**
* The {@linkplain FactorGraph#structureVersion() structure version} of the {@linkplain #getFactorGraph graph}
* when schedule was last updated.
* <p>
* @since 0.08
*/
public long structureVersion();
}