Update import

This commit is contained in:
vczh
2021-11-06 00:04:55 -07:00
parent d46e5eaf64
commit c4302be577
8 changed files with 5625 additions and 5060 deletions
+224
View File
@@ -0,0 +1,224 @@
/***********************************************************************
THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY
DEVELOPER: Zihan Chen(vczh)
***********************************************************************/
#include "Vlpp.h"
/***********************************************************************
.\CONSOLE.LINUX.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#include <iostream>
#include <string>
#ifndef VCZH_GCC
static_assert(false, "Do not build this file for Windows applications.");
#endif
namespace vl
{
namespace console
{
/***********************************************************************
Console
***********************************************************************/
void Console::Write(const wchar_t* string, vint length)
{
std::wstring s(string, string + length);
std::wcout << s << std::ends;
}
WString Console::Read()
{
std::wstring s;
std::getline(std::wcin, s, L'\n');
return s.c_str();
}
void Console::SetColor(bool red, bool green, bool blue, bool light)
{
int color = (blue ? 1 : 0) * 4 + (green ? 1 : 0) * 2 + (red ? 1 : 0);
if (light)
wprintf(L"\x1B[00;3%dm", color);
else
wprintf(L"\x1B[01;3%dm", color);
}
void Console::SetTitle(const WString& string)
{
}
}
}
/***********************************************************************
.\PRIMITIVES\DATETIME.LINUX.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#include <time.h>
#include <memory.h>
#include <sys/time.h>
#ifndef VCZH_GCC
static_assert(false, "Do not build this file for Windows applications.");
#endif
namespace vl
{
/***********************************************************************
DateTime
***********************************************************************/
DateTime ConvertTMToDateTime(tm* timeinfo, vint milliseconds)
{
time_t timer = mktime(timeinfo);
DateTime dt;
dt.year = timeinfo->tm_year + 1900;
dt.month = timeinfo->tm_mon + 1;
dt.day = timeinfo->tm_mday;
dt.dayOfWeek = timeinfo->tm_wday;
dt.hour = timeinfo->tm_hour;
dt.minute = timeinfo->tm_min;
dt.second = timeinfo->tm_sec;
dt.milliseconds = milliseconds;
// in Linux and macOS, filetime will be mktime(t) * 1000 + gettimeofday().tv_usec / 1000
dt.filetime = (vuint64_t)timer * 1000 + milliseconds;
dt.totalMilliseconds = (vuint64_t)timer * 1000 + milliseconds;
return dt;
}
DateTime DateTime::LocalTime()
{
struct timeval tv;
gettimeofday(&tv, nullptr);
tm* timeinfo = localtime(&tv.tv_sec);
return ConvertTMToDateTime(timeinfo, tv.tv_usec / 1000);
}
DateTime DateTime::UtcTime()
{
struct timeval tv;
gettimeofday(&tv, nullptr);
tm* timeinfo = gmtime(&tv.tv_sec);
return ConvertTMToDateTime(timeinfo, tv.tv_usec / 1000);
}
DateTime DateTime::FromDateTime(vint _year, vint _month, vint _day, vint _hour, vint _minute, vint _second, vint _milliseconds)
{
tm timeinfo;
memset(&timeinfo, 0, sizeof(timeinfo));
timeinfo.tm_year = _year - 1900;
timeinfo.tm_mon = _month - 1;
timeinfo.tm_mday = _day;
timeinfo.tm_hour = _hour;
timeinfo.tm_min = _minute;
timeinfo.tm_sec = _second;
timeinfo.tm_isdst = -1;
return ConvertTMToDateTime(&timeinfo, _milliseconds);
}
DateTime DateTime::FromFileTime(vuint64_t filetime)
{
time_t timer = (time_t)(filetime / 1000);
tm* timeinfo = localtime(&timer);
return ConvertTMToDateTime(timeinfo, filetime % 1000);
}
DateTime DateTime::ToLocalTime()
{
time_t localTimer = time(nullptr);
time_t utcTimer = mktime(gmtime(&localTimer));
time_t timer = (time_t)(filetime / 1000) + localTimer - utcTimer;
tm* timeinfo = localtime(&timer);
return ConvertTMToDateTime(timeinfo, milliseconds);
}
DateTime DateTime::ToUtcTime()
{
time_t timer = (time_t)(filetime / 1000);
tm* timeinfo = gmtime(&timer);
return ConvertTMToDateTime(timeinfo, milliseconds);
}
DateTime DateTime::Forward(vuint64_t milliseconds)
{
return FromFileTime(filetime + milliseconds);
}
DateTime DateTime::Backward(vuint64_t milliseconds)
{
return FromFileTime(filetime - milliseconds);
}
}
/***********************************************************************
.\STRINGS\CONVERSION.LINUX.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#include <stdio.h>
#include <ctype.h>
#include <wctype.h>
namespace vl
{
/***********************************************************************
String Conversions (buffer walkthrough)
***********************************************************************/
vint _wtoa(const wchar_t* w, char* a, vint chars)
{
return wcstombs(a, w, chars - 1) + 1;
}
vint _atow(const char* a, wchar_t* w, vint chars)
{
return mbstowcs(w, a, chars - 1) + 1;
}
}
/***********************************************************************
.\UNITTEST\UNITTEST.LINUX.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#ifndef VCZH_GCC
static_assert(false, "Do not build this file for Windows applications.");
#endif
namespace vl
{
namespace unittest
{
/***********************************************************************
UnitTest
***********************************************************************/
bool UnitTest::IsDebuggerAttached()
{
return false;
}
}
}
+282
View File
@@ -0,0 +1,282 @@
/***********************************************************************
THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY
DEVELOPER: Zihan Chen(vczh)
***********************************************************************/
#include "Vlpp.h"
/***********************************************************************
.\CONSOLE.WINDOWS.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#include <Windows.h>
#ifndef VCZH_MSVC
static_assert(false, "Do not build this file for non-Windows applications.");
#endif
namespace vl
{
namespace console
{
/***********************************************************************
Console
***********************************************************************/
void Console::Write(const wchar_t* string, vint length)
{
HANDLE outHandle = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD fileMode = 0;
DWORD written = 0;
if ((GetFileType(outHandle) & FILE_TYPE_CHAR) && GetConsoleMode(outHandle, &fileMode))
{
WriteConsole(outHandle, string, (int)length, &written, 0);
}
else
{
int codePage = GetConsoleOutputCP();
int charCount = WideCharToMultiByte(codePage, 0, string, -1, 0, 0, 0, 0);
char* codePageBuffer = new char[charCount];
WideCharToMultiByte(codePage, 0, string, -1, codePageBuffer, charCount, 0, 0);
WriteFile(outHandle, codePageBuffer, charCount - 1, &written, 0);
delete[] codePageBuffer;
}
}
WString Console::Read()
{
WString result;
DWORD count;
for (;;)
{
wchar_t buffer;
ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &buffer, 1, &count, 0);
if (buffer == L'\r')
{
ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &buffer, 1, &count, 0);
break;
}
else if (buffer == L'\n')
{
break;
}
else
{
result = result + WString::FromChar(buffer);
}
}
return result;
}
void Console::SetColor(bool red, bool green, bool blue, bool light)
{
WORD attribute = 0;
if (red)attribute |= FOREGROUND_RED;
if (green)attribute |= FOREGROUND_GREEN;
if (blue)attribute |= FOREGROUND_BLUE;
if (light)attribute |= FOREGROUND_INTENSITY;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), attribute);
SetConsoleTextAttribute(GetStdHandle(STD_INPUT_HANDLE), attribute);
}
void Console::SetTitle(const WString& string)
{
SetConsoleTitle(string.Buffer());
}
}
}
/***********************************************************************
.\PRIMITIVES\DATETIME.WINDOWS.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#include <time.h>
#ifndef VCZH_MSVC
static_assert(false, "Do not build this file for non-Windows applications.");
#endif
namespace vl
{
/***********************************************************************
DateTime
***********************************************************************/
DateTime SystemTimeToDateTime(const SYSTEMTIME& systemTime)
{
DateTime dateTime;
dateTime.year = systemTime.wYear;
dateTime.month = systemTime.wMonth;
dateTime.dayOfWeek = systemTime.wDayOfWeek;
dateTime.day = systemTime.wDay;
dateTime.hour = systemTime.wHour;
dateTime.minute = systemTime.wMinute;
dateTime.second = systemTime.wSecond;
dateTime.milliseconds = systemTime.wMilliseconds;
FILETIME fileTime;
SystemTimeToFileTime(&systemTime, &fileTime);
ULARGE_INTEGER largeInteger;
largeInteger.HighPart = fileTime.dwHighDateTime;
largeInteger.LowPart = fileTime.dwLowDateTime;
dateTime.filetime = largeInteger.QuadPart;
dateTime.totalMilliseconds = dateTime.filetime / 10000;
return dateTime;
}
SYSTEMTIME DateTimeToSystemTime(const DateTime& dateTime)
{
ULARGE_INTEGER largeInteger;
largeInteger.QuadPart = dateTime.filetime;
FILETIME fileTime;
fileTime.dwHighDateTime = largeInteger.HighPart;
fileTime.dwLowDateTime = largeInteger.LowPart;
SYSTEMTIME systemTime;
FileTimeToSystemTime(&fileTime, &systemTime);
return systemTime;
}
DateTime DateTime::LocalTime()
{
SYSTEMTIME systemTime;
GetLocalTime(&systemTime);
return SystemTimeToDateTime(systemTime);
}
DateTime DateTime::UtcTime()
{
SYSTEMTIME utcTime;
GetSystemTime(&utcTime);
return SystemTimeToDateTime(utcTime);
}
DateTime DateTime::FromDateTime(vint _year, vint _month, vint _day, vint _hour, vint _minute, vint _second, vint _milliseconds)
{
SYSTEMTIME systemTime;
memset(&systemTime, 0, sizeof(systemTime));
systemTime.wYear = (WORD)_year;
systemTime.wMonth = (WORD)_month;
systemTime.wDay = (WORD)_day;
systemTime.wHour = (WORD)_hour;
systemTime.wMinute = (WORD)_minute;
systemTime.wSecond = (WORD)_second;
systemTime.wMilliseconds = (WORD)_milliseconds;
FILETIME fileTime;
SystemTimeToFileTime(&systemTime, &fileTime);
FileTimeToSystemTime(&fileTime, &systemTime);
return SystemTimeToDateTime(systemTime);
}
DateTime DateTime::FromFileTime(vuint64_t filetime)
{
ULARGE_INTEGER largeInteger;
largeInteger.QuadPart = filetime;
FILETIME fileTime;
fileTime.dwHighDateTime = largeInteger.HighPart;
fileTime.dwLowDateTime = largeInteger.LowPart;
SYSTEMTIME systemTime;
FileTimeToSystemTime(&fileTime, &systemTime);
return SystemTimeToDateTime(systemTime);
}
DateTime DateTime::ToLocalTime()
{
SYSTEMTIME utcTime = DateTimeToSystemTime(*this);
SYSTEMTIME localTime;
SystemTimeToTzSpecificLocalTime(NULL, &utcTime, &localTime);
return SystemTimeToDateTime(localTime);
}
DateTime DateTime::ToUtcTime()
{
SYSTEMTIME localTime = DateTimeToSystemTime(*this);
SYSTEMTIME utcTime;
TzSpecificLocalTimeToSystemTime(NULL, &localTime, &utcTime);
return SystemTimeToDateTime(utcTime);
}
DateTime DateTime::Forward(vuint64_t milliseconds)
{
return FromFileTime(filetime + milliseconds * 10000);
}
DateTime DateTime::Backward(vuint64_t milliseconds)
{
return FromFileTime(filetime - milliseconds * 10000);
}
}
/***********************************************************************
.\STRINGS\CONVERSION.WINDOWS.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#ifndef VCZH_MSVC
static_assert(false, "Do not build this file for non-Windows applications.");
#endif
namespace vl
{
/***********************************************************************
String Conversions (buffer walkthrough)
***********************************************************************/
vint _wtoa(const wchar_t* w, char* a, vint chars)
{
return WideCharToMultiByte(CP_THREAD_ACP, 0, w, -1, a, (int)(a ? chars : 0), 0, 0);
}
vint _atow(const char* a, wchar_t* w, vint chars)
{
return MultiByteToWideChar(CP_THREAD_ACP, 0, a, -1, w, (int)(w ? chars : 0));
}
}
/***********************************************************************
.\UNITTEST\UNITTEST.WINDOWS.CPP
***********************************************************************/
/***********************************************************************
Author: Zihan Chen (vczh)
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#ifndef VCZH_MSVC
static_assert(false, "Do not build this file for non-Windows applications.");
#endif
namespace vl
{
namespace unittest
{
/***********************************************************************
UnitTest
***********************************************************************/
bool UnitTest::IsDebuggerAttached()
{
return IsDebuggerPresent();
}
}
}
+66 -372
View File
File diff suppressed because it is too large Load Diff
+1224 -1217
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+44 -3465
View File
File diff suppressed because it is too large Load Diff
+10 -6
View File
@@ -1885,6 +1885,8 @@ namespace vl
protected:
WString fullPath;
static void NormalizeDelimiters(collections::Array<wchar_t>& buffer);
static void TrimLastDelimiter(WString& fullPath);
void Initialize();
static void GetPathComponents(WString path, collections::List<WString>& components);
@@ -1904,7 +1906,7 @@ namespace vl
/// <summary>Create a root path.</summary>
/// <remarks><see cref="GetFullPath"/> returns different values for root path on different platforms. Do not rely on the value.</remarks>
FilePath();
FilePath() = default;
/// <summary>Create a file path.</summary>
/// <param name="_filePath">Content of the file path. If it is a relative path, it will be converted to an absolute path.</param>
FilePath(const WString& _filePath);
@@ -1914,7 +1916,7 @@ namespace vl
/// <summary>Copy a file path.</summary>
/// <param name="_filePath">The file path to copy.</param>
FilePath(const FilePath& _filePath);
~FilePath();
~FilePath() = default;
static vint Compare(const FilePath& a, const FilePath& b);
bool operator==(const FilePath& filePath)const{ return Compare(*this, filePath) == 0; }
@@ -1964,11 +1966,11 @@ namespace vl
public:
/// <summary>Create an empty reference. An empty reference does not refer to any file.</summary>
File();
File() = default;
/// <summary>Create a reference to a specified file. The file is not required to exist.</summary>
/// <param name="_filePath">The specified file.</param>
File(const FilePath& _filePath);
~File();
~File() = default;
/// <summary>Get the file path of the file.</summary>
/// <returns>The file path.</returns>
@@ -2031,13 +2033,15 @@ namespace vl
private:
FilePath filePath;
bool CreateNonRecursively()const;
bool DeleteNonRecursively()const;
public:
/// <summary>Create a reference to the root folder.</summary>
Folder();
Folder() = default;
/// <summary>Create a reference to a specified folder. The folder is not required to exist.</summary>
/// <param name="_filePath">The specified folder.</param>
Folder(const FilePath& _filePath);
~Folder();
~Folder() = default;
/// <summary>Get the file path of the folder.</summary>
/// <returns>The file path.</returns>