#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "helpers-misc.h"
#include "emb-logging.h"
int roundDouble(double src)
{
if(src < 0.0)
return (int) ceil(src - 0.5);
return (int)floor(src+0.5);
}
char startsWith(const char* pre, const char* str)
{
char result = 0;
size_t lenpre;
size_t lenstr;
if(!pre) { embLog_error("helpers-misc.c startsWith(), pre argument is null\n"); return 0; }
if(!str) { embLog_error("helpers-misc.c startsWith(), str argument is null\n"); return 0; }
lenpre = strlen(pre);
lenstr = strlen(str);
if(lenstr < lenpre)
return 0;
result = (char)strncmp(pre, str, lenpre);
if(result == 0)
return 1;
return 0;
}
char* rTrim(char* const str, char junk)
{
char* original = str + strlen(str);
while(*--original == junk);
*(original + 1) = '\0';
return str;
}
char* lTrim(char* const str, char junk)
{
char* original = str;
char* p = original;
int trimmed = 0;
do
{
if(*original != junk || trimmed)
{
trimmed = 1;
*p++ = *original;
}
}
while(*original++ != '\0');
return str;
}
static char const WHITESPACE[] = " \t\n\r";
static void get_trim_bounds(char const *s,
char const **firstWord,
char const **trailingSpace)
{
char const* lastWord = 0;
*firstWord = lastWord = s + strspn(s, WHITESPACE);
do
{
*trailingSpace = lastWord + strcspn(lastWord, WHITESPACE);
lastWord = *trailingSpace + strspn(*trailingSpace, WHITESPACE);
}
while (*lastWord != '\0');
}
char* copy_trim(char const *s)
{
char const *firstWord = 0, *trailingSpace = 0;
char* result = 0;
size_t newLength;
get_trim_bounds(s, &firstWord, &trailingSpace);
newLength = trailingSpace - firstWord;
result = (char*)malloc(newLength + 1);
memcpy(result, firstWord, newLength);
result[newLength] = '\0';
return result;
}
void inplace_trim(char* s)
{
char const *firstWord = 0, *trailingSpace = 0;
size_t newLength;
get_trim_bounds(s, &firstWord, &trailingSpace);
newLength = trailingSpace - firstWord;
memmove(s, firstWord, newLength);
s[newLength] = '\0';
}
char* emb_optOut(double num, char* str)
{
sprintf(str, "%.10f", num);
rTrim(str, '0');
rTrim(str, '.');
return str;
}
char* emb_strdup(const char* src)
{
char* dest = 0;
if(!src) { embLog_error("helpers-misc.c emb_strdup(), src argument is null\n"); return 0; }
dest = (char*)malloc(strlen(src) + 1);
if(!dest) { embLog_error("helpers-misc.c emb_strdup(), cannot allocate memory\n"); }
else { strcpy(dest, src); }
return dest;
}