Es++ Class: StrDef

 Es++ Class Library  Es++ Samples 

Source code

/******************************************************************************
 *
 * Copyright (c) 2017 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer.
 *  
 * 2. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 *  StrDef.h
 *
 *****************************************************************************/


#pragma once

#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <errno.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <limits.h>
#include <assert.h>
#include <wchar.h>

#include <assert.h>

namespace Es {

// strdup
inline wchar_t* __strdup(const wchar_t *source ) 
{
  assert(source);
  
  wchar_t* string = new wchar_t[wcslen(source)+1];
  wcscpy(string, source);
  return string;
}

// strdup
inline char* __strdup(const char *source) 
{
  assert(source);
  char* string = new char[strlen(source)+1];
  strcpy(string, source);
  return string;
}


// strtok: split wide-character string into tokens

inline wchar_t *__strtok(wchar_t *token, const wchar_t *delimit, wchar_t **ptr)
{
  assert(token);
  assert(delimit);
  
  return wcstok(token, delimit, ptr);
}


inline char *__strtok(char *token, const char *delimit, char **unused)
{
  assert(token);
  assert(delimit);

  return strtok(token, delimit);
}



//strcat
inline wchar_t* __strcat(wchar_t *dest, const wchar_t *source) 
{
  assert(dest);
  assert(source);
  return wcscat(dest, source);
}

inline char* __strcat(char *dest, const char *source) 
{
  assert(dest);
  assert(source);

  return strcat(dest, source);
}



//strncat
inline wchar_t* __strncat(wchar_t *dest, const wchar_t *source, size_t count) 
{
  assert(dest);
  assert(source);
  assert(count>0);
  
  return wcsncat(dest, source, count);
}

inline char* __strncat(char *dest, const char *source, size_t count) 
{
  assert(dest);
  assert(source);
  assert(count>0);

  return strncat(dest, source, count);
}



//strcmp
inline int __strcmp(const wchar_t *string1, const wchar_t *string2) 
{
  assert(string1);
  assert(string2);
  
  return wcscmp(string1, string2);
}

//strcmp
inline int __strcmp(const char *string1, const char *string2) 
{
  assert(string1);
  assert(string2);

  return strcmp(string1, string2);
}

inline int __strcasecmp(const wchar_t *string1,const wchar_t *string2)
{
  assert(string1);
  assert(string2);

  return wcscasecmp(string1,string2);
}

inline int __strcasecmp(const char *string1, const char *string2)
{
  assert(string1);
  assert(string2);

  return strcasecmp(string1,string2);
}


//strncmp
inline int __strncmp(const wchar_t *string1, const wchar_t *string2, size_t count) 
{
  assert(string1);
  assert(string2);
  assert(count>0);
  
  return wcsncmp(string1, string2, count);
}

inline int __strncmp(const char *string1, const char *string2, size_t count) 
{
  assert(string1);
  assert(string2);
  assert(count>0);

  return strncmp(string1, string2, count);
}

//strnicmp
inline int __strncasecmp(const wchar_t *string1, const wchar_t *string2, size_t count) 
{
  assert(string1);
  assert(string2);
  assert(count>0);

  return wcsncasecmp(string1, string2, count);
}

inline int __strncasecmp(const char *string1, const char *string2, size_t count) 
{
  assert(string1);
  assert(string2);
  assert(count>0);

  return strncasecmp(string1, string2, count);
}



//strspn
inline size_t __strspn(const wchar_t *str,const wchar_t *accept)
{
  assert(str);
  assert(accept);
  
  return wcsspn(str, accept);
}

inline size_t __strspn(const char *str, const char *accept)
{
  assert(str);
  assert(accept);

  return strspn(str, accept);
}


