| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // 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 := {}; |
| } |
| } |