CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
date_time_format_info.h
1
2#pragma once
3
4#include <mutex>
5#include <system/globalization/calendar.h>
6#include <system/iformatprovider.h>
7#include <system/icloneable.h>
8#include <system/nullable.h>
9#include <system/globalization/details/date_time_format_data_ptr.h>
10#include <system/globalization/details/date_time_format_flags.h>
11#include <system/globalization/details/culture_data_ptr.h>
12#include <system/details/spin_lock.h>
13#include <system/details/lazy.h>
14
15namespace System { namespace Globalization {
16
17namespace Details {
18 class DateTimeFormatInfoReader;
19 namespace DateTimeTokenization { class Tokenizer; }
20}
21
25
30class ASPOSECPP_SHARED_CLASS DateTimeFormatInfo final
31 : virtual public Object
32 , public IFormatProvider
33 , public ICloneable
34{
36 RTTI_INFO(DateTimeFormatInfo, ::System::BaseTypesInfo<System::Object>)
37
38 friend class CultureInfo;
39 friend class Details::DateTimeTokenization::Tokenizer;
40
41public:
43 ASPOSECPP_SHARED_API DateTimeFormatInfo();
44
45 // IFormatProvider methods
46
50 ASPOSECPP_SHARED_API SharedPtr<Object> GetFormat(const TypeInfo& format_type) override;
51
52 // ICloneable methods
53
56 ASPOSECPP_SHARED_API SharedPtr<Object> Clone() override;
57
58 // DateTimeFormatInfo methods
59
62 ASPOSECPP_SHARED_API bool get_IsReadOnly() const;
63
66 ASPOSECPP_SHARED_API String get_ShortDatePattern() const;
69 ASPOSECPP_SHARED_API void set_ShortDatePattern(const String& value);
70
73 ASPOSECPP_SHARED_API String get_ShortTimePattern() const;
76 ASPOSECPP_SHARED_API void set_ShortTimePattern(const String& value);
77
80 ASPOSECPP_SHARED_API String get_LongDatePattern() const;
83 ASPOSECPP_SHARED_API void set_LongDatePattern(const String& value);
84
87 ASPOSECPP_SHARED_API String get_LongTimePattern() const;
90 ASPOSECPP_SHARED_API void set_LongTimePattern(const String& value);
91
94 ASPOSECPP_SHARED_API String get_DateSeparator() const;
97 ASPOSECPP_SHARED_API void set_DateSeparator(const String& value);
98
101 ASPOSECPP_SHARED_API String get_TimeSeparator() const;
104 ASPOSECPP_SHARED_API void set_TimeSeparator(const String& value);
105
108 ASPOSECPP_SHARED_API String get_PMDesignator() const;
111 ASPOSECPP_SHARED_API void set_PMDesignator(const String& value);
112
115 ASPOSECPP_SHARED_API String get_AMDesignator() const;
118 ASPOSECPP_SHARED_API void set_AMDesignator(const String& value);
119
122 ASPOSECPP_SHARED_API ArrayPtr<String> get_AbbreviatedDayNames() const;
125 ASPOSECPP_SHARED_API void set_AbbreviatedDayNames(const ArrayPtr<String>& value);
126
129 ASPOSECPP_SHARED_API ArrayPtr<String> get_AbbreviatedMonthGenitiveNames() const;
132 ASPOSECPP_SHARED_API void set_AbbreviatedMonthGenitiveNames(const ArrayPtr<String>& value);
133
136 ASPOSECPP_SHARED_API ArrayPtr<String> get_AbbreviatedMonthNames() const;
139 ASPOSECPP_SHARED_API void set_AbbreviatedMonthNames(const ArrayPtr<String>& value);
140
143 ASPOSECPP_SHARED_API SharedPtr<Calendar> get_Calendar() const;
146 ASPOSECPP_SHARED_API void set_Calendar(const SharedPtr<Calendar>& value);
147
150 ASPOSECPP_SHARED_API CalendarWeekRule get_CalendarWeekRule() const;
153 ASPOSECPP_SHARED_API void set_CalendarWeekRule(CalendarWeekRule value);
154
157 ASPOSECPP_SHARED_API ArrayPtr<String> get_DayNames() const;
160 ASPOSECPP_SHARED_API void set_DayNames(const ArrayPtr<String>& value);
161
164 ASPOSECPP_SHARED_API DayOfWeek get_FirstDayOfWeek() const;
167 ASPOSECPP_SHARED_API void set_FirstDayOfWeek(DayOfWeek value);
168
171 ASPOSECPP_SHARED_API String get_FullDateTimePattern() const;
174 ASPOSECPP_SHARED_API void set_FullDateTimePattern(const String& value);
175
178 ASPOSECPP_SHARED_API String get_MonthDayPattern() const;
181 ASPOSECPP_SHARED_API void set_MonthDayPattern(const String& value);
182
185 ASPOSECPP_SHARED_API ArrayPtr<String> get_MonthGenitiveNames() const;
188 ASPOSECPP_SHARED_API void set_MonthGenitiveNames(const ArrayPtr<String>& value);
189
192 ASPOSECPP_SHARED_API ArrayPtr<String> get_MonthNames() const;
195 ASPOSECPP_SHARED_API void set_MonthNames(const ArrayPtr<String>& value);
196
199 ASPOSECPP_SHARED_API String get_RFC1123Pattern() const;
200
203 ASPOSECPP_SHARED_API ArrayPtr<String> get_ShortestDayNames() const;
206 ASPOSECPP_SHARED_API void set_ShortestDayNames(const ArrayPtr<String>& value);
207
210 ASPOSECPP_SHARED_API String get_SortableDateTimePattern() const;
211
214 ASPOSECPP_SHARED_API String get_UniversalSortableDateTimePattern() const;
215
218 ASPOSECPP_SHARED_API String get_YearMonthPattern() const;
221 ASPOSECPP_SHARED_API void set_YearMonthPattern(const String& value);
222
226 ASPOSECPP_SHARED_API String GetAbbreviatedDayName(DayOfWeek day_of_week) const;
227
231 ASPOSECPP_SHARED_API String GetAbbreviatedEraName(int era) const;
232
236 ASPOSECPP_SHARED_API String GetAbbreviatedMonthName(int month) const;
237
241 ASPOSECPP_SHARED_API String GetDayName(DayOfWeek day_of_week) const;
242
246 ASPOSECPP_SHARED_API int GetEra(const String& era_name) const;
247
251 ASPOSECPP_SHARED_API String GetEraName(int era) const;
252
256 ASPOSECPP_SHARED_API String GetMonthName(int month) const;
257
261 ASPOSECPP_SHARED_API String GetMonthGenitiveName(int month) const;
262
266 ASPOSECPP_SHARED_API String GetLeapYearMonthName(int month) const;
267
270 ASPOSECPP_SHARED_API String get_NativeCalendarName() const;
271
274 ASPOSECPP_SHARED_API ArrayPtr<String> GetAllDateTimePatterns() const;
275
278 ASPOSECPP_SHARED_API ArrayPtr<String> GetAllDateTimePatterns(char16_t format) const;
279
281 ASPOSECPP_SHARED_API void SetAllDateTimePatterns(const ArrayPtr<String>& patterns, char16_t format);
282
284 ASPOSECPP_SHARED_API String GetShortestDayName(DayOfWeek day_of_week) const;
285
288 static ASPOSECPP_SHARED_API const DateTimeFormatInfoPtr& get_InvariantInfo();
291 static ASPOSECPP_SHARED_API DateTimeFormatInfoPtr get_CurrentInfo();
292
296 static ASPOSECPP_SHARED_API DateTimeFormatInfoPtr GetInstance(const IFormatProviderPtr& provider);
300 static ASPOSECPP_SHARED_API DateTimeFormatInfoPtr ReadOnly(const DateTimeFormatInfoPtr& info);
301
302 DateTimeFormatInfo& operator=(const DateTimeFormatInfo&) = delete;
303
304protected:
306 ASPOSECPP_SHARED_API ~DateTimeFormatInfo() override;
307
308private:
309 friend class Details::DateTimeFormatInfoReader;
310
311 using Lock = System::Details::OptionalSpinLock;
312 using LockContext = std::lock_guard<Lock>;
313
314 using Tokenizer = Details::DateTimeTokenization::Tokenizer;
315
317 const bool m_is_read_only;
319 const Details::CultureDataPtr m_culture_data;
321 Details::DateTimeFormatDataPtr m_data;
323 CalendarPtr m_calendar;
325 mutable Lock m_lockable;
327 const String m_culture_name;
328
330 mutable System::Details::Lazy<std::shared_ptr<Tokenizer>> m_tokenizer;
331
332 // Read-Write properties
333
335 mutable ArrayPtr<String> m_abbreviated_day_names;
337 mutable ArrayPtr<String> m_abbreviated_month_genitive_names;
339 mutable ArrayPtr<String> m_abbreviated_month_names;
341 mutable String m_am_designator;
343 mutable String m_date_separator;
345 mutable ArrayPtr<String> m_day_names;
347 mutable Nullable<DayOfWeek> m_first_day_of_week;
349 mutable String m_full_date_time_pattern;
351 mutable String m_long_date_pattern;
353 mutable ArrayPtr<String> m_long_date_patterns;
355 mutable String m_long_time_pattern;
357 mutable ArrayPtr<String> m_long_time_patterns;
359 mutable String m_month_day_pattern;
361 mutable ArrayPtr<String> m_month_genitive_names;
363 mutable ArrayPtr<String> m_month_names;
365 mutable String m_pm_designator;
367 mutable String m_short_date_pattern;
369 mutable ArrayPtr<String> m_short_date_patterns;
371 mutable ArrayPtr<String> m_shortest_day_names;
373 mutable String m_short_time_pattern;
375 mutable ArrayPtr<String> m_short_time_patterns;
377 mutable String m_time_separator;
379 mutable Nullable<CalendarWeekRule> m_week_rule;
381 mutable String m_year_month_pattern;
383 mutable ArrayPtr<String> m_year_month_patterns;
384
385 // Read-Only properties
386
388 mutable ArrayPtr<String> m_abbreviated_english_era_names;
390 mutable ArrayPtr<String> m_abbreviated_era_names;
392 mutable ArrayPtr<String> m_era_names;
394 mutable ArrayPtr<String> m_leap_year_month_names;
396 mutable String m_native_calendar_name;
398 mutable String m_decimal_separator;
400 mutable Nullable<Details::DateTimeFormatFlags> m_format_flags;
401
402 // Calculated properties
403
405 mutable String m_general_long_time_pattern;
407 mutable String m_general_short_time_pattern;
409 mutable String m_date_time_offset_pattern;
410
411 // Readonly patterns
412 static const String RFC1123Pattern;
413 static const String SortablePattern;
414 static const String UniversalSortablePattern;
415 static const String RoundtripPattern;
416 static const String RoundtripUnfixedPattern;
417 static const String ISO8601Pattern;
418
420 static const String StandardFormats;
421
424 bool is_read_only = false, bool is_preload_all_data = false);
425 MEMBER_FUNCTION_MAKE_OBJECT(DateTimeFormatInfo,
426 CODEPORTING_ARGS(const DateTimeFormatInfo &copy, bool is_read_only = false, bool is_preload_all_data = false),
427 CODEPORTING_ARGS(copy, is_read_only, is_preload_all_data)
428 );
429
435 DateTimeFormatInfo(const Details::CultureDataPtr& culture_data, const CalendarPtr& calendar,
436 bool is_read_only = false, bool is_preload_all_data = false);
437 MEMBER_FUNCTION_MAKE_OBJECT(DateTimeFormatInfo,
438 CODEPORTING_ARGS(const Details::CultureDataPtr& culture_data, const CalendarPtr& calendar, bool is_read_only = false, bool is_preload_all_data = false),
439 CODEPORTING_ARGS(culture_data, calendar, is_read_only, is_preload_all_data)
440 );
441
443 void PreloadAllData();
445 void VerifyWritable() const;
447 Lock& Lockable() const { return m_lockable; }
449 Details::DateTimeFormatData& Data() const;
451 void OnChangeProperty(const LockContext&, const char16_t* property_name);
453 const Tokenizer& GetTokenizer(const Details::DateTimeFormatInfoReader& dtfi_reader) const;
455 void ResetTokenizer(const LockContext&);
456
457 // Methods below returns cached values and creates them if they don't exist yet
458 const String& LongTimePattern(const LockContext&) const;
459 const String& MonthDayPattern(const LockContext&) const;
460 const String& PMDesignator(const LockContext&) const;
461 const String& ShortDatePattern(const LockContext&) const;
462 const String& ShortTimePattern(const LockContext&) const;
463 const String& TimeSeparator(const LockContext&) const;
464 const String& YearMonthPattern(const LockContext&) const;
465 const ArrayPtr<String>& AbbreviatedDayNames(const LockContext&) const;
466 const ArrayPtr<String>& ShortestDayNames(const LockContext&) const;
467 const ArrayPtr<String>& DayNames(const LockContext&) const;
468 const ArrayPtr<String>& AbbreviatedMonthNames(const LockContext&) const;
469 const ArrayPtr<String>& MonthNames(const LockContext&) const;
470 const ArrayPtr<String>& LeapYearMonthNames(const LockContext&) const;
471 const String& LongDatePattern(const LockContext&) const;
472 const String& FullDateTimePattern(const LockContext&) const;
473 DayOfWeek FirstDayOfWeek(const LockContext&) const;
474 const ArrayPtr<String>& AbbreviatedMonthGenitiveNames(const LockContext&) const;
475 CalendarWeekRule WeekRule(const LockContext&) const;
476 const String& AMDesignator(const LockContext&) const;
477 const ArrayPtr<String>& MonthGenitiveNames(const LockContext&) const;
478 const String& DateSeparator(const LockContext&) const;
479
480 const ArrayPtr<String>& ShortDatePatterns(const LockContext&) const;
481 const ArrayPtr<String>& LongDatePatterns(const LockContext&) const;
482 const ArrayPtr<String>& ShortTimePatterns(const LockContext&) const;
483 const ArrayPtr<String>& LongTimePatterns(const LockContext&) const;
484 const ArrayPtr<String>& YearMonthPatterns(const LockContext&) const;
485
486 const ArrayPtr<String>& AbbreviatedEraNames(const LockContext&) const;
487 const ArrayPtr<String>& EraNames(const LockContext&) const;
488 const ArrayPtr<String>& AbbreviatedEnglishEraNames(const LockContext&) const;
489 const String& NativeCalendarName(const LockContext&) const;
490 const String& DecimalSeparator(const LockContext&) const;
491 const Details::DateTimeFormatFlags FormatFlags(const LockContext&) const;
492 const String& CultureName(const LockContext&) const;
493
494 const String& GeneralLongTimePattern(const LockContext&) const;
495 const String& GeneralShortTimePattern(const LockContext&) const;
496 const String& DateTimeOffsetPattern(const LockContext&) const;
497
498 // Gets specific patterns
499 ArrayPtr<String> AllShortDatePatterns(const LockContext&) const;
500 ArrayPtr<String> AllLongDatePatterns(const LockContext&) const;
501 ArrayPtr<String> AllShortTimePatterns(const LockContext&) const;
502 ArrayPtr<String> AllLongTimePatterns(const LockContext&) const;
503 ArrayPtr<String> AllYearMonthPatterns(const LockContext&) const;
504 ArrayPtr<String> AllDateTimePatterns(char16_t format, const LockContext&) const;
505
506 const String& GetAbbreviatedDayName(DayOfWeek day_of_week, const LockContext&) const;
507 const String& GetAbbreviatedEraName(int era, const LockContext&) const;
508 const String& GetAbbreviatedMonthName(int month, const LockContext&) const;
509 const String& GetDayName(DayOfWeek day_of_week, const LockContext&) const;
510 int GetEra(const String& era_name, const LockContext&) const;
511 const String& GetEraName(int era, const LockContext&) const;
512 const String& GetMonthName(int month, const LockContext&) const;
513 const String& GetMonthGenitiveName(int month, const LockContext&) const;
514 const String& GetLeapYearMonthName(int month, const LockContext&) const;
515 const String& GetShortestDayName(DayOfWeek day_of_week, const LockContext&) const;
516
517 static const DateTimeFormatInfoPtr& InvariantInfo();
518};
519
520}} // namespace System::Globalization
Calendar which defines how the dates are handled, calculated, formatted, etc. Setter operations are o...
Definition: calendar.h:38
Collection of culture-specific values and algorithms. Setter operations are only enabled on non-read-...
Definition: culture_info.h:32
Set of date and time formatting parameters. Objects of this class should only be allocated using Syst...
Definition: date_time_format_info.h:34
Defies a method that enables object cloning - creating a copy of an object. Objects of this class sho...
Definition: icloneable.h:16
Defines a method that provides formatting information. Objects of this class should only be allocated...
Definition: iformatprovider.h:18
Forward declaration.
Definition: nullable.h:74
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:62
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
String class used across the library. Is a substitute for C# System.String when translating code....
Definition: string.h:122
Represents a particular type and provides information about it.
Definition: type_info.h:109
DateTimeFormatFlags
Bit flags, used in parsing/formatting.
Definition: date_time_format_flags.h:11
SharedPtr< DateTimeFormatInfo > DateTimeFormatInfoPtr
DateTimeFormatInfo info pointer.
Definition: date_time_format_info.h:24
CalendarWeekRule
How to determine first week of the year.
Definition: calendar_week_rule.h:11
Definition: db_command.h:9
DayOfWeek
Enumeration that represents a day of week.
Definition: day_of_week.h:11