blob: baa3adef50a58d8b69c4c25cd07bfc10e982cde2 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2000-2019 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Module: EPTF_CLL_FBQ_Definitions
//
// Purpose:
// This module contains the types of Free-Busy queue management
//
// Module Parameters:
// tsp_debug_QueueMgmt - boolean := false;
// set it to true for Queue Management debugging
// NOT USED ANY MORE by FBQ!
//
// tsp_debugVerbose_QueueMgmt - boolean:= false
// set it to true for verbose Queue Management debugging
// NOT USED ANY MORE by FBQ!
//
// Current Owner:
// Jozsef Gyurusi (ETHJGI)
//
// Last Review Date:
// 2012-02-16
//
// Detailed Comments:
// A free-busy queue contains two chains: free_chain slots and busy_chain slots. It
// is suitable to implement a dynamic list, that can accomodate arbitrary
// number of list elements, where inserting, or removing an element takes
// constant time, irrespective of the size of the list. Event-queues for timer
// management are certainly candidates for FreeBusyQueues. There are utility
// and convenience functions to maintain the EPTF_FreeBusyQueue within this
// module.
//
///////////////////////////////////////////////////////////
module EPTF_CLL_FBQ_Definitions {
import from EPTF_CLL_NQueue_Definitions all;
import from EPTF_CLL_Common_Definitions all;
modulepar {
boolean tsp_debug_QueueMgmt := false;
boolean tsp_debugVerbose_QueueMgmt := false
}
///////////////////////////////////////////////////////////
// Type: EPTF_IndexList
//
// Purpose:
// Type alias for the <EPTF_IntegerList>
// This is the data type of the data elements associated to
// queue items.
//
// Elements:
// integers
//
///////////////////////////////////////////////////////////
type EPTF_IntegerList EPTF_IndexList;
///////////////////////////////////////////////////////////
// Type: EPTF_IndexArray
//
// Purpose:
// To store the data elements associated to the queue
//
// Elements:
// List of <EPTF_IndexList> - the associated data to queue items
//
// Detailed Comments:
// -
///////////////////////////////////////////////////////////
type record of EPTF_IndexList EPTF_IndexArray;
///////////////////////////////////////////////////////////
// Type: EPTF_insertionType
//
// Purpose:
// enumerated type to denote different cases of insertion depending
// on the status of the target chain and the insertion point
//
// Elements:
// empty - denotes that the insertion shall be done into an empty chain
//
// head - denotes that the insertion shall be done at the head of a non-empty
// chain
//
// middle - denotes that the insertion shall be done at the middle of a non-empty
// chain, i.e., then length of the chain is at least two, or in other words
// (head!=tail) and (number>0) for the chain
//
// tail - denotes that the insertion shall be done at the tail of a non-empty
// chain
//
///////////////////////////////////////////////////////////
type enumerated EPTF_insertionType { empty, head, middle, tail }
///////////////////////////////////////////////////////////
// Type: EPTF_chainType_enum_t
//
// Purpose:
// enumerated type for denoting types of chains
//
// Elements:
// free_chain - is used to denote slots that are linked into the chain 'free'
//
// busy_chain - is used to denote slots that are linked into the chain 'busy'
//
// invalid_chain - is used to denote slots that are not linked into any chain
//
// Detailed Comments:
// -
//
///////////////////////////////////////////////////////////
type enumerated EPTF_chainType_enum_t { free_chain (0), busy_chain (1) , invalid_chain (2) }
///////////////////////////////////////////////////////////
// Constant: c_EPTF_FBQ_free_chain
//
// Purpose:
// Constant that identifies the free chain in FBQ
//
// Detailed Comments:
// *0*
///////////////////////////////////////////////////////////
const EPTF_NQueue_ChainId c_EPTF_FBQ_free_chain := 0;
///////////////////////////////////////////////////////////
// Constant: c_EPTF_FBQ_busy_chain
//
// Purpose:
// Constant that identifies the busy chain in FBQ
//
// Detailed Comments:
// *1*
///////////////////////////////////////////////////////////
const EPTF_NQueue_ChainId c_EPTF_FBQ_busy_chain := 1;
///////////////////////////////////////////////////////////
// Constant: c_EPTF_FBQ_invalid_chain
//
// Purpose:
// Constant that identifies the invalid chain in FBQ
//
// Detailed Comments:
// *2*
///////////////////////////////////////////////////////////
const EPTF_NQueue_ChainId c_EPTF_FBQ_invalid_chain := 2;
///////////////////////////////////////////////////////////
// Type: EPTF_FreeBusyQueue
//
// Purpose:
// This is the definition of EPTF_FreeBusyQueue data structure.
// It stores the ID of the queue itself.
// The Free-Busy queue API functions operate on this structure.
//
// Elements:
// -
//
///////////////////////////////////////////////////////////
type EPTF_NQueue_ChainId EPTF_FreeBusyQueue;
///////////////////////////////////////////////////////////
// Type: EPTF_FBQ_DataList
//
// Purpose:
// This is the definition of the Database of data assiciated
// to an EPTF_FreeBusyQueue.
//
// Elements:
// <EPTF_IndexArray> - The data associated to a given the FBQ
//
///////////////////////////////////////////////////////////
type record of EPTF_IndexArray EPTF_FBQ_DataList;
///////////////////////////////////////////////////////////
// Constant: c_EPTF_emptyFreeBusyQueue
//
// Purpose:
// Constant to initialize the Free-Busy queue structure
//
// Detailed Comments:
// Important note:
// The Free-Busy queue structure <EPTF_FreeBusyQueue> should be
// initialized with the function <f_EPTF_FBQ_initFreeBusyQueue>.
// If the queue is initialized with this constant, ALWAYS call the function
// <f_EPTF_FBQ_initFreeBusyQueue> after that, otherwise the FBQ will not work properly!
//
///////////////////////////////////////////////////////////
const EPTF_FreeBusyQueue c_EPTF_emptyFreeBusyQueue := c_EPTF_NQueue_QueueId_init;
///////////////////////////////////////////////////////////
// Type: EPTF_FBQ_CT
//
// Purpose:
// The component that implements the Free-Busy queue feature
//
// Elements:
// v_FBQ_initialized - *boolean* - prevents multiple init by calling <f_EPTF_FBQ_init_CT> several times
// v_FBQ_dataList - <EPTF_FBQ_DataList> - database of the data associated to the queues
//
// Detailed Comments:
// To use the EPTF Varibles, extend your component with <EPTF_FBQ_CT>
//
///////////////////////////////////////////////////////////
type component EPTF_FBQ_CT extends EPTF_NQueue_CT {
var boolean v_FBQ_initialized := false;
var EPTF_FBQ_DataList v_FBQ_dataList := {};
}
}