From 6e9efe623fc1105836d6c2114c5ddc9fbf57bee9 Mon Sep 17 00:00:00 2001 From: aneporada Date: Sat, 7 Feb 2026 00:14:51 +0300 Subject: Add fast timezone id validation function commit_hash:a2c20ffc1acc83385a3195d76eb95818b3ad6a67 --- library/cpp/type_info/tz/is_valid_gen.h | 2 + library/cpp/type_info/tz/tz.cpp | 2 +- library/cpp/type_info/tz/tz.gen | 600 -------------------------------- library/cpp/type_info/tz/tz.h | 7 + library/cpp/type_info/tz/tz_gen.h | 600 ++++++++++++++++++++++++++++++++ library/cpp/type_info/tz/tz_ut.cpp | 8 + library/cpp/type_info/tz/update.py | 13 +- 7 files changed, 629 insertions(+), 603 deletions(-) create mode 100644 library/cpp/type_info/tz/is_valid_gen.h delete mode 100644 library/cpp/type_info/tz/tz.gen create mode 100644 library/cpp/type_info/tz/tz_gen.h (limited to 'library/cpp/type_info') diff --git a/library/cpp/type_info/tz/is_valid_gen.h b/library/cpp/type_info/tz/is_valid_gen.h new file mode 100644 index 00000000000..70f1029deff --- /dev/null +++ b/library/cpp/type_info/tz/is_valid_gen.h @@ -0,0 +1,2 @@ +// this file is generated, do not edit +return idx < 600 && idx != 586 && idx != 593; diff --git a/library/cpp/type_info/tz/tz.cpp b/library/cpp/type_info/tz/tz.cpp index b2c3fc9d7f0..409519dc976 100644 --- a/library/cpp/type_info/tz/tz.cpp +++ b/library/cpp/type_info/tz/tz.cpp @@ -5,7 +5,7 @@ namespace NTi { namespace { static constexpr std::initializer_list TimezonesInit = { -#include "tz.gen" +#include "tz_gen.h" }; static constexpr TArrayRef Timezones(TimezonesInit); diff --git a/library/cpp/type_info/tz/tz.gen b/library/cpp/type_info/tz/tz.gen deleted file mode 100644 index e71c9cc81e7..00000000000 --- a/library/cpp/type_info/tz/tz.gen +++ /dev/null @@ -1,600 +0,0 @@ -"GMT", -"Europe/Moscow", -"Africa/Abidjan", -"Africa/Accra", -"Africa/Addis_Ababa", -"Africa/Algiers", -"Africa/Asmara", -"Africa/Asmera", -"Africa/Bamako", -"Africa/Bangui", -"Africa/Banjul", -"Africa/Bissau", -"Africa/Blantyre", -"Africa/Brazzaville", -"Africa/Bujumbura", -"Africa/Cairo", -"Africa/Casablanca", -"Africa/Ceuta", -"Africa/Conakry", -"Africa/Dakar", -"Africa/Dar_es_Salaam", -"Africa/Djibouti", -"Africa/Douala", -"Africa/El_Aaiun", -"Africa/Freetown", -"Africa/Gaborone", -"Africa/Harare", -"Africa/Johannesburg", -"Africa/Juba", -"Africa/Kampala", -"Africa/Khartoum", -"Africa/Kigali", -"Africa/Kinshasa", -"Africa/Lagos", -"Africa/Libreville", -"Africa/Lome", -"Africa/Luanda", -"Africa/Lubumbashi", -"Africa/Lusaka", -"Africa/Malabo", -"Africa/Maputo", -"Africa/Maseru", -"Africa/Mbabane", -"Africa/Mogadishu", -"Africa/Monrovia", -"Africa/Nairobi", -"Africa/Ndjamena", -"Africa/Niamey", -"Africa/Nouakchott", -"Africa/Ouagadougou", -"Africa/Porto-Novo", -"Africa/Sao_Tome", -"Africa/Timbuktu", -"Africa/Tripoli", -"Africa/Tunis", -"Africa/Windhoek", -"America/Adak", -"America/Anchorage", -"America/Anguilla", -"America/Antigua", -"America/Araguaina", -"America/Argentina/Buenos_Aires", -"America/Argentina/Catamarca", -"America/Argentina/ComodRivadavia", -"America/Argentina/Cordoba", -"America/Argentina/Jujuy", -"America/Argentina/La_Rioja", -"America/Argentina/Mendoza", -"America/Argentina/Rio_Gallegos", -"America/Argentina/Salta", -"America/Argentina/San_Juan", -"America/Argentina/San_Luis", -"America/Argentina/Tucuman", -"America/Argentina/Ushuaia", -"America/Aruba", -"America/Asuncion", -"America/Atikokan", -"America/Atka", -"America/Bahia", -"America/Bahia_Banderas", -"America/Barbados", -"America/Belem", -"America/Belize", -"America/Blanc-Sablon", -"America/Boa_Vista", -"America/Bogota", -"America/Boise", -"America/Buenos_Aires", -"America/Cambridge_Bay", -"America/Campo_Grande", -"America/Cancun", -"America/Caracas", -"America/Catamarca", -"America/Cayenne", -"America/Cayman", -"America/Chicago", -"America/Chihuahua", -"America/Coral_Harbour", -"America/Cordoba", -"America/Costa_Rica", -"America/Creston", -"America/Cuiaba", -"America/Curacao", -"America/Danmarkshavn", -"America/Dawson", -"America/Dawson_Creek", -"America/Denver", -"America/Detroit", -"America/Dominica", -"America/Edmonton", -"America/Eirunepe", -"America/El_Salvador", -"America/Ensenada", -"America/Fort_Nelson", -"America/Fort_Wayne", -"America/Fortaleza", -"America/Glace_Bay", -"America/Godthab", -"America/Goose_Bay", -"America/Grand_Turk", -"America/Grenada", -"America/Guadeloupe", -"America/Guatemala", -"America/Guayaquil", -"America/Guyana", -"America/Halifax", -"America/Havana", -"America/Hermosillo", -"America/Indiana/Indianapolis", -"America/Indiana/Knox", -"America/Indiana/Marengo", -"America/Indiana/Petersburg", -"America/Indiana/Tell_City", -"America/Indiana/Vevay", -"America/Indiana/Vincennes", -"America/Indiana/Winamac", -"America/Indianapolis", -"America/Inuvik", -"America/Iqaluit", -"America/Jamaica", -"America/Jujuy", -"America/Juneau", -"America/Kentucky/Louisville", -"America/Kentucky/Monticello", -"America/Knox_IN", -"America/Kralendijk", -"America/La_Paz", -"America/Lima", -"America/Los_Angeles", -"America/Louisville", -"America/Lower_Princes", -"America/Maceio", -"America/Managua", -"America/Manaus", -"America/Marigot", -"America/Martinique", -"America/Matamoros", -"America/Mazatlan", -"America/Mendoza", -"America/Menominee", -"America/Merida", -"America/Metlakatla", -"America/Mexico_City", -"America/Miquelon", -"America/Moncton", -"America/Monterrey", -"America/Montevideo", -"America/Montreal", -"America/Montserrat", -"America/Nassau", -"America/New_York", -"America/Nipigon", -"America/Nome", -"America/Noronha", -"America/North_Dakota/Beulah", -"America/North_Dakota/Center", -"America/North_Dakota/New_Salem", -"America/Ojinaga", -"America/Panama", -"America/Pangnirtung", -"America/Paramaribo", -"America/Phoenix", -"America/Port-au-Prince", -"America/Port_of_Spain", -"America/Porto_Acre", -"America/Porto_Velho", -"America/Puerto_Rico", -"America/Punta_Arenas", -"America/Rainy_River", -"America/Rankin_Inlet", -"America/Recife", -"America/Regina", -"America/Resolute", -"America/Rio_Branco", -"America/Rosario", -"America/Santa_Isabel", -"America/Santarem", -"America/Santiago", -"America/Santo_Domingo", -"America/Sao_Paulo", -"America/Scoresbysund", -"America/Shiprock", -"America/Sitka", -"America/St_Barthelemy", -"America/St_Johns", -"America/St_Kitts", -"America/St_Lucia", -"America/St_Thomas", -"America/St_Vincent", -"America/Swift_Current", -"America/Tegucigalpa", -"America/Thule", -"America/Thunder_Bay", -"America/Tijuana", -"America/Toronto", -"America/Tortola", -"America/Vancouver", -"America/Virgin", -"America/Whitehorse", -"America/Winnipeg", -"America/Yakutat", -"America/Yellowknife", -"Antarctica/Casey", -"Antarctica/Davis", -"Antarctica/DumontDUrville", -"Antarctica/Macquarie", -"Antarctica/Mawson", -"Antarctica/McMurdo", -"Antarctica/Palmer", -"Antarctica/Rothera", -"Antarctica/South_Pole", -"Antarctica/Syowa", -"Antarctica/Troll", -"Antarctica/Vostok", -"Arctic/Longyearbyen", -"Asia/Aden", -"Asia/Almaty", -"Asia/Amman", -"Asia/Anadyr", -"Asia/Aqtau", -"Asia/Aqtobe", -"Asia/Ashgabat", -"Asia/Ashkhabad", -"Asia/Atyrau", -"Asia/Baghdad", -"Asia/Bahrain", -"Asia/Baku", -"Asia/Bangkok", -"Asia/Barnaul", -"Asia/Beirut", -"Asia/Bishkek", -"Asia/Brunei", -"Asia/Calcutta", -"Asia/Chita", -"Asia/Choibalsan", -"Asia/Chongqing", -"Asia/Chungking", -"Asia/Colombo", -"Asia/Dacca", -"Asia/Damascus", -"Asia/Dhaka", -"Asia/Dili", -"Asia/Dubai", -"Asia/Dushanbe", -"Asia/Famagusta", -"Asia/Gaza", -"Asia/Harbin", -"Asia/Hebron", -"Asia/Ho_Chi_Minh", -"Asia/Hong_Kong", -"Asia/Hovd", -"Asia/Irkutsk", -"Asia/Istanbul", -"Asia/Jakarta", -"Asia/Jayapura", -"Asia/Jerusalem", -"Asia/Kabul", -"Asia/Kamchatka", -"Asia/Karachi", -"Asia/Kashgar", -"Asia/Kathmandu", -"Asia/Katmandu", -"Asia/Khandyga", -"Asia/Kolkata", -"Asia/Krasnoyarsk", -"Asia/Kuala_Lumpur", -"Asia/Kuching", -"Asia/Kuwait", -"Asia/Macao", -"Asia/Macau", -"Asia/Magadan", -"Asia/Makassar", -"Asia/Manila", -"Asia/Muscat", -"Asia/Nicosia", -"Asia/Novokuznetsk", -"Asia/Novosibirsk", -"Asia/Omsk", -"Asia/Oral", -"Asia/Phnom_Penh", -"Asia/Pontianak", -"Asia/Pyongyang", -"Asia/Qatar", -"Asia/Qyzylorda", -"Asia/Rangoon", -"Asia/Riyadh", -"Asia/Saigon", -"Asia/Sakhalin", -"Asia/Samarkand", -"Asia/Seoul", -"Asia/Shanghai", -"Asia/Singapore", -"Asia/Srednekolymsk", -"Asia/Taipei", -"Asia/Tashkent", -"Asia/Tbilisi", -"Asia/Tehran", -"Asia/Tel_Aviv", -"Asia/Thimbu", -"Asia/Thimphu", -"Asia/Tokyo", -"Asia/Tomsk", -"Asia/Ujung_Pandang", -"Asia/Ulaanbaatar", -"Asia/Ulan_Bator", -"Asia/Urumqi", -"Asia/Ust-Nera", -"Asia/Vientiane", -"Asia/Vladivostok", -"Asia/Yakutsk", -"Asia/Yangon", -"Asia/Yekaterinburg", -"Asia/Yerevan", -"Atlantic/Azores", -"Atlantic/Bermuda", -"Atlantic/Canary", -"Atlantic/Cape_Verde", -"Atlantic/Faeroe", -"Atlantic/Faroe", -"Atlantic/Jan_Mayen", -"Atlantic/Madeira", -"Atlantic/Reykjavik", -"Atlantic/South_Georgia", -"Atlantic/St_Helena", -"Atlantic/Stanley", -"Australia/ACT", -"Australia/Adelaide", -"Australia/Brisbane", -"Australia/Broken_Hill", -"Australia/Canberra", -"Australia/Currie", -"Australia/Darwin", -"Australia/Eucla", -"Australia/Hobart", -"Australia/LHI", -"Australia/Lindeman", -"Australia/Lord_Howe", -"Australia/Melbourne", -"Australia/NSW", -"Australia/North", -"Australia/Perth", -"Australia/Queensland", -"Australia/South", -"Australia/Sydney", -"Australia/Tasmania", -"Australia/Victoria", -"Australia/West", -"Australia/Yancowinna", -"Brazil/Acre", -"Brazil/DeNoronha", -"Brazil/East", -"Brazil/West", -"CET", -"CST6CDT", -"Canada/Atlantic", -"Canada/Central", -"Canada/Eastern", -"Canada/Mountain", -"Canada/Newfoundland", -"Canada/Pacific", -"Canada/Saskatchewan", -"Canada/Yukon", -"Chile/Continental", -"Chile/EasterIsland", -"Cuba", -"EET", -"EST", -"EST5EDT", -"Egypt", -"Eire", -"Etc/GMT", -"Etc/GMT+0", -"Etc/GMT+1", -"Etc/GMT+10", -"Etc/GMT+11", -"Etc/GMT+12", -"Etc/GMT+2", -"Etc/GMT+3", -"Etc/GMT+4", -"Etc/GMT+5", -"Etc/GMT+6", -"Etc/GMT+7", -"Etc/GMT+8", -"Etc/GMT+9", -"Etc/GMT-0", -"Etc/GMT-1", -"Etc/GMT-10", -"Etc/GMT-11", -"Etc/GMT-12", -"Etc/GMT-13", -"Etc/GMT-14", -"Etc/GMT-2", -"Etc/GMT-3", -"Etc/GMT-4", -"Etc/GMT-5", -"Etc/GMT-6", -"Etc/GMT-7", -"Etc/GMT-8", -"Etc/GMT-9", -"Etc/GMT0", -"Etc/Greenwich", -"Etc/UCT", -"Etc/UTC", -"Etc/Universal", -"Etc/Zulu", -"Europe/Amsterdam", -"Europe/Andorra", -"Europe/Astrakhan", -"Europe/Athens", -"Europe/Belfast", -"Europe/Belgrade", -"Europe/Berlin", -"Europe/Bratislava", -"Europe/Brussels", -"Europe/Bucharest", -"Europe/Budapest", -"Europe/Busingen", -"Europe/Chisinau", -"Europe/Copenhagen", -"Europe/Dublin", -"Europe/Gibraltar", -"Europe/Guernsey", -"Europe/Helsinki", -"Europe/Isle_of_Man", -"Europe/Istanbul", -"Europe/Jersey", -"Europe/Kaliningrad", -"Europe/Kiev", -"Europe/Kirov", -"Europe/Lisbon", -"Europe/Ljubljana", -"Europe/London", -"Europe/Luxembourg", -"Europe/Madrid", -"Europe/Malta", -"Europe/Mariehamn", -"Europe/Minsk", -"Europe/Monaco", -"Europe/Nicosia", -"Europe/Oslo", -"Europe/Paris", -"Europe/Podgorica", -"Europe/Prague", -"Europe/Riga", -"Europe/Rome", -"Europe/Samara", -"Europe/San_Marino", -"Europe/Sarajevo", -"Europe/Saratov", -"Europe/Simferopol", -"Europe/Skopje", -"Europe/Sofia", -"Europe/Stockholm", -"Europe/Tallinn", -"Europe/Tirane", -"Europe/Tiraspol", -"Europe/Ulyanovsk", -"Europe/Uzhgorod", -"Europe/Vaduz", -"Europe/Vatican", -"Europe/Vienna", -"Europe/Vilnius", -"Europe/Volgograd", -"Europe/Warsaw", -"Europe/Zagreb", -"Europe/Zaporozhye", -"Europe/Zurich", -"Factory", -"GB", -"GB-Eire", -"GMT+0", -"GMT-0", -"GMT0", -"Greenwich", -"HST", -"Hongkong", -"Iceland", -"Indian/Antananarivo", -"Indian/Chagos", -"Indian/Christmas", -"Indian/Cocos", -"Indian/Comoro", -"Indian/Kerguelen", -"Indian/Mahe", -"Indian/Maldives", -"Indian/Mauritius", -"Indian/Mayotte", -"Indian/Reunion", -"Iran", -"Israel", -"Jamaica", -"Japan", -"Kwajalein", -"Libya", -"MET", -"MST", -"MST7MDT", -"Mexico/BajaNorte", -"Mexico/BajaSur", -"Mexico/General", -"NZ", -"NZ-CHAT", -"Navajo", -"PRC", -"PST8PDT", -"Pacific/Apia", -"Pacific/Auckland", -"Pacific/Bougainville", -"Pacific/Chatham", -"Pacific/Chuuk", -"Pacific/Easter", -"Pacific/Efate", -"Pacific/Enderbury", -"Pacific/Fakaofo", -"Pacific/Fiji", -"Pacific/Funafuti", -"Pacific/Galapagos", -"Pacific/Gambier", -"Pacific/Guadalcanal", -"Pacific/Guam", -"Pacific/Honolulu", -"Pacific/Johnston", -"Pacific/Kiritimati", -"Pacific/Kosrae", -"Pacific/Kwajalein", -"Pacific/Majuro", -"Pacific/Marquesas", -"Pacific/Midway", -"Pacific/Nauru", -"Pacific/Niue", -"Pacific/Norfolk", -"Pacific/Noumea", -"Pacific/Pago_Pago", -"Pacific/Palau", -"Pacific/Pitcairn", -"Pacific/Pohnpei", -"Pacific/Ponape", -"Pacific/Port_Moresby", -"Pacific/Rarotonga", -"Pacific/Saipan", -"Pacific/Samoa", -"Pacific/Tahiti", -"Pacific/Tarawa", -"Pacific/Tongatapu", -"Pacific/Truk", -"Pacific/Wake", -"Pacific/Wallis", -"Pacific/Yap", -"Poland", -"Portugal", -"ROC", -"ROK", -"Singapore", -"Turkey", -"UCT", -"US/Alaska", -"US/Aleutian", -"US/Arizona", -"US/Central", -"US/East-Indiana", -"US/Eastern", -"US/Hawaii", -"US/Indiana-Starke", -"US/Michigan", -"US/Mountain", -"US/Pacific", -"",//US/Pacific-New -"US/Samoa", -"UTC", -"Universal", -"W-SU", -"WET", -"Zulu", -"",//localtime -"posixrules", -"Asia/Qostanay", -"America/Nuuk", -"America/Ciudad_Juarez", -"Europe/Kyiv", -"Pacific/Kanton", diff --git a/library/cpp/type_info/tz/tz.h b/library/cpp/type_info/tz/tz.h index b683269af29..51ccd15276a 100644 --- a/library/cpp/type_info/tz/tz.h +++ b/library/cpp/type_info/tz/tz.h @@ -6,4 +6,11 @@ namespace NTi { TArrayRef GetTimezones(); +inline bool IsValidTimezoneIndex(size_t idx) { + // this function is equivalent to: + // const auto zones = GetTimezones(); + // return idx < zones.size() && !zones[idx].empty(); + #include "is_valid_gen.h" +} + } diff --git a/library/cpp/type_info/tz/tz_gen.h b/library/cpp/type_info/tz/tz_gen.h new file mode 100644 index 00000000000..e71c9cc81e7 --- /dev/null +++ b/library/cpp/type_info/tz/tz_gen.h @@ -0,0 +1,600 @@ +"GMT", +"Europe/Moscow", +"Africa/Abidjan", +"Africa/Accra", +"Africa/Addis_Ababa", +"Africa/Algiers", +"Africa/Asmara", +"Africa/Asmera", +"Africa/Bamako", +"Africa/Bangui", +"Africa/Banjul", +"Africa/Bissau", +"Africa/Blantyre", +"Africa/Brazzaville", +"Africa/Bujumbura", +"Africa/Cairo", +"Africa/Casablanca", +"Africa/Ceuta", +"Africa/Conakry", +"Africa/Dakar", +"Africa/Dar_es_Salaam", +"Africa/Djibouti", +"Africa/Douala", +"Africa/El_Aaiun", +"Africa/Freetown", +"Africa/Gaborone", +"Africa/Harare", +"Africa/Johannesburg", +"Africa/Juba", +"Africa/Kampala", +"Africa/Khartoum", +"Africa/Kigali", +"Africa/Kinshasa", +"Africa/Lagos", +"Africa/Libreville", +"Africa/Lome", +"Africa/Luanda", +"Africa/Lubumbashi", +"Africa/Lusaka", +"Africa/Malabo", +"Africa/Maputo", +"Africa/Maseru", +"Africa/Mbabane", +"Africa/Mogadishu", +"Africa/Monrovia", +"Africa/Nairobi", +"Africa/Ndjamena", +"Africa/Niamey", +"Africa/Nouakchott", +"Africa/Ouagadougou", +"Africa/Porto-Novo", +"Africa/Sao_Tome", +"Africa/Timbuktu", +"Africa/Tripoli", +"Africa/Tunis", +"Africa/Windhoek", +"America/Adak", +"America/Anchorage", +"America/Anguilla", +"America/Antigua", +"America/Araguaina", +"America/Argentina/Buenos_Aires", +"America/Argentina/Catamarca", +"America/Argentina/ComodRivadavia", +"America/Argentina/Cordoba", +"America/Argentina/Jujuy", +"America/Argentina/La_Rioja", +"America/Argentina/Mendoza", +"America/Argentina/Rio_Gallegos", +"America/Argentina/Salta", +"America/Argentina/San_Juan", +"America/Argentina/San_Luis", +"America/Argentina/Tucuman", +"America/Argentina/Ushuaia", +"America/Aruba", +"America/Asuncion", +"America/Atikokan", +"America/Atka", +"America/Bahia", +"America/Bahia_Banderas", +"America/Barbados", +"America/Belem", +"America/Belize", +"America/Blanc-Sablon", +"America/Boa_Vista", +"America/Bogota", +"America/Boise", +"America/Buenos_Aires", +"America/Cambridge_Bay", +"America/Campo_Grande", +"America/Cancun", +"America/Caracas", +"America/Catamarca", +"America/Cayenne", +"America/Cayman", +"America/Chicago", +"America/Chihuahua", +"America/Coral_Harbour", +"America/Cordoba", +"America/Costa_Rica", +"America/Creston", +"America/Cuiaba", +"America/Curacao", +"America/Danmarkshavn", +"America/Dawson", +"America/Dawson_Creek", +"America/Denver", +"America/Detroit", +"America/Dominica", +"America/Edmonton", +"America/Eirunepe", +"America/El_Salvador", +"America/Ensenada", +"America/Fort_Nelson", +"America/Fort_Wayne", +"America/Fortaleza", +"America/Glace_Bay", +"America/Godthab", +"America/Goose_Bay", +"America/Grand_Turk", +"America/Grenada", +"America/Guadeloupe", +"America/Guatemala", +"America/Guayaquil", +"America/Guyana", +"America/Halifax", +"America/Havana", +"America/Hermosillo", +"America/Indiana/Indianapolis", +"America/Indiana/Knox", +"America/Indiana/Marengo", +"America/Indiana/Petersburg", +"America/Indiana/Tell_City", +"America/Indiana/Vevay", +"America/Indiana/Vincennes", +"America/Indiana/Winamac", +"America/Indianapolis", +"America/Inuvik", +"America/Iqaluit", +"America/Jamaica", +"America/Jujuy", +"America/Juneau", +"America/Kentucky/Louisville", +"America/Kentucky/Monticello", +"America/Knox_IN", +"America/Kralendijk", +"America/La_Paz", +"America/Lima", +"America/Los_Angeles", +"America/Louisville", +"America/Lower_Princes", +"America/Maceio", +"America/Managua", +"America/Manaus", +"America/Marigot", +"America/Martinique", +"America/Matamoros", +"America/Mazatlan", +"America/Mendoza", +"America/Menominee", +"America/Merida", +"America/Metlakatla", +"America/Mexico_City", +"America/Miquelon", +"America/Moncton", +"America/Monterrey", +"America/Montevideo", +"America/Montreal", +"America/Montserrat", +"America/Nassau", +"America/New_York", +"America/Nipigon", +"America/Nome", +"America/Noronha", +"America/North_Dakota/Beulah", +"America/North_Dakota/Center", +"America/North_Dakota/New_Salem", +"America/Ojinaga", +"America/Panama", +"America/Pangnirtung", +"America/Paramaribo", +"America/Phoenix", +"America/Port-au-Prince", +"America/Port_of_Spain", +"America/Porto_Acre", +"America/Porto_Velho", +"America/Puerto_Rico", +"America/Punta_Arenas", +"America/Rainy_River", +"America/Rankin_Inlet", +"America/Recife", +"America/Regina", +"America/Resolute", +"America/Rio_Branco", +"America/Rosario", +"America/Santa_Isabel", +"America/Santarem", +"America/Santiago", +"America/Santo_Domingo", +"America/Sao_Paulo", +"America/Scoresbysund", +"America/Shiprock", +"America/Sitka", +"America/St_Barthelemy", +"America/St_Johns", +"America/St_Kitts", +"America/St_Lucia", +"America/St_Thomas", +"America/St_Vincent", +"America/Swift_Current", +"America/Tegucigalpa", +"America/Thule", +"America/Thunder_Bay", +"America/Tijuana", +"America/Toronto", +"America/Tortola", +"America/Vancouver", +"America/Virgin", +"America/Whitehorse", +"America/Winnipeg", +"America/Yakutat", +"America/Yellowknife", +"Antarctica/Casey", +"Antarctica/Davis", +"Antarctica/DumontDUrville", +"Antarctica/Macquarie", +"Antarctica/Mawson", +"Antarctica/McMurdo", +"Antarctica/Palmer", +"Antarctica/Rothera", +"Antarctica/South_Pole", +"Antarctica/Syowa", +"Antarctica/Troll", +"Antarctica/Vostok", +"Arctic/Longyearbyen", +"Asia/Aden", +"Asia/Almaty", +"Asia/Amman", +"Asia/Anadyr", +"Asia/Aqtau", +"Asia/Aqtobe", +"Asia/Ashgabat", +"Asia/Ashkhabad", +"Asia/Atyrau", +"Asia/Baghdad", +"Asia/Bahrain", +"Asia/Baku", +"Asia/Bangkok", +"Asia/Barnaul", +"Asia/Beirut", +"Asia/Bishkek", +"Asia/Brunei", +"Asia/Calcutta", +"Asia/Chita", +"Asia/Choibalsan", +"Asia/Chongqing", +"Asia/Chungking", +"Asia/Colombo", +"Asia/Dacca", +"Asia/Damascus", +"Asia/Dhaka", +"Asia/Dili", +"Asia/Dubai", +"Asia/Dushanbe", +"Asia/Famagusta", +"Asia/Gaza", +"Asia/Harbin", +"Asia/Hebron", +"Asia/Ho_Chi_Minh", +"Asia/Hong_Kong", +"Asia/Hovd", +"Asia/Irkutsk", +"Asia/Istanbul", +"Asia/Jakarta", +"Asia/Jayapura", +"Asia/Jerusalem", +"Asia/Kabul", +"Asia/Kamchatka", +"Asia/Karachi", +"Asia/Kashgar", +"Asia/Kathmandu", +"Asia/Katmandu", +"Asia/Khandyga", +"Asia/Kolkata", +"Asia/Krasnoyarsk", +"Asia/Kuala_Lumpur", +"Asia/Kuching", +"Asia/Kuwait", +"Asia/Macao", +"Asia/Macau", +"Asia/Magadan", +"Asia/Makassar", +"Asia/Manila", +"Asia/Muscat", +"Asia/Nicosia", +"Asia/Novokuznetsk", +"Asia/Novosibirsk", +"Asia/Omsk", +"Asia/Oral", +"Asia/Phnom_Penh", +"Asia/Pontianak", +"Asia/Pyongyang", +"Asia/Qatar", +"Asia/Qyzylorda", +"Asia/Rangoon", +"Asia/Riyadh", +"Asia/Saigon", +"Asia/Sakhalin", +"Asia/Samarkand", +"Asia/Seoul", +"Asia/Shanghai", +"Asia/Singapore", +"Asia/Srednekolymsk", +"Asia/Taipei", +"Asia/Tashkent", +"Asia/Tbilisi", +"Asia/Tehran", +"Asia/Tel_Aviv", +"Asia/Thimbu", +"Asia/Thimphu", +"Asia/Tokyo", +"Asia/Tomsk", +"Asia/Ujung_Pandang", +"Asia/Ulaanbaatar", +"Asia/Ulan_Bator", +"Asia/Urumqi", +"Asia/Ust-Nera", +"Asia/Vientiane", +"Asia/Vladivostok", +"Asia/Yakutsk", +"Asia/Yangon", +"Asia/Yekaterinburg", +"Asia/Yerevan", +"Atlantic/Azores", +"Atlantic/Bermuda", +"Atlantic/Canary", +"Atlantic/Cape_Verde", +"Atlantic/Faeroe", +"Atlantic/Faroe", +"Atlantic/Jan_Mayen", +"Atlantic/Madeira", +"Atlantic/Reykjavik", +"Atlantic/South_Georgia", +"Atlantic/St_Helena", +"Atlantic/Stanley", +"Australia/ACT", +"Australia/Adelaide", +"Australia/Brisbane", +"Australia/Broken_Hill", +"Australia/Canberra", +"Australia/Currie", +"Australia/Darwin", +"Australia/Eucla", +"Australia/Hobart", +"Australia/LHI", +"Australia/Lindeman", +"Australia/Lord_Howe", +"Australia/Melbourne", +"Australia/NSW", +"Australia/North", +"Australia/Perth", +"Australia/Queensland", +"Australia/South", +"Australia/Sydney", +"Australia/Tasmania", +"Australia/Victoria", +"Australia/West", +"Australia/Yancowinna", +"Brazil/Acre", +"Brazil/DeNoronha", +"Brazil/East", +"Brazil/West", +"CET", +"CST6CDT", +"Canada/Atlantic", +"Canada/Central", +"Canada/Eastern", +"Canada/Mountain", +"Canada/Newfoundland", +"Canada/Pacific", +"Canada/Saskatchewan", +"Canada/Yukon", +"Chile/Continental", +"Chile/EasterIsland", +"Cuba", +"EET", +"EST", +"EST5EDT", +"Egypt", +"Eire", +"Etc/GMT", +"Etc/GMT+0", +"Etc/GMT+1", +"Etc/GMT+10", +"Etc/GMT+11", +"Etc/GMT+12", +"Etc/GMT+2", +"Etc/GMT+3", +"Etc/GMT+4", +"Etc/GMT+5", +"Etc/GMT+6", +"Etc/GMT+7", +"Etc/GMT+8", +"Etc/GMT+9", +"Etc/GMT-0", +"Etc/GMT-1", +"Etc/GMT-10", +"Etc/GMT-11", +"Etc/GMT-12", +"Etc/GMT-13", +"Etc/GMT-14", +"Etc/GMT-2", +"Etc/GMT-3", +"Etc/GMT-4", +"Etc/GMT-5", +"Etc/GMT-6", +"Etc/GMT-7", +"Etc/GMT-8", +"Etc/GMT-9", +"Etc/GMT0", +"Etc/Greenwich", +"Etc/UCT", +"Etc/UTC", +"Etc/Universal", +"Etc/Zulu", +"Europe/Amsterdam", +"Europe/Andorra", +"Europe/Astrakhan", +"Europe/Athens", +"Europe/Belfast", +"Europe/Belgrade", +"Europe/Berlin", +"Europe/Bratislava", +"Europe/Brussels", +"Europe/Bucharest", +"Europe/Budapest", +"Europe/Busingen", +"Europe/Chisinau", +"Europe/Copenhagen", +"Europe/Dublin", +"Europe/Gibraltar", +"Europe/Guernsey", +"Europe/Helsinki", +"Europe/Isle_of_Man", +"Europe/Istanbul", +"Europe/Jersey", +"Europe/Kaliningrad", +"Europe/Kiev", +"Europe/Kirov", +"Europe/Lisbon", +"Europe/Ljubljana", +"Europe/London", +"Europe/Luxembourg", +"Europe/Madrid", +"Europe/Malta", +"Europe/Mariehamn", +"Europe/Minsk", +"Europe/Monaco", +"Europe/Nicosia", +"Europe/Oslo", +"Europe/Paris", +"Europe/Podgorica", +"Europe/Prague", +"Europe/Riga", +"Europe/Rome", +"Europe/Samara", +"Europe/San_Marino", +"Europe/Sarajevo", +"Europe/Saratov", +"Europe/Simferopol", +"Europe/Skopje", +"Europe/Sofia", +"Europe/Stockholm", +"Europe/Tallinn", +"Europe/Tirane", +"Europe/Tiraspol", +"Europe/Ulyanovsk", +"Europe/Uzhgorod", +"Europe/Vaduz", +"Europe/Vatican", +"Europe/Vienna", +"Europe/Vilnius", +"Europe/Volgograd", +"Europe/Warsaw", +"Europe/Zagreb", +"Europe/Zaporozhye", +"Europe/Zurich", +"Factory", +"GB", +"GB-Eire", +"GMT+0", +"GMT-0", +"GMT0", +"Greenwich", +"HST", +"Hongkong", +"Iceland", +"Indian/Antananarivo", +"Indian/Chagos", +"Indian/Christmas", +"Indian/Cocos", +"Indian/Comoro", +"Indian/Kerguelen", +"Indian/Mahe", +"Indian/Maldives", +"Indian/Mauritius", +"Indian/Mayotte", +"Indian/Reunion", +"Iran", +"Israel", +"Jamaica", +"Japan", +"Kwajalein", +"Libya", +"MET", +"MST", +"MST7MDT", +"Mexico/BajaNorte", +"Mexico/BajaSur", +"Mexico/General", +"NZ", +"NZ-CHAT", +"Navajo", +"PRC", +"PST8PDT", +"Pacific/Apia", +"Pacific/Auckland", +"Pacific/Bougainville", +"Pacific/Chatham", +"Pacific/Chuuk", +"Pacific/Easter", +"Pacific/Efate", +"Pacific/Enderbury", +"Pacific/Fakaofo", +"Pacific/Fiji", +"Pacific/Funafuti", +"Pacific/Galapagos", +"Pacific/Gambier", +"Pacific/Guadalcanal", +"Pacific/Guam", +"Pacific/Honolulu", +"Pacific/Johnston", +"Pacific/Kiritimati", +"Pacific/Kosrae", +"Pacific/Kwajalein", +"Pacific/Majuro", +"Pacific/Marquesas", +"Pacific/Midway", +"Pacific/Nauru", +"Pacific/Niue", +"Pacific/Norfolk", +"Pacific/Noumea", +"Pacific/Pago_Pago", +"Pacific/Palau", +"Pacific/Pitcairn", +"Pacific/Pohnpei", +"Pacific/Ponape", +"Pacific/Port_Moresby", +"Pacific/Rarotonga", +"Pacific/Saipan", +"Pacific/Samoa", +"Pacific/Tahiti", +"Pacific/Tarawa", +"Pacific/Tongatapu", +"Pacific/Truk", +"Pacific/Wake", +"Pacific/Wallis", +"Pacific/Yap", +"Poland", +"Portugal", +"ROC", +"ROK", +"Singapore", +"Turkey", +"UCT", +"US/Alaska", +"US/Aleutian", +"US/Arizona", +"US/Central", +"US/East-Indiana", +"US/Eastern", +"US/Hawaii", +"US/Indiana-Starke", +"US/Michigan", +"US/Mountain", +"US/Pacific", +"",//US/Pacific-New +"US/Samoa", +"UTC", +"Universal", +"W-SU", +"WET", +"Zulu", +"",//localtime +"posixrules", +"Asia/Qostanay", +"America/Nuuk", +"America/Ciudad_Juarez", +"Europe/Kyiv", +"Pacific/Kanton", diff --git a/library/cpp/type_info/tz/tz_ut.cpp b/library/cpp/type_info/tz/tz_ut.cpp index 65e8340cdc5..781c80fa226 100644 --- a/library/cpp/type_info/tz/tz_ut.cpp +++ b/library/cpp/type_info/tz/tz_ut.cpp @@ -13,4 +13,12 @@ Y_UNIT_TEST_SUITE(TTz) { UNIT_ASSERT(GetTimezones().size() > 0); UNIT_ASSERT_VALUES_EQUAL(GetTimezones()[0], "GMT"); } + + Y_UNIT_TEST(IsValidTimezoneIndex) { + auto timezones = GetTimezones(); + for (size_t i = 0; i < timezones.size(); ++i) { + UNIT_ASSERT(IsValidTimezoneIndex(i) == !timezones[i].empty()); + } + UNIT_ASSERT(!IsValidTimezoneIndex(timezones.size())); + } } diff --git a/library/cpp/type_info/tz/update.py b/library/cpp/type_info/tz/update.py index d1d0f71decf..f6ca4f1b904 100755 --- a/library/cpp/type_info/tz/update.py +++ b/library/cpp/type_info/tz/update.py @@ -5,12 +5,13 @@ import re def main(): REGEXP = """^("(.+)",|"",//(.+))$""" - OUTPUT = "../tz.gen" + OUTPUT = "../tz_gen.h" + OUTPUT_VALID = "../is_valid_gen.h" INPUT = OUTPUT CONTRIB_ZONES = "../../../../../contrib/libs/cctz/tzdata/ya.make.resources" RES_PREFIX = "/cctz/tzdata/" - print("process %s into %s" % (INPUT, OUTPUT)) + print("process %s into %s and %s" % (INPUT, OUTPUT, OUTPUT_VALID)) with open(INPUT, "r") as inp: lines = inp.readlines() @@ -43,15 +44,23 @@ def main(): zones.append(zone) lines = [] + idx = 0 + pred = "" for zone in zones: if zone in scontrib: lines.append('"%s",\n' % zone) else: lines.append('"",//%s\n' % zone) + pred += " && idx != %s" % idx + idx += 1 with open(OUTPUT, "w") as outp: outp.writelines(lines) + with open(OUTPUT_VALID, "w") as outp: + outp.write("// this file is generated, do not edit\n") + outp.write("return idx < %s%s;\n" % (len(zones), pred)) + print("saved %s zones" % len(zones)) -- cgit v1.3