#ifndef CSTRING_H
#define CSTRING_H

#include "size_t.h"

#ifdef __cplusplus
extern "C" {
#endif

int strncmp(const char*, const char*, size_t);

void* memcpy(void*, const void*, unsigned long);
void* memmove(void*, const void*, size_t);
void* memchr(const void*, int, size_t);
int memcpi(const void*, const void*, size_t);

int memcmp(const void*, const void*, size_t);

int strcmp(const char*, const char*);

#ifdef __cplusplus
const char* strstr(const char* pString, const char* pPattern);
#else
char* strstr(const char* pString, const char* pPattern);
#endif

char* strcpy(char* pDest, const char* pSrc);

size_t strlen(const char* pStr);

char* strcat(char*, const char*);

char* strncpy(char*, const char*, size_t);
char* strchr(const char*, int);
char* strrchr(const char*, int);

int strcasecmp(const char*, const char*);

#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
extern "C++" {
inline char* strstr(char* pString, const char* pPattern) {
    return const_cast< char* >(strstr(static_cast< const char* >(pString), pPattern));
}
}
#endif

#endif  // CSTRING_H