1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#pragma once
#include <util/generic/strbuf.h>
#include <util/system/types.h>
#include <array>
namespace NYql {
using TLangVersion = ui32;
constexpr TLangVersion UnknownLangVersion = 0;
constexpr inline TLangVersion MakeLangVersion(ui32 year, ui32 minor) {
return year * 100u + minor;
}
constexpr inline ui32 GetYearFromLangVersion(TLangVersion ver) {
return ver / 100u;
}
constexpr inline ui32 GetMinorFromLangVersion(TLangVersion ver) {
return ver % 100u;
}
constexpr inline bool IsAvailableLangVersion(TLangVersion ver, TLangVersion max) {
if (ver == UnknownLangVersion || max == UnknownLangVersion) {
return true;
}
return ver <= max;
}
constexpr inline bool IsDeprecatedLangVersion(TLangVersion ver, TLangVersion max) {
if (ver == UnknownLangVersion || max == UnknownLangVersion) {
return false;
}
return GetYearFromLangVersion(ver) == GetYearFromLangVersion(max) - 2;
}
constexpr inline bool IsUnsupportedLangVersion(TLangVersion ver, TLangVersion max) {
if (ver == UnknownLangVersion || max == UnknownLangVersion) {
return false;
}
return GetYearFromLangVersion(ver) <= GetYearFromLangVersion(max) - 3;
}
constexpr TLangVersion MinLangVersion = MakeLangVersion(2025, 1);
TLangVersion GetMaxReleasedLangVersion();
TLangVersion GetMaxLangVersion();
constexpr ui32 LangVersionBufferSize = 4 + 1 + 2 + 1; // year.minor\0
using TLangVersionBuffer = std::array<char, LangVersionBufferSize>;
bool IsValidLangVersion(TLangVersion ver);
bool ParseLangVersion(TStringBuf str, TLangVersion& result);
bool FormatLangVersion(TLangVersion ver, TLangVersionBuffer& buffer, TStringBuf& result);
enum class EBackportCompatibleFeaturesMode {
None,
Released,
All
};
bool IsBackwardCompatibleFeatureAvailable(TLangVersion currentVer, TLangVersion featureVer,
EBackportCompatibleFeaturesMode mode);
}
|