changed namepsaces, added doy

This commit is contained in:
mrbesen 2020-10-07 13:03:07 +02:00
parent fe6e8e27c6
commit 4967f73ca1
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
12 changed files with 112 additions and 64 deletions

10
inc/doy.h Normal file
View File

@ -0,0 +1,10 @@
#pragma once
#include <ctime>
namespace mrbesen::doy {
unsigned int getDOY(bool timezone = false, time_t time = 0); //get the doy of today or specific time, timezone = false -> dont compensate for timezone, true -> compensate for timezone, returns 0 on error
}

View File

@ -4,7 +4,7 @@
#include <iterator> #include <iterator>
#include <string> #include <string>
namespace mrbesen::Files { namespace mrbesen::files {
void parent(const std::string& child, std::string& out); //get the parent directory of a file or directory path void parent(const std::string& child, std::string& out); //get the parent directory of a file or directory path
void file(const std::string& path, std::string& out); //get the filename without the path void file(const std::string& path, std::string& out); //get the filename without the path

View File

@ -1,3 +1,4 @@
#include "doy.h"
#include "files.h" #include "files.h"
#include "util.h" #include "util.h"

View File

@ -2,7 +2,7 @@
#include <string> #include <string>
namespace mrbesen::Util { namespace mrbesen::util {
unsigned int count(const std::string& str, char c); //count occurances of c in str unsigned int count(const std::string& str, char c); //count occurances of c in str

15
src/doy.cpp Normal file
View File

@ -0,0 +1,15 @@
#include "doy.h"
unsigned int mrbesen::doy::getDOY(bool timezone, time_t ttime) {
if(ttime == 0) {
ttime = time(nullptr);
}
struct tm* timestruct = timezone ? localtime(&ttime) : gmtime(&ttime);
if(timestruct) {
return timestruct->tm_yday +1;
}
return 0;
}

View File

@ -5,7 +5,7 @@
#include <set> #include <set>
#include "util.h" #include "util.h"
void mrbesen::Files::parent(const std::string& child, std::string& out) { void mrbesen::files::parent(const std::string& child, std::string& out) {
//letzten path trenner finden //letzten path trenner finden
size_t pos = child.rfind('/', child.length() -2); //das erste Zeichen überspringen (könnte ein / sein) size_t pos = child.rfind('/', child.length() -2); //das erste Zeichen überspringen (könnte ein / sein)
if(pos == std::string::npos) if(pos == std::string::npos)
@ -16,7 +16,7 @@ void mrbesen::Files::parent(const std::string& child, std::string& out) {
out = ""; out = "";
} }
void mrbesen::Files::file(const std::string& path, std::string& out) { void mrbesen::files::file(const std::string& path, std::string& out) {
//letzten path trenner finden //letzten path trenner finden
size_t pos = path.rfind('/', path.length() -2); //das erste Zeichen überspringen (könnte ein / sein) size_t pos = path.rfind('/', path.length() -2); //das erste Zeichen überspringen (könnte ein / sein)
if(pos == std::string::npos) if(pos == std::string::npos)
@ -27,7 +27,7 @@ void mrbesen::Files::file(const std::string& path, std::string& out) {
out = path; out = path;
} }
void mrbesen::Files::extention(const std::string& path, std::string& ext) { void mrbesen::files::extention(const std::string& path, std::string& ext) {
std::string filestr; std::string filestr;
file(path, filestr); file(path, filestr);
size_t pos = filestr.rfind('.'); size_t pos = filestr.rfind('.');
@ -41,18 +41,18 @@ void mrbesen::Files::extention(const std::string& path, std::string& ext) {
} }
template<class Container> template<class Container>
bool mrbesen::Files::scan(const std::string& path, std::insert_iterator<Container> it, bool prefixdir, fileNameFilter fnf) { bool mrbesen::files::scan(const std::string& path, std::insert_iterator<Container> it, bool prefixdir, fileNameFilter fnf) {
return scan(path, [&](const std::string& p, FileType t){ it = p; }, prefixdir, fnf); return scan(path, [&](const std::string& p, FileType t){ it = p; }, prefixdir, fnf);
} }
//curently only these are supported, because iterators may break on others upon insertion //curently only these are supported, because iterators may break on others upon insertion
template bool mrbesen::Files::scan<std::list<std::string>>(const std::string&, std::insert_iterator<std::list<std::string>>, bool, fileNameFilter); template bool mrbesen::files::scan<std::list<std::string>>(const std::string&, std::insert_iterator<std::list<std::string>>, bool, fileNameFilter);
template bool mrbesen::Files::scan<std::set<std::string>>(const std::string&, std::insert_iterator<std::set<std::string>>, bool, fileNameFilter); template bool mrbesen::files::scan<std::set<std::string>>(const std::string&, std::insert_iterator<std::set<std::string>>, bool, fileNameFilter);
template bool mrbesen::Files::scan<std::multiset<std::string>>(const std::string&, std::insert_iterator<std::multiset<std::string>>, bool, fileNameFilter); template bool mrbesen::files::scan<std::multiset<std::string>>(const std::string&, std::insert_iterator<std::multiset<std::string>>, bool, fileNameFilter);
bool mrbesen::Files::scan(const std::string& path, fileCallback clb, bool prefixdir, fileNameFilter fnf) { bool mrbesen::files::scan(const std::string& path, fileCallback clb, bool prefixdir, fileNameFilter fnf) {
std::string path_ = path; std::string path_ = path;
mrbesen::Util::insertEnd(path_, "/"); mrbesen::util::insertEnd(path_, "/");
::DIR* dir = opendir(path_.c_str()); ::DIR* dir = opendir(path_.c_str());
if(!dir) { if(!dir) {

View File

@ -2,7 +2,7 @@
#include <algorithm> #include <algorithm>
unsigned int mrbesen::Util::count(const std::string& str, char c) { unsigned int mrbesen::util::count(const std::string& str, char c) {
size_t pos = 0; size_t pos = 0;
long count = -1; long count = -1;
do { do {
@ -16,7 +16,7 @@ bool icompare_pred(unsigned char a, unsigned char b) {
return std::tolower(a) == std::tolower(b); return std::tolower(a) == std::tolower(b);
} }
bool mrbesen::Util::equalsIgnoreCase(const std::string& a, const std::string& b, size_t max) { bool mrbesen::util::equalsIgnoreCase(const std::string& a, const std::string& b, size_t max) {
size_t al = a.size(), bl = b.size(); size_t al = a.size(), bl = b.size();
if((al == 0 && bl == 0) || max == 0) return true; if((al == 0 && bl == 0) || max == 0) return true;
@ -34,7 +34,7 @@ bool mrbesen::Util::equalsIgnoreCase(const std::string& a, const std::string& b,
} }
} }
void mrbesen::Util::toLower(const std::string& in, std::string& out) { void mrbesen::util::toLower(const std::string& in, std::string& out) {
if(&in == &out) { if(&in == &out) {
//wenn beide strings identisch sind, inplace funktion verwenden; //wenn beide strings identisch sind, inplace funktion verwenden;
@ -49,13 +49,13 @@ void mrbesen::Util::toLower(const std::string& in, std::string& out) {
} }
} }
void mrbesen::Util::toLower(std::string& in) { void mrbesen::util::toLower(std::string& in) {
for(size_t p = 0; p < in.size(); p++) { for(size_t p = 0; p < in.size(); p++) {
in[p] = std::tolower(in[p]); in[p] = std::tolower(in[p]);
} }
} }
bool mrbesen::Util::endsWith(const std::string& str, const std::string& ending) { bool mrbesen::util::endsWith(const std::string& str, const std::string& ending) {
size_t es = ending.size(); size_t es = ending.size();
size_t ss = str.size(); size_t ss = str.size();
if(es > ss) return false; if(es > ss) return false;
@ -64,14 +64,14 @@ bool mrbesen::Util::endsWith(const std::string& str, const std::string& ending)
return str.rfind(ending) == (ss - es); return str.rfind(ending) == (ss - es);
} }
bool mrbesen::Util::startsWith(const std::string& str, const std::string& start) { bool mrbesen::util::startsWith(const std::string& str, const std::string& start) {
if(start.size() > str.size()) return false; if(start.size() > str.size()) return false;
if(start.size() == 0) return true; if(start.size() == 0) return true;
return str.find(start) == 0; return str.find(start) == 0;
} }
bool mrbesen::Util::removeEnd(std::string& str, const std::string& ending) { bool mrbesen::util::removeEnd(std::string& str, const std::string& ending) {
if(ending.empty()) return false; if(ending.empty()) return false;
if(endsWith(str, ending)) { if(endsWith(str, ending)) {
@ -81,7 +81,7 @@ bool mrbesen::Util::removeEnd(std::string& str, const std::string& ending) {
return false; return false;
} }
bool mrbesen::Util::removeStart(std::string& str, const std::string& start) { bool mrbesen::util::removeStart(std::string& str, const std::string& start) {
if(start.empty()) return false; if(start.empty()) return false;
if(startsWith(str, start)) { if(startsWith(str, start)) {
@ -91,7 +91,7 @@ bool mrbesen::Util::removeStart(std::string& str, const std::string& start) {
return false; return false;
} }
bool mrbesen::Util::insertEnd(std::string& str, const std::string& ending) { bool mrbesen::util::insertEnd(std::string& str, const std::string& ending) {
if(ending.empty()) return false; if(ending.empty()) return false;
if(endsWith(str, ending)) return false; if(endsWith(str, ending)) return false;
@ -100,7 +100,7 @@ bool mrbesen::Util::insertEnd(std::string& str, const std::string& ending) {
return true; return true;
} }
bool mrbesen::Util::insertStart(std::string& str, const std::string& start) { bool mrbesen::util::insertStart(std::string& str, const std::string& start) {
if(start.empty()) return false; if(start.empty()) return false;
if(startsWith(str, start)) return false; if(startsWith(str, start)) return false;
@ -109,7 +109,7 @@ bool mrbesen::Util::insertStart(std::string& str, const std::string& start) {
return true; return true;
} }
unsigned int mrbesen::Util::split(const std::string& str, const std::string& token, std::string* out, unsigned int count) { unsigned int mrbesen::util::split(const std::string& str, const std::string& token, std::string* out, unsigned int count) {
StringSpliterator spl(str, token); StringSpliterator spl(str, token);
for(unsigned int i = 0; i < count; ++i) { for(unsigned int i = 0; i < count; ++i) {
out[i] = *spl; out[i] = *spl;
@ -119,7 +119,7 @@ unsigned int mrbesen::Util::split(const std::string& str, const std::string& tok
return count; return count;
} }
void mrbesen::Util::trim(std::string& str, char c) { void mrbesen::util::trim(std::string& str, char c) {
size_t first = str.find_first_not_of(c); size_t first = str.find_first_not_of(c);
if(first == std::string::npos) { if(first == std::string::npos) {
str = ""; str = "";
@ -129,7 +129,7 @@ void mrbesen::Util::trim(std::string& str, char c) {
str = str.substr(first, last-first); str = str.substr(first, last-first);
} }
std::string mrbesen::Util::bytesToBase16(char* buffer, unsigned int len) { std::string mrbesen::util::bytesToBase16(char* buffer, unsigned int len) {
static const char hexmap[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; static const char hexmap[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
std::string s(len << 1, ' '); std::string s(len << 1, ' ');
for (unsigned int i = 0; i < len; ++i) { for (unsigned int i = 0; i < len; ++i) {
@ -139,7 +139,7 @@ std::string mrbesen::Util::bytesToBase16(char* buffer, unsigned int len) {
return s; return s;
} }
std::string mrbesen::Util::bytesToBase64(char* buffer, unsigned int len) { std::string mrbesen::util::bytesToBase64(char* buffer, unsigned int len) {
//from: https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp/index#cpp-base64-cpp //from: https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp/index#cpp-base64-cpp
if(len == 0) return ""; if(len == 0) return "";
@ -174,32 +174,32 @@ std::string mrbesen::Util::bytesToBase64(char* buffer, unsigned int len) {
} }
mrbesen::Util::StringSpliterator::StringSpliterator(const std::string& d, const std::string& token) : data(d), token(token) { mrbesen::util::StringSpliterator::StringSpliterator(const std::string& d, const std::string& token) : data(d), token(token) {
//trim //trim
while(mrbesen::Util::removeStart(data, token)); while(mrbesen::util::removeStart(data, token));
while(mrbesen::Util::removeEnd(data, token)); while(mrbesen::util::removeEnd(data, token));
findNext(); findNext();
} }
mrbesen::Util::StringSpliterator::~StringSpliterator() {} mrbesen::util::StringSpliterator::~StringSpliterator() {}
std::string mrbesen::Util::StringSpliterator::operator*() const { std::string mrbesen::util::StringSpliterator::operator*() const {
return data.substr(lasttok, (nexttok - lasttok)-token.size()); return data.substr(lasttok, (nexttok - lasttok)-token.size());
} }
mrbesen::Util::StringSpliterator& mrbesen::Util::StringSpliterator::operator++() { mrbesen::util::StringSpliterator& mrbesen::util::StringSpliterator::operator++() {
findNext(); findNext();
return *this; return *this;
} }
mrbesen::Util::StringSpliterator mrbesen::Util::StringSpliterator::operator++(int) { mrbesen::util::StringSpliterator mrbesen::util::StringSpliterator::operator++(int) {
StringSpliterator ret = *this; StringSpliterator ret = *this;
findNext(); findNext();
return ret; return ret;
} }
void mrbesen::Util::StringSpliterator::findNext() { void mrbesen::util::StringSpliterator::findNext() {
if(!operator bool()) return; if(!operator bool()) return;
lasttok = nexttok; lasttok = nexttok;
@ -214,6 +214,6 @@ void mrbesen::Util::StringSpliterator::findNext() {
nexttok += token.size(); nexttok += token.size();
} }
mrbesen::Util::StringSpliterator::operator bool() const { mrbesen::util::StringSpliterator::operator bool() const {
return lasttok < data.length() && nexttok >= lasttok; return lasttok < data.length() && nexttok >= lasttok;
} }

19
tests/doytests.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "test.h"
#include "doy.h"
using namespace mrbesen::doy;
int testGetDoy() {
//wird nur ohne timezone getestet!
ASSERT(getDOY(false, 1) == 1, ""); //01.01.1970
ASSERT(getDOY(false, 31449600) == 365, ""); //31.12.1970 00:00:00
ASSERT(getDOY(false, 31535999) == 365, ""); //31.12.1970 23:59:59
ASSERT(getDOY(false, 31536000) == 1, ""); //01.01.1971 00:00:00
ASSERT(getDOY(false, 131284800) == 59, ""); //28.02.1974 12:00:00
return TESTGOOD;
}

View File

@ -12,20 +12,20 @@ int testFiles_parent() {
std::string out, out2; std::string out, out2;
std::string testpath1 = "/asdf1/asdf2/test.png"; std::string testpath1 = "/asdf1/asdf2/test.png";
Files::parent(testpath1, out); files::parent(testpath1, out);
ASSERT(out == "/asdf1/asdf2/", out); ASSERT(out == "/asdf1/asdf2/", out);
Files::parent(out, out2); files::parent(out, out2);
ASSERT(out2 == "/asdf1/", out2); ASSERT(out2 == "/asdf1/", out2);
Files::parent(out2, out); files::parent(out2, out);
ASSERT(out == "/", out); ASSERT(out == "/", out);
testpath1 = "assets/tex/img1.png"; testpath1 = "assets/tex/img1.png";
Files::parent(testpath1, out); files::parent(testpath1, out);
ASSERT(out == "assets/tex/", out); ASSERT(out == "assets/tex/", out);
Files::parent("asd", out); files::parent("asd", out);
ASSERT(out == "", out); ASSERT(out == "", out);
return TESTGOOD; return TESTGOOD;
@ -34,22 +34,22 @@ int testFiles_parent() {
int testFiles_file() { int testFiles_file() {
std::string a; std::string a;
Files::file("/abc/def/123.txt", a); files::file("/abc/def/123.txt", a);
ASSERT(a == "123.txt", "normalfile" << a); ASSERT(a == "123.txt", "normalfile" << a);
Files::file("/abc/def/.gitignore", a); files::file("/abc/def/.gitignore", a);
ASSERT(a == ".gitignore", "dotfiles" << a); ASSERT(a == ".gitignore", "dotfiles" << a);
Files::file("/abc/def/executeable", a); files::file("/abc/def/executeable", a);
ASSERT(a == "executeable", "no extention" << a); ASSERT(a == "executeable", "no extention" << a);
Files::file("123.txt", a); files::file("123.txt", a);
ASSERT(a == "123.txt", "normalfile - nopath" << a); ASSERT(a == "123.txt", "normalfile - nopath" << a);
Files::file(".gitignore", a); files::file(".gitignore", a);
ASSERT(a == ".gitignore", "dotfiles - nopath " << a); ASSERT(a == ".gitignore", "dotfiles - nopath " << a);
Files::file("executeable", a); files::file("executeable", a);
ASSERT(a == "executeable", "no extention - nopath " << a); ASSERT(a == "executeable", "no extention - nopath " << a);
return TESTGOOD; return TESTGOOD;
@ -58,46 +58,46 @@ int testFiles_file() {
int testFiles_extention() { int testFiles_extention() {
std::string a; std::string a;
Files::extention("abc/asd/1.txt", a); files::extention("abc/asd/1.txt", a);
ASSERT(a == "txt", a); ASSERT(a == "txt", a);
Files::extention("1.txt", a); files::extention("1.txt", a);
ASSERT(a == "txt", a); ASSERT(a == "txt", a);
Files::extention("/1.txt", a); files::extention("/1.txt", a);
ASSERT(a == "txt", ""); ASSERT(a == "txt", "");
Files::extention("/a.b.c/ad./1.txt", a); files::extention("/a.b.c/ad./1.txt", a);
ASSERT(a == "txt", ""); ASSERT(a == "txt", "");
Files::extention("a.b.c/ad./1.txt", a); files::extention("a.b.c/ad./1.txt", a);
ASSERT(a == "txt", ""); ASSERT(a == "txt", "");
Files::extention("./1.txt", a); files::extention("./1.txt", a);
ASSERT(a == "txt", ""); ASSERT(a == "txt", "");
Files::extention("/a/ad/1", a); files::extention("/a/ad/1", a);
ASSERT(a == "", ""); ASSERT(a == "", "");
Files::extention("/a/ad/", a); files::extention("/a/ad/", a);
ASSERT(a == "", ""); ASSERT(a == "", "");
Files::extention("/", a); files::extention("/", a);
ASSERT(a == "", ""); ASSERT(a == "", "");
Files::extention("/a", a); files::extention("/a", a);
ASSERT(a == "", ""); ASSERT(a == "", "");
Files::extention("/a.", a); files::extention("/a.", a);
ASSERT(a == "", ""); ASSERT(a == "", "");
Files::extention("/a.b", a); files::extention("/a.b", a);
ASSERT(a == "b", ""); ASSERT(a == "b", "");
Files::extention("/sad.asd/ab", a); files::extention("/sad.asd/ab", a);
ASSERT(a == "", ""); ASSERT(a == "", "");
Files::extention("sad.asd/ab", a); files::extention("sad.asd/ab", a);
ASSERT(a == "", ""); ASSERT(a == "", "");
return TESTGOOD; return TESTGOOD;
@ -108,13 +108,13 @@ int testFiles_scan() {
std::string path = "./tests"; std::string path = "./tests";
std::list<std::string> out, out2; std::list<std::string> out, out2;
ASSERT(Files::scan(path, std::inserter(out, out.begin()), false), ""); ASSERT(files::scan(path, std::inserter(out, out.begin()), false), "");
ASSERT(Files::scan(path, std::inserter(out2, out2.begin()), true), ""); ASSERT(files::scan(path, std::inserter(out2, out2.begin()), true), "");
ASSERT(out.size() == out2.size(), out.size() << " " << out2.size()); ASSERT(out.size() == out2.size(), out.size() << " " << out2.size());
std::set<std::string> out3; std::set<std::string> out3;
ASSERT(Files::scan(path, std::inserter(out3, out3.begin()), false, [](const std::string& str, Files::FileType t){ return mrbesen::Util::startsWith(str, "."); }), ""); ASSERT(files::scan(path, std::inserter(out3, out3.begin()), false, [](const std::string& str, files::FileType t){ return mrbesen::util::startsWith(str, "."); }), "");
ASSERT(out3.size() == 2, out3.size()); ASSERT(out3.size() == 2, out3.size());
ASSERT(out3.find(".") != out3.end(), ""); ASSERT(out3.find(".") != out3.end(), "");
ASSERT(out3.find("..") != out3.end(), ""); ASSERT(out3.find("..") != out3.end(), "");

View File

@ -19,9 +19,12 @@ int testUtil_base();
int testStringSpliterator(); int testStringSpliterator();
int testUtilSplit(); int testUtilSplit();
int testGetDoy();
test_t tests[] = {testFiles_parent, testFiles_file, testFiles_extention, testFiles_scan, test_t tests[] = {testFiles_parent, testFiles_file, testFiles_extention, testFiles_scan,
testUtil_Count, testUtil_equalsIgnoreCase, testUtil_toLower, testUtil_start_endWith, testUtil_removeStart_End, testUtil_insertStart_End, testUtil_trim, testUtil_base, testUtil_Count, testUtil_equalsIgnoreCase, testUtil_toLower, testUtil_start_endWith, testUtil_removeStart_End, testUtil_insertStart_End, testUtil_trim, testUtil_base,
testStringSpliterator, testUtilSplit, testStringSpliterator, testUtilSplit,
testGetDoy,
NULL}; NULL};
int main(int argc, char** argv) { int main(int argc, char** argv) {

View File

@ -2,7 +2,7 @@
#include "util.h" #include "util.h"
using namespace mrbesen::Util; using namespace mrbesen::util;
int testStringSpliterator() { int testStringSpliterator() {

View File

@ -1,7 +1,7 @@
#include "util.h" #include "util.h"
#include "test.h" #include "test.h"
using namespace mrbesen::Util; using namespace mrbesen::util;
int testUtil_Count() { int testUtil_Count() {
std::string test1 = "ababababa"; std::string test1 = "ababababa";