// Copyright 2016 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// A poem (POsix EMulation) for functions in stdlib.h

#ifndef STARBOARD_CLIENT_PORTING_POEM_STDLIB_POEM_H_
#define STARBOARD_CLIENT_PORTING_POEM_STDLIB_POEM_H_

#if defined(STARBOARD)

#include "starboard/configuration.h"

#ifdef __cplusplus
extern "C" {
#endif

static SB_C_INLINE int PoemAbs(int x) {
  if (x < 0)
    return -x;
  return x;
}

#ifdef __cplusplus
}  // extern "C"
#endif

#if !defined(POEM_NO_EMULATION)

#include "starboard/system.h"
#ifdef __cplusplus
#include <string>
#include "starboard/common/string.h"
#else
#include "starboard/string.h"
#endif

// number conversion functions
#undef strtol
#define strtol(s, o, b) SbStringParseSignedInteger(s, o, b)
#undef strtoll
#define strtoll(s, o, b) SbStringParseSignedInteger(s, o, b)
#undef atoi
#define atoi(v) SbStringAToI(v)
#undef atol
#define atol(v) SbStringAToL(v)
#undef strtoul
#define strtoul(s, o, b) SbStringParseUnsignedInteger(s, o, b)
#undef strtoull
#define strtoull(s, o, b) SbStringParseUInt64(s, o, b)
#undef strtod
#define strtod(s, o) SbStringParseDouble(s, o)

#undef qsort
#define qsort(b, ec, ew, c) SbSystemSort(b, ec, ew, c);

#undef abs
#define abs(x) PoemAbs(x)

#endif  // POEM_NO_EMULATION

#endif  // STARBOARD

#endif  // STARBOARD_CLIENT_PORTING_POEM_STDLIB_POEM_H_
