From 42477bdd601a2723637ee354c78e9e518ea57b0e Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Wed, 2 Jun 2021 00:49:48 -0500 Subject: [PATCH] Add Hive.Versioning as a library (part 1) --- BSIPA-Meta/BSIPA-Meta.csproj | 5 +- IPA.Injector/IPA.Injector.csproj | 10 +- IPA.Injector/Properties/AssemblyInfo.cs | 4 +- IPA.Loader/IPA.Loader.csproj | 2 +- Libs/thirdparty/Hive.Versioning.dll | Bin 0 -> 37888 bytes Libs/thirdparty/Hive.Versioning.pdb | Bin 0 -> 18860 bytes Libs/thirdparty/Hive.Versioning.xml | 780 ++++++++++++++++++++++++ 7 files changed, 797 insertions(+), 4 deletions(-) create mode 100644 Libs/thirdparty/Hive.Versioning.dll create mode 100644 Libs/thirdparty/Hive.Versioning.pdb create mode 100644 Libs/thirdparty/Hive.Versioning.xml diff --git a/BSIPA-Meta/BSIPA-Meta.csproj b/BSIPA-Meta/BSIPA-Meta.csproj index cbdb384e..2cf0f46f 100644 --- a/BSIPA-Meta/BSIPA-Meta.csproj +++ b/BSIPA-Meta/BSIPA-Meta.csproj @@ -1,7 +1,7 @@  - net35;net461 + net461 x86;x64 Debug;Release;Verbose;Verbose_Release @@ -59,9 +59,11 @@ + + @@ -87,3 +89,4 @@ + diff --git a/IPA.Injector/IPA.Injector.csproj b/IPA.Injector/IPA.Injector.csproj index a100bf44..e7f5169a 100644 --- a/IPA.Injector/IPA.Injector.csproj +++ b/IPA.Injector/IPA.Injector.csproj @@ -3,7 +3,7 @@ - net461;net35 + net461 IPA.Injector true @@ -56,6 +56,14 @@ Always + + + + Libraries\Thirdparty\%(Filename)%(Extension) + Always + + + Libraries\Mono\I18N.dll diff --git a/IPA.Injector/Properties/AssemblyInfo.cs b/IPA.Injector/Properties/AssemblyInfo.cs index 5f18531f..2ed6471c 100644 --- a/IPA.Injector/Properties/AssemblyInfo.cs +++ b/IPA.Injector/Properties/AssemblyInfo.cs @@ -1,4 +1,5 @@ -using System.Reflection; +using System; +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -18,6 +19,7 @@ using System.Runtime.InteropServices; // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] +[assembly: CLSCompliant(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("2a1af16b-27f1-46e0-9a95-181516bc1cb7")] diff --git a/IPA.Loader/IPA.Loader.csproj b/IPA.Loader/IPA.Loader.csproj index c14a9de5..bd4d4609 100644 --- a/IPA.Loader/IPA.Loader.csproj +++ b/IPA.Loader/IPA.Loader.csproj @@ -3,7 +3,7 @@ - net461;net35 + net461 IPA true diff --git a/Libs/thirdparty/Hive.Versioning.dll b/Libs/thirdparty/Hive.Versioning.dll new file mode 100644 index 0000000000000000000000000000000000000000..93ed807e76d01acf366769e4a7f94121bd92c3ec GIT binary patch literal 37888 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 E0EWk(%>V!Z literal 0 HcmV?d00001 diff --git a/Libs/thirdparty/Hive.Versioning.xml b/Libs/thirdparty/Hive.Versioning.xml new file mode 100644 index 00000000..8143d72c --- /dev/null +++ b/Libs/thirdparty/Hive.Versioning.xml @@ -0,0 +1,780 @@ + + + + Hive.Versioning + + + + + A version that meets the Semantic Versioning specification. + + + + + Gets the zero version (0.0.0). + + + + + Parses and creates a version object from a sequence of characters. + + + This is roughly equivalent to . + + The sequence of characters to parse as a version. + Thrown when the input is not a valid SemVer version. + + + + Creates a version object from the component parts of the version. + + The major version number. + The minor version number. + The patch number. + A sequence of IDs specifying the prerelease. + A sequence of IDs representing the build. + + + + Creates a version object from the component parts of the version. + + + This interface is provided only for CLS compliance. The actual version number is unsigned. + Because of this, very large version numbers may cause issues with this interface. + + The major version number. + The minor version number. + The patch number. + A sequence of IDs specifying the prerelease. + A sequence of IDs representing the build. + + + + Creates a version object from the component parts of the version. + + The major version number. + The minor version number. + The patch number. + + + + Creates a version object from the component parts of the version. + + + This interface is provided only for CLS compliance. The actual version number is unsigned. + Because of this, very large version numbers may cause issues with this interface. + + The major version number. + The minor version number. + The patch number. + + + + Gets the major version number. + + + + + Gets the minor version number. + + + + + Gets the patch number. + + + + + Gets the sequence of prerelease IDs. + + + + + Gets the sequence of build IDs. + + + + + Vers the version number, as signed integers. + + + This interface is provided only for CLS compliance. The actual version number is unsigned. + Because of this, very large version numbers may cause issues with this interface. + + The major version number. + The minor version number. + The patch number. + + + + Appends this to the provided . + + The to append to. + The provided + + + + + + + Compares two versions for equality. + + The first version to compare. + The second version to compare. + if they are equal, otherwise. + + + + Compares two versions for inequality. + + The first version to compare. + The second version to compare. + if they are not equal, otherwise. + + + + Checks if is greater than . + + The first version to compare. + The second version to compare. + if is greater than , + + + + Checks if is less than . + + The first version to compare. + The second version to compare. + if is less than , + + + + Checks if is greater than or equal to . + + The first version to compare. + The second version to compare. + if is greater than or equal to , + + + + Checks if is less than or equal to . + + The first version to compare. + The second version to compare. + if is less than or equal to , + + + + Determines the maximum of two versions. + + The first version. + The second version. + The maximum of and + + + + Determines the minimum of two versions. + + The first version. + The second version. + The minimum of and + + + + Compares version to for equality. + + The object to compare to. + if they are equal, otherwise. + + + + Gets the hash code of this . + + The hash code for this . + + + + Compares this version to another version according to the SemVer specification. + + The version to compare to. + if the versions are equal, otherwise. + + + + Compares this version to another version according to the SemVer specification. + + The version to compare to. + Less than zero if is less than , zero if they are equal, and + more than zero if is greater than + + + + Parses a sequence of characters into a object. + + The sequence of characters to parse. + The parsed version object. + Thrown when is not a valid SemVer version. + + + + Attempts to parse a sequence of characters into a version object. + + The sequence of characters to parse. + The parsed version, if the input is valid. + if the text is valid and could be parsed, otherwise. + + + + Attempts to parse a sequence of characters into a version object, as part of a larger parse. + + + When this method returns, will begin after the end of the parsed version, if it is present, or + what it initially contained if no version is present and this returns + + The sequence of characters to parse. + The parsed version, if the input is valid. + if the text is valid and could be parsed, otherwise. + + + + An arbitrary range of s, capable of matching any possible set of s. + + + + + A is considered matching if it is exactly equivalent to this one, in addition to if its comparison + value matches. + + + + + Converts this to an equivalent . + + + The returned always takes the form >=Version <=Version. + + The that is equivalent to this + + + + Inverts this into either another or a . + + + The only time this produces a is when is . + + The inverted , if any. + The representing this inverted, if any. + if this produces a , or + if it produces a . + + + + Tries to perform a logical conjunction (and) with . + + + This method will only return one of the following values: + + + + A single was produced, and was set. + + + + A single was produced, and was set. + + + + The conjunction result matches no possible values. + + + + The other to try to perform conjunction with. + The single the operation produced, if any. + The single the operation produced, if any. + A indicating which of the outputs were set, if any. + + + + A part of the implementation of that handles + the cases where exactly one of the inputs are an comparer. + + + + + Tries to perform a logical disjunction (or) with . + + + This method will only return one of the following values: + + + + A single was produced, and was set. + + + + A single was produced, and was set. + + + + The disjunction result matches every valid value. For convenience, + is set to . + + + + The disjunction result is not representable with only a and a . + For example, if the inputs are non-equal comparers, this will be returned. + + + + The other to try to perform disjunction with. + The single the operation produced, if any. + The single the operation produced, if any. + A indicating which of the outputs were set, if any. + + + + A part of the implementation of that handles + the cases where exactly one of the inputs are an comparer. + + + + + This is identical to except that it uses + instead of . + + + + + Tries to perform a logical conjunction (and) with . + + + This method will only return one of the following values: + + + + A single was produced, and was set. + + + + Two s were produced, and both and were set. + + + + The conjunction result matches no valid values. + + + + The other to try to perform conjunction with. + The single (or first) the operation produced, if any. + The second the operation produced, if any. + A indicating which of the outputs were set, if any. + + + + A part of the implementation of , handling the cases where exactly one + input is an inward-facing . + + + + + Tries to perform a logical disjunction (or) with . + + + This method will only return one of the following values: + + + + A single was produced, and was set. + + + + Two s were produced, and both and were set. + + + + The disjunction result matches every valid value. For convenience, + is set to . + + + + The other to try to perform disjunction with. + The single (or first) the operation produced, if any. + The second the operation produced, if any. + A indicating which of the outputs were set, if any. + + + + A part of the implementation of , handling the cases where exactly one + input is an inward-facing . + + + + + Checks if two s are mutually exclusive, but meet exactly leaving no versions that neither matches. + + + + + Constructs a new that corresponds to the text provided in . + + The textual represenation of the to create. + + Thrown when is not a valid . + + + + Creates a which matches only the provided . + + The to match. + A matching only the provided . + + + + Computes the logical disjunction (or) of this and . + + The other to compute the disjunction of. + The logical disjunction of and . + + + + + Computes the logical disjunction (or) of the two arguments. + + The first argument. + The second argument. + The logical disjunction of and . + + + + + Computes the logical conjunction (and) of this and . + + The other to compute the conjunction of. + The logical conjunction of and . + + + + + Computes the logical conjunction (and) of the two arguments. + + The first argument. + The second argument. + The logical disjunction of and . + + + + + Gets the compliement of this . + + The compliement of this . + + + + + Computes the compliment of the argument. + + The to compute the compliment of. + The compliment of . + + + + + Determines whether or not a given matches this . + + The to check. + if matches, otherwise. + + + + The that matches all s. + + + + + The that matches no s. + + + + + Appends the string representation of this to the provided . + + The to append to. + The that was appended to. + + + + Gets the string representation of this . + + The string representation of this . + + + + + + + Determines whether this is equivalent to another range. + + The to compare to. + if they are equivalent, otherwise. + + + + + + + Compares two s for equality. + + The first argument. + The second argument. + if and are equivalent, otherwise. + + + + Determines if two s are not equivalent. + + The first argument. + The second argument. + if and are not equivalent, otherwise. + + + + Parses a string as a . + + + + A valid string is made up of a set of disjoint regions joined by ||. + These regions can be either bounded or unbounded. +
A bounded region is a pair of unbounded regions separated by whitespace, such that both unbounded regions overlap, + and the unbounded region whose written value is lower comes first. +
An unbounded region is any valid prefixed with one of the following comparison operators: +
+ + >= + The unbounded range matches any greater than or equal to its specified . + + + <= + The unbounded range matches any less than or equal to its specified . + + + > + The unbounded range matches any greater than its specified . + + + < + The unbounded range matches any less than its specified . + + + = + The range matches only the that it is specified with. + + Note that unbounded ranges using the = comparison operator cannot be part of a bounded region.Additionally, there are the following shorthand comparison operators that expand to bounded regions: + + ^ + + The bounded range matches all versions greater than or equal to its specified and less than the next major incremented + version. For example, ^1.5.4 would be equivalent to the bounded range >=1.5.4 <2.0.0, while ^0.4.2 would be equivalent + to >=0.4.2 <0.5.0. + + + +
+ The stirng to parse. + The parsed . + + Thrown when is not a valid . +
+ + + Attempts to parse a whole string as a . + + + + A valid string is made up of a set of disjoint regions joined by ||. + These regions can be either bounded or unbounded. +
A bounded region is a pair of unbounded regions separated by whitespace, such that both unbounded regions overlap, + and the unbounded region whose written value is lower comes first. +
An unbounded region is any valid prefixed with one of the following comparison operators: +
+ + >= + The unbounded range matches any greater than or equal to its specified . + + + <= + The unbounded range matches any less than or equal to its specified . + + + > + The unbounded range matches any greater than its specified . + + + < + The unbounded range matches any less than its specified . + + + = + The range matches only the that it is specified with. + + Note that unbounded ranges using the = comparison operator cannot be part of a bounded region.Additionally, there are the following shorthand comparison operators that expand to bounded regions: + + ^ + + The bounded range matches all versions greater than or equal to its specified and less than the next major incremented + version. For example, ^1.5.4 would be equivalent to the bounded range >=1.5.4 <2.0.0, while ^0.4.2 would be equivalent + to >=0.4.2 <0.5.0. + + + +
+ The string to try to parse. + The parsed , if any. + if was successfully parsed, otherwise. + +
+ + + Attempts to parse a from the start of the string. + + + When this returns , will begin immediately after the parsed . + When this returns , will remain unchanged. + + A valid string is made up of a set of disjoint regions joined by ||. + These regions can be either bounded or unbounded. +
A bounded region is a pair of unbounded regions separated by whitespace, such that both unbounded regions overlap, + and the unbounded region whose written value is lower comes first. +
An unbounded region is any valid prefixed with one of the following comparison operators: +
+ + >= + The unbounded range matches any greater than or equal to its specified . + + + <= + The unbounded range matches any less than or equal to its specified . + + + > + The unbounded range matches any greater than its specified . + + + < + The unbounded range matches any less than its specified . + + + = + The range matches only the that it is specified with. + + Note that unbounded ranges using the = comparison operator cannot be part of a bounded region.Additionally, there are the following shorthand comparison operators that expand to bounded regions: + + ^ + + The bounded range matches all versions greater than or equal to its specified and less than the next major incremented + version. For example, ^1.5.4 would be equivalent to the bounded range >=1.5.4 <2.0.0, while ^0.4.2 would be equivalent + to >=0.4.2 <0.5.0. + + + +
+ The string to try to parse. + The parsed , if any. + if was successfully parsed, otherwise. +
+ + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Gets a resource string for AssertionFailed similar to ''. + + + + + Gets a resource string for Range_InputInvalid similar to 'Input is not a valid VersionRange'. + + + + + Gets a resource string for Version_InputInvalid similar to 'Input was not a valid SemVer version'. + + + + + Gets a resource string for Version_InputTooShort similar to 'Input too short to be a SemVer version'. + + + + + Specifies that when a method returns , + the parameter may be even if the corresponding type disallows it. + + + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this + value, the associated parameter may be null. + + + + Gets the return value condition. + + The return value condition. If the method returns this value, the + associated parameter may be null. + + + + Specifies that when a method returns , + the parameter is not even if the corresponding type allows it. + + + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this + value, the associated parameter is not null. + + + + Gets the return value condition. + + The return value condition. If the method returns this value, the + associated parameter is not null. + + + + Specifies that an output may be even if the corresponding type disallows it. + + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes the attribute with the specified parameter value. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + + Gets the condition parameter value. + + +
+