c_Month
Overview
Types and Definitions
definitions
cMONTH_
#define cMONTH_
Defines the c_Month values.
c_Month
enum c_Month { c_Jan = 1, c_Feb = 2, c_Mar = 3, c_Apr = 4, c_May = 5, c_Jun = 6, c_Jul = 7, c_Aug = 8, c_Sep = 9, c_Oct = 10, c_Nov = 11, c_Dec = 12, }; type enum c_Month c_Month;
Enum type to represent a month.
Functions
overall
int64_to_month_c
bool int64_to_month_c( int64_t src, c_Month dst[static 1] );
Returns true if the int64_t value can be represented in a c_Weekend variable, otherwise false.
#include "clingo/lang/expect.h" #include "clingo/time/c_Month.h" int main( void ) { init_tap_c_(); c_Month month; expect_c_( int64_to_month_c( 1, &month ) ); expect_c_( month == c_Jan ); expect_c_( int64_to_month_c( 10, &month ) ); expect_c_( month == c_Oct ); expect_c_( int64_to_month_c( 12, &month ) ); expect_c_( month == c_Dec ); expect_c_( !int64_to_month_c( 1000, &month ) ); return finish_tap_c_(); }
stringify_month_c
char const* stringify_month_c( c_Month month );
Returns the string representation of a value.
#include "clingo/lang/expect.h" #include "clingo/time/c_Month.h" TEMP_SLICE_DEF_C_( test, { c_Month month; char const* exp; } ) #define t_( ... ) ((test){__VA_ARGS__}) int main( void ) { init_tap_c_(); testSlice tests = slice_c_( test, t_( c_Jan, "c_Jan" ), t_( c_Feb, "c_Feb" ), t_( c_Mar, "c_Mar" ), t_( c_Apr, "c_Apr" ), t_( c_May, "c_May" ), t_( c_Jun, "c_Jun" ), t_( c_Jul, "c_Jul" ), t_( c_Aug, "c_Aug" ), t_( c_Sep, "c_Sep" ), t_( c_Oct, "c_Oct" ), t_( c_Nov, "c_Nov" ), t_( c_Dec, "c_Dec" ) ); for_each_c_( test const*, t, tests ) { cChars chars = c_c( stringify_month_c( t->month ) ); bool res = chars_is_c( chars, t->exp ); tap_descf_c( res, "test %s", t->exp ); } return finish_tap_c_(); }
days
days_per_month_c
#define days_per_month_c_( Month, Year ) \ days_per_month_c( Month, is_leap_year_c( Year ) ) int8_t days_per_month_c( c_Month month, bool leapYear );
Returns the number of days a month has.
#include "clingo/lang/expect.h" #include "clingo/time/c_Month.h" TEMP_SLICE_DEF_C_( test, { c_Month month; int8_t expF; int8_t expT; } ) #define t_( ... ) ((test){__VA_ARGS__}) int main( void ) { init_tap_c_(); testSlice tests = slice_c_( test, t_( c_Jan, 31, 31 ), t_( c_Feb, 28, 29 ), t_( c_Mar, 31, 31 ), t_( c_Apr, 30, 30 ), t_( c_May, 31, 31 ), t_( c_Jun, 30, 30 ), t_( c_Jul, 31, 31 ), t_( c_Aug, 31, 31 ), t_( c_Sep, 30, 30 ), t_( c_Oct, 31, 31 ), t_( c_Nov, 30, 30 ), t_( c_Dec, 31, 31 ) ); for_each_c_( test const*, t, tests ) { char const* monthStr = stringify_month_c( t->month ); int8_t days; days = days_per_month_c( t->month, false ); tap_descf_c( days == t->expF, "%s no leap year: %d", monthStr, days ); days = days_per_month_c( t->month, true ); tap_descf_c( days == t->expT, "%s leap year: %d", monthStr, days ); } return finish_tap_c_(); }
first_month_day_of_year_c
#define first_month_day_of_year_c_( Month, Year ) \ first_month_day_of_year_c( Month, is_leap_year_c( Year ) ) int16_t first_month_day_of_year_c( c_Month month, bool leapYear );
Returns the day in year of the first day in the month.
#include "clingo/lang/expect.h" #include "clingo/time/c_Month.h" TEMP_SLICE_DEF_C_( test, { c_Month month; int16_t expF; int16_t expT; } ) #define t_( ... ) ((test){__VA_ARGS__}) int main( void ) { init_tap_c_(); testSlice tests = slice_c_( test, t_( c_Jan, 1, 1 ), t_( c_Feb, 32, 32 ), t_( c_Mar, 60, 61 ), t_( c_Apr, 91, 92 ), t_( c_May, 121, 122 ), t_( c_Jun, 152, 153 ), t_( c_Jul, 182, 183 ), t_( c_Aug, 213, 214 ), t_( c_Sep, 244, 245 ), t_( c_Oct, 274, 275 ), t_( c_Nov, 305, 306 ), t_( c_Dec, 335, 336 ) ); for_each_c_( test const*, t, tests ) { char const* monthStr = stringify_month_c( t->month ); int16_t days; days = first_month_day_of_year_c( t->month, false ); tap_descf_c( days == t->expF, "%s no leap year: %d", monthStr, days ); days = first_month_day_of_year_c( t->month, true ); tap_descf_c( days == t->expT, "%s leap year: %d", monthStr, days ); } return finish_tap_c_(); }
first_month_of_quarter_c
c_Month first_month_of_quarter_c( c_Month month );
Returns the first month in the quarter of the month.
#include "clingo/lang/expect.h" #include "clingo/time/c_Month.h" TEMP_SLICE_DEF_C_( test, { c_Month month; c_Month exp; } ) #define t_( ... ) ((test){__VA_ARGS__}) int main( void ) { init_tap_c_(); testSlice tests = slice_c_( test, t_( c_Jan, c_Jan ), t_( c_Feb, c_Jan ), t_( c_Mar, c_Jan ), t_( c_Apr, c_Apr ), t_( c_May, c_Apr ), t_( c_Jun, c_Apr ), t_( c_Jul, c_Jul ), t_( c_Aug, c_Jul ), t_( c_Sep, c_Jul ), t_( c_Oct, c_Oct ), t_( c_Nov, c_Oct ), t_( c_Dec, c_Oct ) ); for_each_c_( test const*, t, tests ) { c_Month const res = first_month_of_quarter_c( t->month ); tap_descf_c( res == t->exp, "%s -> %s", stringify_month_c( t->month ), stringify_month_c( res ) ); } return finish_tap_c_(); }
itr
next_month_c
c_Month next_month_c( c_Month m );
Returns the month after m.
prev_month_c
c_Month prev_month_c( c_Month m );
Returns the month before m.
text
get_month_abbrev_c
cVarChars get_month_abbrev_c( c_Month month, cVarChars chars );
Writes the local abbreviation for the month into the chars buffer.
#include "clingo/lang/expect.h" #include "clingo/lang/locale.h" #include "clingo/time/c_Month.h" #include "clingo/type/cChars.h" TEMP_SLICE_DEF_C_( test, { c_Month month; char const* exp; } ) #define t_( ... ) ((test){__VA_ARGS__}) int main( void ) { init_tap_c_(); set_locale_c( LC_TIME, "C" ); // For every system the same output testSlice tests = slice_c_( test, t_( c_Jan, "Jan" ), t_( c_Feb, "Feb" ), t_( c_Mar, "Mar" ), t_( c_Apr, "Apr" ), t_( c_May, "May" ), t_( c_Jun, "Jun" ), t_( c_Jul, "Jul" ), t_( c_Aug, "Aug" ), t_( c_Sep, "Sep" ), t_( c_Oct, "Oct" ), t_( c_Nov, "Nov" ), t_( c_Dec, "Dec" ) ); for_each_c_( test const*, t, tests ) { cVarChars varChars = scalars_c_( 16, char ); varChars = get_month_abbrev_c( t->month, varChars ); cChars chars = as_chars_c( varChars ); bool res = chars_is_c( chars, t->exp ); tap_descf_c( res, "test %s", t->exp ); } return finish_tap_c_(); }
get_month_name_c
cVarChars get_month_name_c( c_Month month, cVarChars chars );
Writes the local name for the month into the chars buffer.
#include "clingo/lang/expect.h" #include "clingo/lang/locale.h" #include "clingo/time/c_Month.h" #include "clingo/type/cChars.h" TEMP_SLICE_DEF_C_( test, { c_Month month; char const* exp; } ) #define t_( ... ) ((test){__VA_ARGS__}) int main( void ) { init_tap_c_(); set_locale_c( LC_TIME, "C" ); // For every system the same output testSlice tests = slice_c_( test, t_( c_Jan, "January" ), t_( c_Feb, "February" ), t_( c_Mar, "March" ), t_( c_Apr, "April" ), t_( c_May, "May" ), t_( c_Jun, "June" ), t_( c_Jul, "July" ), t_( c_Aug, "August" ), t_( c_Sep, "September" ), t_( c_Oct, "October" ), t_( c_Nov, "November" ), t_( c_Dec, "December" ) ); for_each_c_( test const*, t, tests ) { cVarChars varChars = scalars_c_( 16, char ); varChars = get_month_name_c( t->month, varChars ); cChars chars = as_chars_c( varChars ); bool res = chars_is_c( chars, t->exp ); tap_descf_c( res, "test %s", t->exp ); } return finish_tap_c_(); }
io
The read and write function are using the following format:
M |
The month as a number without a leading character |
1 to 12 |
_M |
The month as a number with a leading space |
1 to 12 |
MM |
The month as a number with a leading zero |
01 to 12 |
MMM |
The abbreviated localized month name |
Jan to Dec |
MMMM |
The localized month name |
January to December |
read_month_c
#define read_month_c_( Sca, Month ) \ read_month_c( (Sca), (Month), "" ) bool read_month_c( cScanner sca[static 1], c_Month month[static 1], char const fmt[static 1] );
Reads a c_Month value from a text with a scanner. The function will use "MMM" as default format.
write_month_c
#define write_month_c_( Rec, Month ) \ write_month_c( (Rec), (Month), "" ) bool write_month_c( cRecorder rec[static 1], c_Month month, char const fmt[static 1] );
Writes a c_Month value into the recorder. The function will use "MMM" as default format.