///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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                                 //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "EPTF_CLL_DataSource_Functions.hh"
#include <strings.h>
#include <regex.h>
#include <stdlib.h>

INTEGER EPTF__CLL__DataSource__Functions::f__EPTF__DataSource__compare(
  const EPTF__CLL__DataSource__Definitions::EPTF__DataSource__Param& pl__par1,
  const EPTF__CLL__DataSource__Definitions::EPTF__DataSource__Param& pl__par2
) {
  return strcmp((const char*)pl__par1.paramName(),(const char*)pl__par2.paramName());
}

INTEGER EPTF__CLL__DataSource__Functions::f__EPTF__DataSource__str2float(
  const CHARSTRING& pl__str,
  FLOAT& pl__float
) {
  
  const char* posix_str = "^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$";
  regex_t posix_regexp;
  
  int ret_val=regcomp(&posix_regexp, posix_str, REG_EXTENDED);
  
  if(ret_val!=0) {
      char err[512];
      regerror(ret_val, &posix_regexp, err, sizeof(err));
      regfree(&posix_regexp);
      TTCN_warning("Function regcomp() failed for string "
	    "\"%s\": %s", posix_str, err);
      return -1;
  }

  int result = regexec(&posix_regexp, (const char*)pl__str, 0, NULL, 0);
  regfree(&posix_regexp);

  if(result == REG_NOMATCH) {
    return -2;
  }
  
  pl__float = atof((const char*)pl__str);

  return 0;
  
}

///////////////////////////////////////////////////////////
//    Implementation of the external function f_EPTF_DataSourceClient_downcast.
///////////////////////////////////////////////////////////
EPTF__CLL__DataSource__Definitions::EPTF__DataSourceClient__CT 
EPTF__CLL__DataSource__Definitions::f__EPTF__DataSourceClient__downcast(const INTEGER& pl__dataSourceClientCompRef) {
  return EPTF__CLL__DataSource__Definitions::EPTF__DataSourceClient__CT(pl__dataSourceClientCompRef);
}

