/**************************************************************************
* File name : Frame.java
*
* This file is part a SCJ Level 0 and Level 1 implementation,
* based on SCJ Draft, Version 0.94 25 June 2013.
*
* It is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This SCJ Level 0 and Level 1 implementation is distributed in the hope
* that it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this SCJ Level 0 and Level 1 implementation.
* If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2012
* @authors Anders P. Ravn, Aalborg University, DK
* Stephan E. Korsholm and Hans Søndergaard,
* VIA University College, DK
*************************************************************************/
package javax.safetycritical;
import javax.realtime.RelativeTime;
import javax.safetycritical.annotate.SCJAllowed;
/**
* The frames array represents the order in which event handlers are to be scheduled. <br>
* Each <code>Frame</code> contains a duration of the frame and a list of
* periodic handlers to be executed during that time. <br>
* Note that a <code>Frame</code> may have zero periodic handlers associated with them.
* This represents a period of time during which the <code>CyclicExecutive</code> is idle.
* Within each execution frame of the <code>CyclicSchedule</code>, the <code>PeriodicEventHandler</code>
* objects represented by the handlers array will be release in the order they appear within this array. <br>
* The object allocates and retains private shallow copies of the duration and handlers array
* within the same memory area as <code>this</code>.
*
* @version 1.2; - December 2013
*
* @author Anders P. Ravn, Aalborg University,
* <A HREF="mailto:apr@cs.aau.dk">apr@cs.aau.dk</A>, <br>
* Hans Søndergaard, VIA University College, Denmark,
* <A HREF="mailto:hso@viauc.dk">hso@via.dk</A>
*
* @scjComment
* - semantic issue: Negative duration. It is checked in the constructor. <br>
* - semantic issue: Null duration. It is checked in the constructor.
*/
@SCJAllowed
public final class Frame {
RelativeTime duration;
PeriodicEventHandler[] handlers;
/**
* Constructor for a frame.
*
* @param duration is a <code>RelativeTime</code> object.
* @param handlers is the list of periodic handlers.
*/
@SCJAllowed
public Frame(RelativeTime duration, PeriodicEventHandler[] handlers) {
if (duration == null)
throw new IllegalArgumentException();
if (duration.getMilliseconds() * 1000000 + duration.getNanoseconds() <= 0)
throw new IllegalArgumentException();
if (handlers == null)
throw new IllegalArgumentException();
this.duration = duration;
this.handlers = handlers;
}
/**
*
* @return The list of handlers
*/
// used for JML annotation only (not public)
PeriodicEventHandler[] getHandlers()
{
return handlers;
}
/**
*
* @return The duration
*/
// used for JML annotation only (not public)
RelativeTime getDuration()
{
return duration;
}
}