///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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_Common_IndexArrayFunctions
// 
//  Purpose:
//    This module provides functions to handle index lists stored in 
//    an EPTF_Common_IndexArray record
// 
//  Module Parameters:
//    -
// 
//  Module depends on:
//    <EPTF_CLL_Common_Definitions>
//    <EPTF_CLL_Common_Functions>
//    <EPTF_CLL_Common_IndexArrayDefinitions>
//
//  Current Owner:    ELSZSKU
// 
//  Last Review Date:
//    2009-09-07
// 
///////////////////////////////////////////////////////////
module EPTF_CLL_Common_IndexArrayFunctions
{
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_Common_Functions all;
import from EPTF_CLL_Common_IndexArrayDefinitions all


///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_getOrCreateFreeSlot
// 
//  Purpose:
//    Retrieves the first available position in the <EPTF_Common_IndexArray>
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//
//  Return Value:
//    *integer* - the free index
//
//  Detailed Comments:
//
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_getOrCreateFreeSlot(inout EPTF_Common_IndexArray pl_array) return integer{
  for ( var integer vl_i := 0; vl_i < sizeof(pl_array.values) ; vl_i := vl_i+1 ){
    if(pl_array.values[vl_i] < 0){
      return vl_i
    }
  }
  return sizeof(pl_array.values)
}

///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_getElement
// 
//  Purpose:
//    Retrieves the content of the specified element from the 
//    <EPTF_Common_IndexArray>.
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//    pl_idx - *integer* - the specified index
//
//  Return Value:
//    *integer* - the content of the index
//
//  Detailed comments:
//    If there is no valid element, the return value is -1 
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_getElement(
  inout EPTF_Common_IndexArray pl_array,
  in integer pl_idx)
return integer{
  if(pl_idx >= 0 and pl_idx < sizeof(pl_array.values)){
    return pl_array.values[pl_idx]
  }
  return -1
}

///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_setElement
// 
//  Purpose:
//    Sets the content of the specified element in the 
//    <EPTF_Common_IndexArray>.
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//    pl_idx - *integer* - the specified index
//    pl_data - *integer* - the data to be set
//
//  Detailed comments:
//    If pl_data < 0 the content of the specified index will be the index.
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_setElement(
  inout EPTF_Common_IndexArray pl_array,
  in integer pl_idx,
  in integer pl_data := -1){
  if (c_EPTF_Common_debugSwitch and pl_idx < 0){
    f_EPTF_Common_error(%definitionId&": using a negative index: "&int2str(pl_idx));
    return;
  }
  if(0 > pl_data){pl_data := pl_idx}
  pl_array.values[pl_idx] := pl_data;
  if((pl_array.firstBusy > pl_idx) or (0 > pl_array.firstBusy)){
    pl_array.firstBusy := pl_idx
  }
  for ( var integer vl_i := (pl_idx - 1); vl_i >= 0 and not isbound(pl_array.values[vl_i]) ; vl_i := vl_i - 1 ){
      pl_array.values[vl_i] := -1;
  }
}

///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_setNewElement
// 
//  Purpose:
//    Sets the content of the first available element in the 
//    <EPTF_Common_IndexArray>.
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//    pl_data - *integer* - the data to be set
//
//  Return Value:
//    *integer* - the index of the available element
//
//  Detailed Comments:
//    If pl_data < 0 the content of the specified index will be the index.
//
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_setNewElement(
  inout EPTF_Common_IndexArray pl_array,
  in integer pl_data := -1)
return integer{
  var integer vl_idx := f_EPTF_Common_IndexArray_getOrCreateFreeSlot(pl_array)
  if(0 > pl_data){pl_data := vl_idx}
  pl_array.values[vl_idx] := pl_data;
  if((pl_array.firstBusy > vl_idx) or (0 > pl_array.firstBusy)){
    pl_array.firstBusy := vl_idx
  }
  return vl_idx
}

///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_freeElement
// 
//  Purpose:
//    Invalidates the content of the specified element in the 
//    <EPTF_Common_IndexArray>.
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//    pl_idx - *integer* - the index
//
//  Return Value:
//    *integer* - the content of the freed index
//
//  Detailed Comments:
//
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_freeElement(
  inout EPTF_Common_IndexArray pl_array,
  in integer pl_idx)
return integer{
  var integer vl_ret := -1
  if(pl_idx >= 0 and pl_idx < sizeof(pl_array.values)){
    vl_ret := pl_array.values[pl_idx]
    pl_array.values[pl_idx] := -1
    if(pl_idx == pl_array.firstBusy){
      pl_array.firstBusy := -1
      for ( var integer vl_i := pl_idx+1; vl_i < sizeof(pl_array.values) and -1 == pl_array.firstBusy ; vl_i := vl_i+1 ){
        if(0 <= pl_array.values[vl_i]){
          pl_array.firstBusy := vl_i
        }
      }
    }
  }
  return vl_ret
}

///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_arrayIsEmpty
// 
//  Purpose:
//    Checks whether the <EPTF_Common_IndexArray> is empty
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//
//  Return Value:
//    *boolean* - true if IndexArray record is empty
//
//  Detailed Comments:
//
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_arrayIsEmpty(
  inout EPTF_Common_IndexArray pl_array)
return boolean{
  return -1 == pl_array.firstBusy
}

///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_getFirstBusyIdx
// 
//  Purpose:
//    Retrieves the index of the first valid element in the 
//    <EPTF_Common_IndexArray>
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//
//  Return Value:
//    *integer* - the index of the first busy element
//
//  Detailed Comments:
//
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_getFirstBusyIdx(
  inout EPTF_Common_IndexArray pl_array)
return integer{
  return pl_array.firstBusy
}

///////////////////////////////////////////////////////////
//  Function: f_EPTF_Common_IndexArray_getNextBusyIdx
// 
//  Purpose:
//    Retrieves the first valid element in the 
//    <EPTF_Common_IndexArray> after the specified position
//
//  Parameters:
//    pl_array - <EPTF_Common_IndexArray> - the IndexArray record
//    pl_idx - *integer* - the specified position where the search to be started
//
//  Return Value:
//    *integer* - the index of the first busy element after the specified position
//
//  Detailed comments:
//
///////////////////////////////////////////////////////////
function f_EPTF_Common_IndexArray_getNextBusyIdx(
  inout EPTF_Common_IndexArray pl_array,
  in integer pl_idx)
return integer{
  if(pl_idx >= 0 and pl_idx < sizeof(pl_array.values)){
    for ( var integer vl_i := pl_idx+1; vl_i < sizeof(pl_array.values) ; vl_i := vl_i+1 ){
      if(0 <= pl_array.values[vl_i]){
        return vl_i
      }
    }
  }
  return -1
}

}// end of module
