/***************************************************************
 Copyright (c) 2021 ShenZhen Panath Technology Co., Ltd.
 SPDX-License-Identifier: Apache-2.0
 ***************************************************************/

#include "common.h"
#include "ros_libmem.h"

#ifdef ENABLE_DPDK_LIB
void rte_free(void *addr);
void *rte_malloc(const char *type, size_t size, unsigned align);
void *rte_calloc(const char *type, size_t num, size_t size, unsigned align);
#endif

void
ros_free(void *addr)
{
	if (unlikely(addr == NULL)) return;
#ifdef ENABLE_DPDK_LIB
    rte_free(addr);
#else
    free(addr);
#endif
}

void *
ros_malloc(size_t size)
{
#ifdef ENABLE_DPDK_LIB
    return rte_malloc(NULL, size, 64);
#else
	return malloc(size);
#endif
}

void *
ros_calloc(size_t nmemb, size_t size)
{
#ifdef ENABLE_DPDK_LIB
    return rte_calloc(NULL, nmemb, size, 64);
#else
	return calloc(nmemb, size);
#endif
}

/*****************************************************************************
     : ros_memset()
     : ڴ.
 ²㺯    : memset();
 ϲ㺯    :
 ȫֱ: .
 ޸ȫֱ: .
 ʵı  : .
 ޸ĵı  : .
     : pDest,       ڴʼַ;
               slSetChar,   õַ; ע: ֻȡֽ.
               ulCount,     õֽ.
     : .
 ֵ      : SUCESS,  ɹ;
               ,    ʧ.
 ע        : .
******************************************************************************/
void ros_memset( void *pDest, int slSetChar, int ulCount  )
{
    memset( pDest, (char)slSetChar, (size_t)ulCount );

    return;

}

/*****************************************************************************
     : ros_memzero()
     : ڴ.
 ²㺯    : memset();
 ϲ㺯    :
 ȫֱ: .
 ޸ȫֱ: .
 ʵı  : .
 ޸ĵı  : .
     : pDest,       ڴʼַ;
               ulCount,     ֽ.
     : .
 ֵ      : SUCESS,  ɹ;
               ,    ʧ.
 ע        : .
******************************************************************************/
void ros_memzero( void *pDest, int ulCount  )
{
    memset( pDest, (char)0, (size_t)ulCount );

    return;
}

/*****************************************************************************
     : ros_bzero()
     : ڴ.
 ²㺯    : memset();
 ϲ㺯    :
 ȫֱ: .
 ޸ȫֱ: .
 ʵı  : .
 ޸ĵı  : .
     : pDest,       ڴʼַ;
               ulCount,     ֽ.
     : .
 ֵ      : SUCESS,  ɹ;
               ,    ʧ.
 ע        : .
******************************************************************************/
void ros_bzero(void *s, size_t n)
{
    memset(s, 0, n);
    return;
}

/*****************************************************************************
     : ros_memcpy()
     : ڴ濽.
 ²㺯    : memcpy();
 ϲ㺯    :
 ȫֱ: ..
 ޸ȫֱ: .
 ʵı  : .
 ޸ĵı  : .
     : pDest,       ĿĻַ;
               pSrc,        Դַ;
               ulCount,     ֽ.
     : .
 ֵ      : SUCESS,  ɹ;
               ,    ʧ.
 ע        : ĿĻԴصʱ, ֤Դص,
               ڱдǰ.
******************************************************************************/
char *ros_memcpy( void *pDest, const void *pSrc, int ulCount  )
{
    /* ָ */
    if( (G_NULL == pDest) || (G_NULL == pSrc) )
    {
        return NULL;
    }

    return memcpy( pDest, pSrc, (size_t)ulCount );
}

/*****************************************************************************
     : ros_memmove()
     : ڴƶ.
 ²㺯    : memmove();
 ϲ㺯    :
 ȫֱ: .
 ޸ȫֱ: .
 ʵı  : .
 ޸ĵı  : .
     : pDest,       ƶĿĻַ;
               pSrc,        ƶԴַ;
               ulCount,     ƶֽ.
     : .
 ֵ      : SUCESS,  ɹ;
               ,    ʧ.
 ע        : ĿĻԴصʱ, ֤Դص,
               ڱдǰ.
******************************************************************************/
void ros_memmove( void *pDest, const void *pSrc, int ulCount  )
{
    /* ָ */
    if( (G_NULL == pDest) || (G_NULL == pSrc) )
    {
        return;
    }

    memmove( pDest, pSrc, (size_t)ulCount );

    return;

}


/*****************************************************************************
     : ros_memcmp()
     : ڴȽ.
 ²㺯    : memcmp();
 ϲ㺯    :
 ȫֱ: .
 ޸ȫֱ: .
 ʵı  : .
 ޸ĵı  : .
     : pBuf1,       1ַ;
               pBuf2,       2ַ;
               ulCount,     Ƚϵֽ.
     : .
 ֵ      : pslRet     ɹ, رȽϵĽ
                            0 ,     
                            < 0,    1Сڻ2
                            > 0,    1ڻ2
 ע        : .
******************************************************************************/
int ros_memcmp( const void *pBuf1, const void *pBuf2, int ulCount )
{
    return  memcmp( pBuf1, pBuf2, (size_t)ulCount );
}



/*****************************************************************************
     : ros_memchr()
     : ָڴ滺ҵһƥַ.
 ²㺯    : memchr();
 ϲ㺯    :
 ȫֱ: .
 ޸ȫֱ: .
 ʵı  : .
 ޸ĵı  : .
     : pBuf,        ҵڴ滺ʼַ;
               slFindChar,  ҵַ;
               ulCount,     ҵֽ.
     : .
 ֵ      : ҳɹ, ָƥַָ.
               , ؿָ.
 ע        : .
******************************************************************************/
char* ros_memchr( const void *pBuf, int slFindChar, int ulCount )
{
    return  memchr( pBuf, slFindChar, (size_t)ulCount );
}

