mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
163 lines
No EOL
2.5 KiB
C++
163 lines
No EOL
2.5 KiB
C++
#include <Core/Core.h>
|
|
#include <Core/Rpc/Rpc.h>
|
|
|
|
namespace Upp {
|
|
|
|
String FormatIso8601(Time t)
|
|
{
|
|
return Format("%04.4d%02.2d%02.2d`T%02.2d`:%02.2d`:%02.2d",
|
|
t.year, t.month, t.day, t.hour, t.minute, t.second);
|
|
}
|
|
|
|
Time ScanIso8601(const String& p)
|
|
{
|
|
String s = TrimBoth(p);
|
|
// 19980717T14:08:55
|
|
// 01234567890123456
|
|
if(s.GetCount() != 17 || s[8] != 'T' || s[11] != ':' || s[14] != ':')
|
|
return Null;
|
|
Time tm;
|
|
tm.year = atoi(s.Mid(0, 4));
|
|
tm.month = atoi(s.Mid(4, 2));
|
|
tm.day = atoi(s.Mid(6, 2));
|
|
tm.hour = atoi(s.Mid(9, 2));
|
|
tm.minute = atoi(s.Mid(12, 2));
|
|
tm.second = atoi(s.Mid(15, 2));
|
|
if(!tm.IsValid())
|
|
return Null;
|
|
return tm;
|
|
}
|
|
|
|
void ValueCheck(bool b)
|
|
{
|
|
if(!b)
|
|
throw ValueTypeMismatch();
|
|
}
|
|
|
|
void ValueGet(int& n, const Value& v)
|
|
{
|
|
ValueCheck(IsNull(v) || IsNumber(v));
|
|
n = v;
|
|
}
|
|
|
|
void ValueGet(String& s, const Value& v)
|
|
{
|
|
ValueCheck(IsNull(v) || IsString(v));
|
|
s = v;
|
|
}
|
|
|
|
void ValueGet(double& x, const Value& v)
|
|
{
|
|
ValueCheck(IsNull(v) || IsNumber(v));
|
|
x = v;
|
|
}
|
|
|
|
void ValueGet(bool& x, const Value& v)
|
|
{
|
|
ValueCheck(IsNull(v) || IsNumber(v));
|
|
x = v;
|
|
}
|
|
|
|
Time IsoTime(const Value& v)
|
|
{
|
|
Time tm = ScanIso8601((String)v);
|
|
if(IsNull(tm))
|
|
throw ValueTypeMismatch();
|
|
return tm;
|
|
}
|
|
|
|
void ValueGet(Date& x, const Value& v)
|
|
{
|
|
if(IsString(v)) {
|
|
x = IsoTime(v);
|
|
return;
|
|
}
|
|
ValueCheck(IsNull(v) || IsDateTime(v));
|
|
x = v;
|
|
}
|
|
|
|
void ValueGet(Time& x, const Value& v)
|
|
{
|
|
if(IsString(v)) {
|
|
x = IsoTime(v);
|
|
return;
|
|
}
|
|
ValueCheck(IsNull(v) || IsDateTime(v));
|
|
x = v;
|
|
}
|
|
|
|
void ValueGet(Value& t, const Value& v)
|
|
{
|
|
t = v;
|
|
}
|
|
|
|
void ValueGet(ValueArray& va, const Value& v)
|
|
{
|
|
ValueCheck(IsNull(v) || IsValueArray(v));
|
|
va = v;
|
|
}
|
|
|
|
void ValueGet(ValueMap& vm, const Value& v)
|
|
{
|
|
ValueCheck(IsNull(v) || IsValueMap(v));
|
|
vm = v;
|
|
}
|
|
|
|
void ValuePut(Value& v, int n)
|
|
{
|
|
v = n;
|
|
}
|
|
|
|
void ValuePut(Value& v, const String& s)
|
|
{
|
|
v = s;
|
|
}
|
|
|
|
void ValuePut(Value& v, const char *s)
|
|
{
|
|
ValuePut(v, String(s));
|
|
}
|
|
|
|
void ValuePut(Value& v, double x)
|
|
{
|
|
v = x;
|
|
}
|
|
|
|
void ValuePut(Value& v, bool x)
|
|
{
|
|
v = x;
|
|
}
|
|
|
|
void ValuePut(Value& v, const Date& x)
|
|
{
|
|
v = x;
|
|
}
|
|
|
|
void ValuePut(Value& v, const Time& x)
|
|
{
|
|
v = x;
|
|
}
|
|
|
|
void ValuePut(Value& v, const Value& t)
|
|
{
|
|
v = t;
|
|
}
|
|
|
|
void ValuePut(Value& v, const ValueArray& va)
|
|
{
|
|
v = va;
|
|
}
|
|
|
|
void ValuePut(Value& v, const ValueMap& vm)
|
|
{
|
|
v = vm;
|
|
}
|
|
|
|
void ValuePut(Value& v, const Json& json)
|
|
{
|
|
RawJsonText x;
|
|
x.json = json;
|
|
v = RawToValue(x);
|
|
}
|
|
|
|
} |