Core: ConvertDate::SetDefaultMinMax

git-svn-id: svn://ultimatepp.org/upp/trunk@12066 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2018-07-11 12:07:24 +00:00
parent 801f8194bb
commit 9291df7b4d
3 changed files with 192 additions and 96 deletions

View file

@ -412,15 +412,29 @@ ConvertDouble& ConvertDouble::Pattern(const char *p)
ConvertDouble::~ConvertDouble() {}
#endif
Date& ConvertDate::default_min()
{
static Date v = Date::Low();
return v;
}
Date& ConvertDate::default_max()
{
static Date v = Date::High();
return v;
}
void ConvertDate::SetDefaultMinMax(Date min, Date max)
{
default_min() = min;
default_max() = max;
}
ConvertDate::ConvertDate(Date minval, Date maxval, bool notnull)
: minval(minval), maxval(maxval), notnull(notnull) {
defaultval = Null;
}
ConvertDate::~ConvertDate()
{
}
Value ConvertDate::Format(const Value& q) const
{
if(IsDateTime(q))
@ -428,12 +442,13 @@ Value ConvertDate::Format(const Value& q) const
return Convert::Format(q);
}
Value ConvertDate::Scan(const Value& text) const {
Value v = UPP::Scan(DATE_V, text, defaultval);
if(IsError(v)) return v;
if(IsNull(v)) return notnull ? NotNullError() : v;
Date m = v;
Date minval = GetMin();
Date maxval = GetMax();
if(m >= minval && m <= maxval) return v;
return ErrorValue(t_("Date must be between ") + UPP::Format(minval) + t_("range\v and ") + UPP::Format(maxval) + ".");
}
@ -466,6 +481,8 @@ Value ConvertTime::Scan(const Value& text) const
m.second = 59;
v = m;
}
Time minval = GetMin();
Time maxval = GetMax();
if(m >= minval && m <= maxval) return v;
return ErrorValue(t_("Time must be between ") + UPP::Format(minval) + t_("range\v and ") + UPP::Format(maxval) + ".");
}

View file

@ -148,6 +148,9 @@ public:
protected:
Date minval, maxval, defaultval;
bool notnull;
static Date& default_min();
static Date& default_max();
public:
ConvertDate& MinMax(Date _min, Date _max) { minval = _min; maxval = _max; return *this; }
@ -156,15 +159,15 @@ public:
ConvertDate& NotNull(bool b = true) { notnull = b; return *this; }
ConvertDate& NoNotNull() { return NotNull(false); }
ConvertDate& Default(Date d) { defaultval = d; return *this; }
Date GetMin() const { return minval; }
Date GetMax() const { return maxval; }
bool IsNotNull() const { return notnull; }
Date GetMin() const { return max(GetDefaultMin(), minval); }
Date GetMax() const { return min(GetDefaultMax(), maxval); }
static Date GetDefaultMin() { return Date::Low(); }
static Date GetDefaultMax() { return Date::High(); }
static void SetDefaultMinMax(Date min, Date max);
static Date GetDefaultMin() { return default_min(); }
static Date GetDefaultMax() { return default_max(); }
ConvertDate(Date minval = Date::Low(), Date maxval = Date::High(), bool notnull = false);
virtual ~ConvertDate();
};
const ConvertDate& StdConvertDate();
@ -191,18 +194,19 @@ public:
ConvertTime& NoNotNull() { return NotNull(false); }
ConvertTime& Seconds(bool b = true) { seconds = b; return *this; }
ConvertTime& NoSeconds() { return Seconds(false); }
ConvertTime& TimeAlways(bool b = true) { timealways = b; return *this; }
ConvertTime& DayEnd(bool b = true) { dayend = b; return *this; }
ConvertTime& Default(Time d) { defaultval = d; return *this; }
Time GetMin() const { return minval; }
Time GetMax() const { return maxval; }
bool IsNotNull() const { return notnull; }
bool IsSeconds() const { return seconds; }
ConvertTime& TimeAlways(bool b = true) { timealways = b; return *this; }
bool IsTimeAlways() const { return timealways; }
ConvertTime& DayEnd(bool b = true) { dayend = b; return *this; }
bool IsDayEnd() const { return dayend; }
ConvertTime& Default(Time d) { defaultval = d; return *this; }
bool IsNotNull() const { return notnull; }
static Time GetDefaultMin() { return ToTime(Date::Low()); }
static Time GetDefaultMax() { return ToTime(Date::High()); }
Time GetMin() const { return max(minval, GetDefaultMin()); }
Time GetMax() const { return min(maxval, GetDefaultMax()); }
static Time GetDefaultMin() { return ToTime(ConvertDate::GetDefaultMin()); }
static Time GetDefaultMax() { return ToTime(ConvertDate::GetDefaultMax()); }
ConvertTime(Time minval = ToTime(Date::Low()), Time maxval = ToTime(Date::High()), bool notnull = false);
virtual ~ConvertTime();

