ALib C++ Library
Library Version: 2402 R1
Documentation generated by doxygen
Loading...
Searching...
No Matches
dateandtime.cpp
1// #################################################################################################
2// ALib C++ Library
3//
4// Copyright 2013-2024 A-Worx GmbH, Germany
5// Published under 'Boost Software License' (a free software license, see LICENSE.txt)
6// #################################################################################################
8
9#if !defined(ALIB_DOX)
10#if !defined (HPP_ALIB_EXPRESSIONS_PLUGINS_DATEANDTIME)
12#endif
13#endif // !defined(ALIB_DOX)
14
15#if ALIB_CAMP
16
17#if !defined(ALIB_DOX)
18#if !defined (HPP_ALIB_CAMP_CALENDAR)
20#endif
21#endif // !defined(ALIB_DOX)
22
23//! @cond NO_DOX
24
25#define ARG0 (*args)
26#define ARG1 (*(args+1))
27#define INT(box) (box).Unbox<integer >()
28#define FLT(box) (box).Unbox<double >()
29#define DT(box) (box).Unbox<DateTime >()
30#define DUR(box) (box).Unbox<DateTime::Duration>()
31#define FUNC( name,...) Box name( Scope& scope, \
32 ArgIterator args, \
33 ArgIterator end ) \
34 { (void) scope; (void) args; (void) end; __VA_ARGS__ }
35
36#if !ALIB_FEAT_BOXING_BIJECTIVE_INTEGRALS
37# define TOINT(arg) arg
38#else
39# define TOINT(arg) static_cast<integer>(arg)
40#endif
41
42namespace alib { namespace expressions { namespace plugins {
43
44
45namespace {
46
47// #################################################################################################
48// ### Reverse generation: convert program constants to expression strings
49// #################################################################################################
50DOX_MARKER([DOX_ALIB_EXPR_FToLiteral_3])
51void FToLiteral_Duration( const Box& constantValue, AString& expressionString )
52{
53 // Unbox the time span and convert to nanoseconds
54 auto value= constantValue.Unbox<DateTime::Duration>().InNanoseconds();
55
56 // Find the best matching magnitude
57 NString result;
58 if( value == 0 )
59 result= "Milliseconds";
60 else
61 {
62 result= "Nanoseconds";
63
64 if( (value % 1000) == 0 )
65 {
66 value/= 1000;
67 result= "Microseconds";
68 if( (value % 1000) == 0 )
69 {
70 value/= 1000;
71 result= "Milliseconds";
72 if( (value % 1000) == 0 )
73 {
74 value/= 1000;
75 result= "Seconds";
76 if( (value % 60) == 0 )
77 {
78 value/= 60;
79 result= "Minutes";
80 if( (value % 60) == 0 )
81 {
82 value/= 60;
83 result= "Hours";
84 if( (value % 24) == 0 )
85 {
86 value/= 24;
87 result= "Days";
88 }
89 }
90 }
91 }
92 }
93 }
94 }
95
96 // wWite the function argument
97 expressionString << result << '(' << value << ')' ;
98}
99DOX_MARKER([DOX_ALIB_EXPR_FToLiteral_3])
100
101void FToLiteral_DateTime( const Box& constantValue, AString& expressionString )
102{
103 CalendarDateTime ct( constantValue.Unbox<DateTime>(), lang::Timezone::UTC );
104
105 expressionString << "UTCDateTime( " << ct.Year << ','
106 << ct.Month << ','
107 << ct.Day << ','
108 << ct.Hour << ','
109 << ct.Minute << ','
110 << ct.Second << ','
111 << ct.Millisecond << ')' ;
112}
113
114
115// #################################################################################################
116// ### DateTime
117// #################################################################################################
118FUNC( dateTime , auto qtyArgs= end-args;
119 return CalendarDateTime( static_cast<int>( INT(ARG0) ) , // year
120 ( qtyArgs> 1 ) ? static_cast<int>( INT(*(args+1)) ) : 1, // month
121 ( qtyArgs> 2 ) ? static_cast<int>( INT(*(args+2)) ) : 1, // day
122 ( qtyArgs> 3 ) ? static_cast<int>( INT(*(args+3)) ) : 0, // hour
123 ( qtyArgs> 4 ) ? static_cast<int>( INT(*(args+4)) ) : 0, // minute
124 ( qtyArgs> 5 ) ? static_cast<int>( INT(*(args+5)) ) : 0, // second
125 ( qtyArgs> 6 ) ? static_cast<int>( INT(*(args+6)) ) : 0 // millisecond
126 )
127 .Get(lang::Timezone::Local);
128 )
129
130FUNC( utcDateTime , auto qtyArgs= end-args;
131 return CalendarDateTime( static_cast<int>( INT(ARG0) ) , // year
132 ( qtyArgs> 1 ) ? static_cast<int>( INT(*(args+1)) ) : 1, // month
133 ( qtyArgs> 2 ) ? static_cast<int>( INT(*(args+2)) ) : 1, // day
134 ( qtyArgs> 3 ) ? static_cast<int>( INT(*(args+3)) ) : 0, // hour
135 ( qtyArgs> 4 ) ? static_cast<int>( INT(*(args+4)) ) : 0, // minute
136 ( qtyArgs> 5 ) ? static_cast<int>( INT(*(args+5)) ) : 0, // second
137 ( qtyArgs> 6 ) ? static_cast<int>( INT(*(args+6)) ) : 0 // millisecond
138 )
139 .Get(lang::Timezone::UTC);
140 )
141
143 ct.Hour= ct.Minute= ct.Second= ct.Millisecond= 0;
144 return ct.Get(lang::Timezone::Local); )
145FUNC( utcToday , CalendarDateTime ct(DateTime(), lang::Timezone::UTC);
146 ct.Hour= ct.Minute= ct.Second= ct.Millisecond= 0;
147 return ct.Get(lang::Timezone::UTC); )
148FUNC( now , return DateTime(); )
149FUNC( age , return DT(ARG0).Age(); )
150FUNC( isOlderThan , return DT(ARG0).IsOlderThan( DUR(ARG1) ); )
151FUNC( year , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::Local).Year ); )
152FUNC( month , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::Local).Month ); )
153FUNC( day , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::Local).Day ); )
154FUNC( dayOfWeek , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::Local).DayOfWeek ); )
155FUNC( hour , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::Local).Hour ); )
156FUNC( minute , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::Local).Minute ); )
157FUNC( millisecond , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::Local).Millisecond); )
158FUNC( utcYear , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::UTC ).Year ); )
159FUNC( utcMonth , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::UTC ).Month ); )
160FUNC( utcDay , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::UTC ).Day ); )
161FUNC( utcDayOfWeek , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::UTC ).DayOfWeek ); )
162FUNC( utcHour , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::UTC ).Hour ); )
163FUNC( utcMinute , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::UTC ).Minute ); )
164FUNC( utcMillisecond , return TOINT(CalendarDateTime(DT(ARG0), lang::Timezone::UTC ).Millisecond); )
165
166
167// #################################################################################################
168// ### Duration
169// #################################################################################################
170
171
172// constructor functions
173FUNC( nanosecondsInt , return DateTime::Duration::FromNanoseconds ( INT(ARG0) ); )
174
175FUNC( microsecondsInt , return DateTime::Duration::FromAbsoluteMicroseconds ( INT(ARG0) ); )
176FUNC( millisecondsInt , return DateTime::Duration::FromAbsoluteMilliseconds ( INT(ARG0) ); )
177FUNC( secondsInt , return DateTime::Duration::FromAbsoluteSeconds ( INT(ARG0) ); )
178FUNC( minutesInt , return DateTime::Duration::FromAbsoluteMinutes ( INT(ARG0) ); )
179FUNC( hoursInt , return DateTime::Duration::FromAbsoluteHours ( INT(ARG0) ); )
180FUNC( daysInt , return DateTime::Duration::FromAbsoluteDays ( INT(ARG0) ); )
181FUNC( weeksInt , return DateTime::Duration::FromAbsoluteDays ( INT(ARG0) * 7 ); )
182FUNC( monthsInt , return DateTime::Duration::FromAbsoluteDays ( INT(ARG0) * 30 ); )
183FUNC( yearsInt , return DateTime::Duration::FromAbsoluteDays ( INT(ARG0) * 365 ); )
184
185FUNC( microsecondsFlt , return DateTime::Duration::FromMicroseconds ( FLT(ARG0) ); )
186FUNC( millisecondsFlt , return DateTime::Duration::FromMilliseconds ( FLT(ARG0) ); )
187FUNC( secondsFlt , return DateTime::Duration::FromSeconds ( FLT(ARG0) ); )
188FUNC( minutesFlt , return DateTime::Duration::FromMinutes ( FLT(ARG0) ); )
189FUNC( hoursFlt , return DateTime::Duration::FromHours ( FLT(ARG0) ); )
190FUNC( daysFlt , return DateTime::Duration::FromDays ( FLT(ARG0) ); )
191FUNC( weeksFlt , return DateTime::Duration::FromDays ( FLT(ARG0) * 7.0 ); )
192FUNC( monthsFlt , return DateTime::Duration::FromDays ( FLT(ARG0) * 30.0 ); )
193FUNC( yearsFlt , return DateTime::Duration::FromDays ( FLT(ARG0) * 365.0 ); )
194
195
196// conversion
197FUNC( inDays , return DUR(ARG0).InDays (); )
198FUNC( inHours , return DUR(ARG0).InHours (); )
199FUNC( inMinutes , return DUR(ARG0).InMinutes (); )
200FUNC( inSeconds , return DUR(ARG0).InSeconds (); )
201FUNC( inMilliseconds , return DUR(ARG0).InMilliseconds(); )
202FUNC( inMicroseconds , return DUR(ARG0).InMicroseconds(); )
203FUNC( inNanoseconds , return DUR(ARG0).InNanoseconds (); )
204FUNC( inHertz , return DUR(ARG0).InHertz(2); )
205
206// binary operators time stamp
207FUNC( add_DTDUR , return DT(ARG0) + DUR(ARG1); )
208FUNC( add_DURDT , return DT(ARG1) + DUR(ARG0); )
209FUNC( sub_DTDUR , return DT(ARG0) - DUR(ARG1); )
210FUNC( sub_DTDT , return DT(ARG0) - DT(ARG1); )
211FUNC( eqDT , return DT(ARG0) == DT(ARG1); )
212FUNC( neqDT , return DT(ARG0) != DT(ARG1); )
213FUNC( gtDT , return DT(ARG0) > DT(ARG1); )
214FUNC( gteqDT , return DT(ARG0) >= DT(ARG1); )
215FUNC( smDT , return DT(ARG0) < DT(ARG1); )
216FUNC( smeqDT , return DT(ARG0) <= DT(ARG1); )
217
218
219// binary operators time span
220FUNC( add_DURDUR , return DUR(ARG0) + DUR(ARG1); )
221FUNC( sub_DURDUR , return DUR(ARG0) - DUR(ARG1); )
222FUNC( mul_DURF , return DUR(ARG0) * FLT(ARG1); )
223FUNC( mul_FDUR , return DUR(ARG1) * FLT(ARG0); )
224FUNC( mul_DURI , return DUR(ARG0) * static_cast<int64_t>( INT(ARG1) ); )
225FUNC( mul_IDUR , return DUR(ARG1) * static_cast<int64_t>( INT(ARG0) ); )
226FUNC( div_DURF , return DUR(ARG0) / FLT(ARG1); )
227FUNC( div_DURI , return DUR(ARG0) / static_cast<int64_t>( INT(ARG1) ); )
228
229FUNC( eqDUR , return DUR(ARG0) == DUR(ARG1); )
230FUNC( neqDUR , return DUR(ARG0) != DUR(ARG1); )
231FUNC( gtDUR , return DUR(ARG0) > DUR(ARG1); )
232FUNC( gteqDUR , return DUR(ARG0) >= DUR(ARG1); )
233FUNC( smDUR , return DUR(ARG0) < DUR(ARG1); )
234FUNC( smeqDUR , return DUR(ARG0) <= DUR(ARG1); )
235
236
237// #################################################################################################
238// ### Duration
239// #################################################################################################
240Calculus::OperatorTableEntry binaryOpTableDateTime[] =
241{
252
261
268};
269
270} // anonymous namespace
271
272
273// #################################################################################################
274// ### DateAndTime - Constructor. Creates the hash map
275// #################################################################################################
277{
278DOX_MARKER([DOX_ALIB_EXPR_FToLiteral_2])
279// register ToLiteral interface for class DateTime::Duration with boxing
280boxing::BootstrapRegister<FToLiteral, boxing::TMappedTo<time::DateTime::Duration>>( FToLiteral_Duration );
281DOX_MARKER([DOX_ALIB_EXPR_FToLiteral_2])
282boxing::BootstrapRegister<FToLiteral, boxing::TMappedTo<time::DateTime >>( FToLiteral_DateTime );
283}
284
286: Calculus( "ALib DateAndTime", compiler )
287{
288 // load identifier/function names from resources
289 constexpr int tableSize= 58;
290 Token functionNames[tableSize];
291 Token::LoadResourcedTokens( EXPRESSIONS, "CPD", functionNames
292 ALIB_DBG(,tableSize) );
294 Token* descriptor= functionNames;
295
296 // Constant identifiers
297 ConstantIdentifiers=
298 {
299 // January to december
300 { *descriptor++, TOINT(1) }, { *descriptor++, TOINT( 2) }, { *descriptor++, TOINT( 3) }, { *descriptor++, TOINT( 4) },
301 { *descriptor++, TOINT(5) }, { *descriptor++, TOINT( 6) }, { *descriptor++, TOINT( 7) }, { *descriptor++, TOINT( 8) },
302 { *descriptor++, TOINT(9) }, { *descriptor++, TOINT(10) }, { *descriptor++, TOINT(11) }, { *descriptor++, TOINT(12) },
303
304 // Sunday to saturday
305 { *descriptor++, TOINT(0) }, { *descriptor++, TOINT(1) }, { *descriptor++, TOINT(2) }, { *descriptor++, TOINT( 3) },
306 { *descriptor++, TOINT(4) }, { *descriptor++, TOINT(5) }, { *descriptor++, TOINT(6) },
307 };
308
309 // functions
310 Functions=
311 {
312DOX_MARKER([DOX_ALIB_EXPR_FToLiteral_1])
313 { *descriptor++, CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(nanosecondsInt ), &Types::Duration , CTI },
314DOX_MARKER([DOX_ALIB_EXPR_FToLiteral_1])
315 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(microsecondsInt ), &Types::Duration , CTI },
316 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(microsecondsFlt ), &Types::Duration , CTI },
317 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(millisecondsInt ), &Types::Duration , CTI },
318 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(millisecondsFlt ), &Types::Duration , CTI },
319 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(secondsInt ), &Types::Duration , CTI },
320 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(secondsFlt ), &Types::Duration , CTI },
321 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(minutesInt ), &Types::Duration , CTI },
322 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(minutesFlt ), &Types::Duration , CTI },
323 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(hoursInt ), &Types::Duration , CTI },
324 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(hoursFlt ), &Types::Duration , CTI },
325 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(daysInt ), &Types::Duration , CTI },
326 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(daysFlt ), &Types::Duration , CTI },
327 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(weeksInt ), &Types::Duration , CTI },
328 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(weeksFlt ), &Types::Duration , CTI },
329 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(monthsInt ), &Types::Duration , CTI },
330 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(monthsFlt ), &Types::Duration , CTI },
331 { *descriptor , CALCULUS_SIGNATURE(Signatures::I ), CALCULUS_CALLBACK(yearsInt ), &Types::Duration , CTI },
332 { *descriptor++, CALCULUS_SIGNATURE(Signatures::F ), CALCULUS_CALLBACK(yearsFlt ), &Types::Duration , CTI },
333
334 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inDays ), &Types::Float , CTI },
335 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inHours ), &Types::Float , CTI },
336 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inMinutes ), &Types::Float , CTI },
337 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inSeconds ), &Types::Float , CTI },
338 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inMilliseconds ), &Types::Float , CTI },
339 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inMicroseconds ), &Types::Float , CTI },
340 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inNanoseconds ), &Types::Float , CTI },
341 { *descriptor++, CALCULUS_SIGNATURE(Signatures::Dur ), CALCULUS_CALLBACK(inHertz ), &Types::Float , CTI },
342 { *descriptor++, CALCULUS_SIGNATURE(Signatures::IVar), CALCULUS_CALLBACK(dateTime ), &Types::DateTime , CTI },
343 { *descriptor++, CALCULUS_SIGNATURE(Signatures::IVar), CALCULUS_CALLBACK(utcDateTime ), &Types::DateTime , CTI },
344 { *descriptor++, CALCULUS_SIGNATURE(nullptr ), CALCULUS_CALLBACK(now ), &Types::DateTime , ETI },
345 { *descriptor++, CALCULUS_SIGNATURE(nullptr ), CALCULUS_CALLBACK(today ), &Types::DateTime , ETI },
346 { *descriptor++, CALCULUS_SIGNATURE(nullptr ), CALCULUS_CALLBACK(utcToday ), &Types::DateTime , ETI },
347 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(age ), &Types::Duration , ETI },
348 { *descriptor++, CALCULUS_SIGNATURE(Signatures::DDur), CALCULUS_CALLBACK(isOlderThan ), &Types::Boolean , ETI },
349 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(year ), &Types::Integer , CTI },
350 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(month ), &Types::Integer , CTI },
351 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(day ), &Types::Integer , CTI },
352 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(dayOfWeek ), &Types::Integer , CTI },
353 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(hour ), &Types::Integer , CTI },
354 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(minute ), &Types::Integer , CTI },
355 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(millisecond ), &Types::Integer , CTI },
356 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(utcYear ), &Types::Integer , CTI },
357 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(utcMonth ), &Types::Integer , CTI },
358 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(utcDay ), &Types::Integer , CTI },
359 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(utcDayOfWeek ), &Types::Integer , CTI },
360 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(utcHour ), &Types::Integer , CTI },
361 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(utcMinute ), &Types::Integer , CTI },
362 { *descriptor++, CALCULUS_SIGNATURE(Signatures::D ), CALCULUS_CALLBACK(utcMillisecond ), &Types::Integer , CTI },
363 };
364
365 // binary operators
366 AddOperators( binaryOpTableDateTime );
367
368 ALIB_ASSERT_ERROR( descriptor - functionNames == tableSize, "EXPR",
369 "Descriptor table size mismatch: Consumed {} descriptors, {} available.",
370 descriptor - functionNames, tableSize )
372/**/}
373
374
375}}} // namespace [alib::expressions::detail]
376
377#undef BOL
378#undef INT
379#undef FLT
380#undef FUNC
381#undef FUNC
382#undef UN_MAP_ENTRY
383#undef BIN_MAP_ENTRY
384#undef BIN_ALIAS_ENTRY
385
386#endif // ALIB_CAMP
387
388//! @endcond
#define A_CHAR(STR)
#define ALIB_WARNINGS_RESTORE
Definition alib.hpp:715
#define CALCULUS_CALLBACK(func)
Definition calculus.hpp:34
#define CALCULUS_SIGNATURE(BoxPointerArray)
Definition calculus.hpp:41
#define ALIB_ASSERT_ERROR(cond,...)
Definition alib.hpp:984
#define ALIB_WARNINGS_ALLOW_UNSAFE_BUFFER_USAGE
Definition alib.hpp:644
#define ALIB_DBG(...)
Definition alib.hpp:457
@ Local
Denotes local reach.
@ Local
Denotes local time.
@ UTC
Denotes UTC (coordinated universal time).
@ Get
Denotes to search data.
Definition alib.cpp:57
expressions::plugins::Calculus Calculus
Type alias in namespace alib.
Definition calculus.hpp:903
strings::TString< nchar > NString
Type alias in namespace alib.
lang::system::CalendarDateTime CalendarDateTime
Type alias in namespace alib.
Definition calendar.hpp:753
time::DateTime DateTime
Type alias in namespace alib.
Definition datetime.hpp:226
strings::TAString< character > AString
Type alias in namespace alib.
strings::util::Token Token
Type alias in namespace alib.
Definition token.hpp:537
boxing::Box Box
Type alias in namespace alib.
expressions::Compiler Compiler
Type alias in namespace alib.
Definition compiler.hpp:596
static ALIB_API Box DateTime
static ALIB_API Box Duration
static ALIB_API Box Integer
static ALIB_API Box Boolean
static ALIB_API Box Float
const std::tuple< String, Type, Type, CallbackDecl, Type, CTInvokable > OperatorTableEntry
Definition calculus.hpp:506
static constexpr CTInvokable CTI
Definition calculus.hpp:258
ALIB_API DateAndTime(Compiler &compiler)