  //strcspn
inline size_t __strcspn(const wchar_t *str,const wchar_t *reject)
{
  assert(str);
  assert(reject);
  
  return wcscspn(str, reject);
}

inline size_t __strcspn(const char *str, const char *reject)
{
  assert(str);
  assert(reject);

  return strcspn(str, reject);
}

//strncpy
inline wchar_t *__strncpy(wchar_t *dest, const wchar_t *source, size_t count) 
{
  assert(dest);
  assert(source);
  assert(count>0);
  
  return wcsncpy(dest, source, count);
}

inline char *__strncpy(char *dest, const char *source, size_t count) 
{
  assert(dest);
  assert(source);
  assert(count>0);

  return strncpy(dest, source, count);
}



// strtod
inline double __strtod(const wchar_t *nptr, wchar_t **endptr)
{
  assert(nptr);
  assert(endptr);
  
  return wcstod(nptr, endptr);
}

inline double __strtod(char *nptr, char **endptr)
{
  assert(nptr);
  assert(endptr);

  return strtod(nptr,endptr);
}

// strtol
inline long __strtol(const wchar_t *nptr, wchar_t **endptr, int base) 
{
  assert(nptr);
  assert(endptr);
  assert(base>=0);
  
  return wcstol(nptr, endptr, base);
}

// strtol
inline long strtol(const char *nptr, char **endptr, int base) 
{
  assert(nptr);
  assert(endptr);
  assert(base>=0);

  return strtol(nptr, endptr, base);
}

// strtoul
inline unsigned long __strtoul(const wchar_t *nptr, wchar_t **endptr, int base)
{
  assert(nptr);
  assert(endptr);
  assert(base>=0);
  
  return wcstoul(nptr,endptr, base);
}

inline unsigned long __strtoul(const char *nptr, char **endptr, int base)
{
  assert(nptr);
  assert(endptr);
  assert(base>=0);

  return strtoul(nptr,endptr, base);
}



//strlen
inline size_t __strlen(const wchar_t *string) 
{
  assert(string);
  
  return wcslen(string);
}

inline size_t __strlen(const char *string) 
{
  assert(string);

  return strlen(string);
}



//strcpy
inline wchar_t* __strcpy(wchar_t *dest, const wchar_t *source) 
{
  assert(dest);
  assert(source);
  
  return wcscpy(dest, source);
}


inline char* __strcpy(char *dest, const char *source) 
{
  assert(dest);
  assert(source);

  return strcpy(dest, source);
}




//strchr
inline const wchar_t* __strchr(const wchar_t *string, wchar_t c) 
{
  assert(string);
  
  return wcschr(string, c);
}

inline const char* __strchr(const char *string, char c) 
{
  assert(string);

  return strchr(string, c);
}



//strstr
inline const wchar_t* __strstr(const wchar_t *string1, const wchar_t *string2) 
{
  assert(string1);
  assert(string2);

  return wcsstr(string1, string2);
}

inline const char* __strstr(const char *string1, const char *string2) 
{
  assert(string1);
  assert(string2);

  return strstr(string1, string2);
}



//strrchr
inline wchar_t *__strrchr(wchar_t *str, wchar_t c)
{ 
  assert(str);
  
  return wcsrchr(str, c); 
}

inline const char *__strrchr(const char *str, char c)
{
  assert(str);

  return strrchr(str, c); 
}
    
//2015/02/22 Added __startsWith and __endsWith.
inline bool __startsWith(const char* string, const char* start)
{
  assert(string);
  assert(start);
  int len  = strlen(string);
  int slen = strlen(start);

  if (slen > len) {
    return false;
  } 
  if (strncmp(string, start, slen) == 0) {
    return true;
  } else {
    return false;    
  }
}

inline bool __startsWith(const wchar_t* string, const wchar_t* start)
{
  assert(string);
  assert(start);
  int len  = wcslen(string);
  int slen = wcslen(start);

  if (slen > len) {
    return false;
  } 
  if (wcsncmp(string, start, slen) == 0) {
    return true;
  } else {
    return false;    
  }
}

inline bool __endsWith(const char* string, char ch)
{
  assert(string);
  int len = strlen(string);
  if (len > 0 && string[len-1] == ch) {
    return true;
  } else {
    return false;
  }
}

inline bool __endsWith(const wchar_t* string, wchar_t ch)
{
  assert(string);
  int len = __strlen(string);
  if (len > 0 && string[len-1] == ch) {
    return true;
  } else {
    return false;
  }
}
    
//2015/02/22
inline bool __endsWith(const char* string, const char* end)
{
  assert(string);
  assert(end);
  int len  = strlen(string);
  int elen = strlen(end);

  if (elen > len) {
    return false;
  } 
  const char* start = string + (len - elen);
  if (strncmp(start, end, elen) == 0) {
    return true;
  } else {
    return false;    
  }
}

inline bool __endsWith(const wchar_t* string, const wchar_t* end)
{
  assert(string);
  assert(end);
  int len  = wcslen(string);
  int elen = wcslen(end);

  if (elen > len) {
    return false;
  } 
  const wchar_t* start = string + (len - elen);
  if (wcsncmp(start, end, elen) == 0) {
    return true;
  } else {
    return false;    
  }
}

//strftime
inline size_t __strftime(wchar_t *dest, size_t maxsize, const wchar_t *format, const struct tm *timeptr) 
{
  assert(dest);
  assert(maxsize>0);
  assert(format);
  assert(timeptr);
  
  return wcsftime(dest, maxsize, format, timeptr);
}

inline size_t __strftime(char *dest, size_t maxsize, const char *format, const struct tm *timeptr) 
{
  assert(dest);
  assert(maxsize>0);
  assert(format);
  assert(timeptr);

  return strftime(dest, maxsize, format, timeptr);
}



//memchr
inline wchar_t* __memchr(wchar_t *a, wchar_t b, size_t c) {

  return wmemchr(a,b,c);
}


inline char* __memchr(const char *a, char b, size_t c) {
  return (char*)memchr((void*)a, b, c);
}



//strpbrk
inline const wchar_t* __strpbrk(const wchar_t *a, const wchar_t *b) 
{
  assert(a);
  assert(b);
  
  return wcspbrk(a,b);
}

inline const char* __strpbrk(const char *a, const char *b) 
{
  assert(a);
  assert(b);

  return strpbrk(a, b);
}



inline int __strcoll(const wchar_t* a, const wchar_t* b)
{
  assert(a);
  assert(b);

  return wcscoll(a, b);
}

inline int __strcoll(const char* a, const char* b)
{
  assert(a);
  assert(b);

  return strcoll(a, b);
}



//strxfrm
inline size_t __strxfrm(wchar_t *dest, const wchar_t *source, size_t count)
{
  assert(dest);
  assert(source);
  assert(count>0);
  
  return wcsxfrm(dest, source, count);
}


inline size_t _strxfrm(char *dest, const char *source, size_t count)
{
  assert(dest);
  assert(source);
  assert(count>0);
  
  return  strxfrm(dest, source, count);
}


//vprintf

inline int __vprintf(const wchar_t *format,  va_list args) 
{
  return vwprintf(format, args);
}

inline int __vprintf(const char *format,  va_list args) 
{
  return vprintf(format, args);
}


//vsnprintf
inline int __vsnprintf(wchar_t *dest, size_t maxlen, const wchar_t *format, va_list args) 
{
  assert(dest);
  assert(maxlen>0);
  assert(format);
  
  return vswprintf(dest, maxlen, format, args);
}

inline int __vsnprintf(char *dest, size_t maxlen, const char *format, va_list args) 
{
  assert(dest);
  assert(maxlen>0);
  assert(format);

  return vsnprintf(dest, maxlen, format, args);
}




//memcmp

inline int __memcmp(const wchar_t *buf1, const wchar_t *buf2, size_t count)
{
  assert(buf1);
  assert(buf2);
  assert(count>0);
  
  return wmemcmp(buf1, buf2, count);
}

inline int __memcmp(const char *buf1, const char *buf2, size_t count)
{
  assert(buf1);
  assert(buf2);
  assert(count>0);

  return memcmp(buf1, buf2, count);
}


//memcpy

inline wchar_t *__memcpy(wchar_t *dest, const wchar_t *source, size_t count) 
{
  assert(dest);
  assert(source);
  assert(count>0);
  
  return wmemcpy(dest, source, count);
}

inline char *__memcpy(char *dest, const char *source, size_t count)
{
  assert(dest);
  assert(source);
  assert(count>0);

  return (char*)memcpy(dest,  source, count);
}


//memset
inline wchar_t *__memset(wchar_t *dest, wchar_t ch, size_t size)
{
  assert(dest);
  
  return wmemset(dest, ch, size);
}

inline char *__memset(char *dest, char ch, size_t size)
{
  assert(dest);
  
  return (char*)memset(dest, ch, size);
}

}

  

Last modified: 27 July 2017

Copyright (c) 2009-2017 Antillia.com ALL RIGHTS RESERVED.