View file

@ -1,5 +1,4 @@
topic "Convert";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
@ -9,6 +8,7 @@ topic "Convert";
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
[b42;2 $$9,9#13035079074754324216151401829390:normal]
[2 $$0,0#00000000000000000000000000000000:Default]
[{_}%EN-US
[ {{10000@(113.42.0) [s0; [*@7;4 Convert]]}}&]
[s3;%- &]
@ -125,14 +125,38 @@ ll]()&]
otNull](false).&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertDate`:`:Default`(Upp`:`:Date`):%- [_^Upp`:`:ConvertDate^ ConvertDate
][@(0.0.255) `&]_[* Default]([_^Upp`:`:Date^ Date]_[*@3 d])&]
[s2; When the text is empty, Scan returns this value.&]
[s3; &]
[s4;%- &]
[s5;:ConvertDate`:`:GetMin`(`)const:%- [_^Date^ Date]_[* GetMin]()_[@(0.0.255) const]&]
[s7; [*/ Return value]-|Minimal allowed date.&]
[s2; Returns minimal allowed date. This is maximum of value set by
Min and default minimum (GetDefaultMin).&]
[s3; &]
[s4;%- &]
[s5;:ConvertDate`:`:GetMax`(`)const:%- [_^Date^ Date]_[* GetMax]()_[@(0.0.255) const]&]
[s7; [*/ Return value]-|Maximal allowed date.&]
[s2; Returns upper limit of allowed dates. This is minimum of value
set by Max and default maximum (GetDefaultMax).&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertDate`:`:GetDefaultMin`(`):%- [@(0.0.255) static]
[_^Upp`:`:Date^ Date]_[* GetDefaultMin]()&]
[s2; Returns default minimum.&]
[s3;%- &]
[s4;%- &]
[s5;:Upp`:`:ConvertDate`:`:GetDefaultMax`(`):%- [@(0.0.255) static]
[_^Upp`:`:Date^ Date]_[* GetDefaultMax]()&]
[s2; Returns default maximum.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertDate`:`:SetDefaultMinMax`(Upp`:`:Date`,Upp`:`:Date`):%- [@(0.0.255) v
oid]_[* SetDefaultMinMax]([_^Upp`:`:Date^ Date]_[*@3 min], [_^Upp`:`:Date^ Date]_[*@3 max])
&]
[s2; Sets values for default minimum and maximum. Default values
are Date`::Low() and Date`::Hight().&]
[s3;%- &]
[s4;%- &]
[s5;:ConvertDate`:`:IsNotNull`(`)const:%- [@(0.0.255) bool]_[* IsNotNull]()_[@(0.0.255) con
st]&]
[s7; [*/ Return value]-|true is Nulls are disallowed.&]
@ -140,6 +164,132 @@ st]&]
[s0; &]
[s0;%- &]
[s0;%- &]
[ {{10000@(113.42.0) [s0; [*@7;4 ConvertTime]]}}&]
[s3; &]
[s1;:ConvertTime`:`:class:%- [@(0.0.255)3 class][3 _][*3 ConvertTime][3 _:_][@(0.0.255)3 public][3 _
][*@3;3 Convert]&]
[s9; Time converter.&]
[s0; &]
[s0;%- [%%/ Derived from][%% ][^topic`:`/`/Core`/src`/Convert`$en`-us`#Convert`:`:class^ C
onvert]&]
[s3; &]
[s0; &]
[ {{10000F(128)G(128)@1 [s0; [* Constructor Detail]]}}&]
[s3;%- &]
[s5;:ConvertTime`:`:ConvertTime`(Time`,Time`,bool`):%- [* ConvertTime]([_^Time^ Time]_[*@3 m
inval]_`=_ToTime(Date`::Low()), [_^Time^ Time]_[*@3 maxval]_`=_ToTime(Date`::High()),
[@(0.0.255) bool]_[*@3 notnull]_`=_[@(0.0.255) false])&]
[s2;%- Constructor.&]
[s7; [%-*C@3 minval]-|Lower limit. Default means there is no limit.&]
[s7; [%-*C@3 maxval]-|Upper limit. Default means there is no limit.&]
[s7; [%-*C@3 notnull]-|true disallows Nulls.&]
[s3;%- &]
[s4;%- &]
[s5;:ConvertTime`:`:`~ConvertTime`(`):%- [@(0.0.255) `~][* ConvertTime]()&]
[s2; Default destructor.&]
[s3; &]
[s0; &]
[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&]
[s3;%- &]
[s5;:ConvertTime`:`:MinMax`(Time`,Time`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* M
inMax]([_^Time^ Time]_[*@3 `_min], [_^Time^ Time]_[*@3 `_max])&]
[s2;%- Time limeits.&]
[s7; [%-*C@3 `_min]-|Lower limit.&]
[s7; [%-*C@3 `_max]-|Upper limit.&]
[s7; [*/ Return value]-|`*this.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:Min`(Upp`:`:Time`):%- [_^Upp`:`:ConvertTime^ ConvertTime][@(0.0.255) `&
]_[* Min]([_^Upp`:`:Time^ Time]_[*@3 `_min])&]
[s2; Sets lower limit.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:Max`(Upp`:`:Time`):%- [_^Upp`:`:ConvertTime^ ConvertTime][@(0.0.255) `&
]_[* Max]([_^Upp`:`:Time^ Time]_[*@3 `_max])&]
[s2; Sets upper limit.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:NotNull`(bool`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* NotNu
ll]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2; Disallows empty Strings.&]
[s7; [%-*C@3 b]-|true to disallow.&]
[s7; [*/ Return value]-|`*this.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:NoNotNull`(`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* NoNotNu
ll]()&]
[s2; Same as [^topic`:`/`/Core`/src`/Convert`$en`-us`#ConvertTime`:`:NotNull`(bool`)^ N
otNull](false).&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:Seconds`(bool`):%- [_^Upp`:`:ConvertTime^ ConvertTime][@(0.0.255) `&
]_[* Seconds]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2; If true (which is default), Format returns time with seconds.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:NoSeconds`(`):%- [_^Upp`:`:ConvertTime^ ConvertTime][@(0.0.255) `&
]_[* NoSeconds]()&]
[s2; Same as Seconds(fale)&]
[s3;%- &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:IsSeconds`(`)const:%- [@(0.0.255) bool]_[* IsSeconds]()_[@(0.0.255) c
onst]&]
[s2; Returns the value set by Seconds.,&]
[s3;%- &]
[s4;%- &]
[s5;:ConvertTime`:`:TimeAlways`(bool`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* Ti
meAlways]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2; If active, Format always shows time, even if the Value is Date
or is at midnight. Default is false.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:IsTimeAlways`(`)const:%- [@(0.0.255) bool]_[* IsTimeAlways]()_
[@(0.0.255) const]&]
[s2; Returns the value set by TimeAlways.&]
[s3;%- &]
[s4;%- &]
[s5;:ConvertTime`:`:DayEnd`(bool`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* DayEnd
]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2; If active, when Scan encounters date without time, it sets the
time to 23:59:59. Default is false.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:IsDayEnd`(`)const:%- [@(0.0.255) bool]_[* IsDayEnd]()_[@(0.0.255) c
onst]&]
[s2; Returns the value set by DayEnd.&]
[s3;%- &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:Default`(Upp`:`:Time`):%- [_^Upp`:`:ConvertTime^ ConvertTime
][@(0.0.255) `&]_[* Default]([_^Upp`:`:Time^ Time]_[*@3 d])&]
[s2; Sets default time returned by Scan when input is empty.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:GetMin`(`)const:%- [_^Time^ Time]_[* GetMin]()_[@(0.0.255) const]&]
[s2; Returns minimal allowed time. This is maximum of value set by
Min and default minimum (GetDefaultMin).&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:GetMax`(`)const:%- [_^Time^ Time]_[* GetMax]()_[@(0.0.255) const]&]
[s2; Returns upper limit of allowed times. This is minimum of value
set by Max and default maximum (GetDefaultMax).&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:GetDefaultMin`(`):%- [@(0.0.255) static]
[_^Upp`:`:Time^ Time]_[* GetDefaultMin]()&]
[s2; Returns Date`::GetDefaultMin converted to Time.&]
[s3;%- &]
[s4;%- &]
[s5;:Upp`:`:ConvertTime`:`:GetDefaultMax`(`):%- [@(0.0.255) static]
[_^Upp`:`:Time^ Time]_[* GetDefaultMax]()&]
[s2; Returns Date`::GetDefaultMax converted to Time.&]
[s3;%- &]
[s4;%- &]
[s5;:ConvertTime`:`:IsNotNull`(`)const:%- [@(0.0.255) bool]_[* IsNotNull]()_[@(0.0.255) con
st]&]
[s7; [*/ Return value]-|true means Nulls are disallowed.&]
[s3; &]
[s0; &]
[s0;%- &]
[ {{10000@(113.42.0) [s0; [*@7;4 ConvertDouble]]}}&]
[s3; &]
[s1;:ConvertDouble`:`:class:%- [@(0.0.255)3 class][3 _][*3 ConvertDouble][3 _:_][@(0.0.255)3 pub
@ -388,81 +538,6 @@ onst]&]
[s0; &]
[s0; &]
[s0;%- &]
[ {{10000@(113.42.0) [s0; [*@7;4 ConvertString]]}}&]
[s3; &]
[s1;:ConvertTime`:`:class:%- [@(0.0.255)3 class][3 _][*3 ConvertTime][3 _:_][@(0.0.255)3 public][3 _
][*@3;3 Convert]&]
[s9; Time converter.&]
[s0; &]
[s0;%- [%%/ Derived from][%% ][^topic`:`/`/Core`/src`/Convert`$en`-us`#Convert`:`:class^ C
onvert]&]
[s3; &]
[s0; &]
[ {{10000F(128)G(128)@1 [s0; [* Constructor Detail]]}}&]
[s3;%- &]
[s5;:ConvertTime`:`:ConvertTime`(Time`,Time`,bool`):%- [* ConvertTime]([_^Time^ Time]_[*@3 m
inval]_`=_ToTime(Date`::Low()), [_^Time^ Time]_[*@3 maxval]_`=_ToTime(Date`::High()),
[@(0.0.255) bool]_[*@3 notnull]_`=_[@(0.0.255) false])&]
[s2;%- Constructor.&]
[s7; [%-*C@3 minval]-|Lower limit. Default means there is no limit.&]
[s7; [%-*C@3 maxval]-|Upper limit. Default means there is no limit.&]
[s7; [%-*C@3 notnull]-|true disallows Nulls.&]
[s3;%- &]
[s4;%- &]
[s5;:ConvertTime`:`:`~ConvertTime`(`):%- [@(0.0.255) `~][* ConvertTime]()&]
[s2; Default destructor.&]
[s3; &]
[s0; &]
[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&]
[s3;%- &]
[s5;:ConvertTime`:`:MinMax`(Time`,Time`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* M
inMax]([_^Time^ Time]_[*@3 `_min], [_^Time^ Time]_[*@3 `_max])&]
[s2;%- Time limeits.&]
[s7; [%-*C@3 `_min]-|Lower limit.&]
[s7; [%-*C@3 `_max]-|Upper limit.&]
[s7; [*/ Return value]-|`*this.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:NotNull`(bool`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* NotNu
ll]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2; Disallows empty Strings.&]
[s7; [%-*C@3 b]-|true to disallow.&]
[s7; [*/ Return value]-|`*this.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:NoNotNull`(`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* NoNotNu
ll]()&]
[s2; Same as [^topic`:`/`/Core`/src`/Convert`$en`-us`#ConvertTime`:`:NotNull`(bool`)^ N
otNull](false).&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:TimeAlways`(bool`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* Ti
meAlways]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2; If active, Format always shows time, even if the Value is Date
or is at midnight.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:DayEnd`(bool`):%- [_^ConvertTime^ ConvertTime][@(0.0.255) `&]_[* DayEnd
]([@(0.0.255) bool]_[*@3 b]_`=_[@(0.0.255) true])&]
[s2; If active, when Scan encounters date without time, it sets the
time to 23:59:59.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:GetMin`(`)const:%- [_^Time^ Time]_[* GetMin]()_[@(0.0.255) const]&]
[s7; [*/ Return value]-|Lower limit.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:GetMax`(`)const:%- [_^Time^ Time]_[* GetMax]()_[@(0.0.255) const]&]
[s7; [*/ Return value]-|Upper limit.&]
[s3; &]
[s4;%- &]
[s5;:ConvertTime`:`:IsNotNull`(`)const:%- [@(0.0.255) bool]_[* IsNotNull]()_[@(0.0.255) con
st]&]
[s7; [*/ Return value]-|true means Nulls are disallowed.&]
[s3; &]
[s0; &]
[s0; &]
[s0;%- &]
[ {{10000@(113.42.0) [s0; [*@7;4 FormatConvert]]}}&]
[s3; &]
[s1;:FormatConvert`:`:class:%- [@(0.0.255)3 class][3 _][*3 FormatConvert][3 _:_][@(0.0.255)3 pub