From 5216699726521e9a3a9a3772cf525208827c319a Mon Sep 17 00:00:00 2001 From: Martynas Ramonas Date: Wed, 9 Oct 2019 16:14:53 +0300 Subject: [PATCH 1/3] Changed gitignore file --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 744d41e..3f862ba 100644 --- a/.gitignore +++ b/.gitignore @@ -194,4 +194,7 @@ FakesAssemblies/ # Visual Studio 6 workspace options file *.opt -*.DS_Store \ No newline at end of file +*.DS_Store + +# Compresed files +*.lz4 From 7e211e5503a7d82a21c2d23ceb2f7d9869dbbd4b Mon Sep 17 00:00:00 2001 From: Martynas Ramonas Date: Wed, 9 Oct 2019 16:28:17 +0300 Subject: [PATCH 2/3] Used new compression NuGet and increased default value of heap size. --- build/add-externals.ps1 | 45 +- build/tools/K4os.Compression.LZ4.Streams.dll | Bin 0 -> 17408 bytes build/tools/K4os.Compression.LZ4.Streams.xml | 296 ++ build/tools/K4os.Compression.LZ4.dll | Bin 0 -> 40448 bytes build/tools/K4os.Compression.LZ4.xml | 794 +++++ build/tools/K4os.Hash.xxHash.dll | Bin 0 -> 12288 bytes build/tools/K4os.Hash.xxHash.xml | 163 ++ build/tools/LZ4-encoder/LZ4Encoder/App.config | 6 +- .../LZ4-encoder/LZ4Encoder/LZ4Encoder.csproj | 53 +- build/tools/LZ4-encoder/LZ4Encoder/Program.cs | 28 +- .../LZ4-encoder/LZ4Encoder/packages.config | 8 +- build/tools/LZ4Encoder.exe | Bin 7168 -> 7168 bytes build/tools/System.Buffers.dll | Bin 0 -> 27992 bytes build/tools/System.Buffers.xml | 39 + build/tools/System.Memory.dll | Bin 0 -> 148760 bytes build/tools/System.Memory.xml | 355 +++ build/tools/System.Numerics.Vectors.dll | Bin 0 -> 115936 bytes build/tools/System.Numerics.Vectors.xml | 2597 +++++++++++++++++ ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23600 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 200 ++ source/ElasticsearchInside/Config/jvm.options | 2 +- source/ElasticsearchInside/Elasticsearch.cs | 23 +- .../ElasticsearchInside.csproj | 12 +- .../ElasticsearchInside.nuspec | 20 - .../Properties/AssemblyInfo.cs | 2 +- 25 files changed, 4579 insertions(+), 64 deletions(-) create mode 100644 build/tools/K4os.Compression.LZ4.Streams.dll create mode 100644 build/tools/K4os.Compression.LZ4.Streams.xml create mode 100644 build/tools/K4os.Compression.LZ4.dll create mode 100644 build/tools/K4os.Compression.LZ4.xml create mode 100644 build/tools/K4os.Hash.xxHash.dll create mode 100644 build/tools/K4os.Hash.xxHash.xml create mode 100644 build/tools/System.Buffers.dll create mode 100644 build/tools/System.Buffers.xml create mode 100644 build/tools/System.Memory.dll create mode 100644 build/tools/System.Memory.xml create mode 100644 build/tools/System.Numerics.Vectors.dll create mode 100644 build/tools/System.Numerics.Vectors.xml create mode 100644 build/tools/System.Runtime.CompilerServices.Unsafe.dll create mode 100644 build/tools/System.Runtime.CompilerServices.Unsafe.xml delete mode 100644 source/ElasticsearchInside/ElasticsearchInside.nuspec diff --git a/build/add-externals.ps1 b/build/add-externals.ps1 index cd21338..1cfbf34 100644 --- a/build/add-externals.ps1 +++ b/build/add-externals.ps1 @@ -47,29 +47,38 @@ function DownloadElasticsearch { function DownloadJre{ $ErrorActionPreference = "Stop" - - $doc = New-Object HtmlAgilityPack.HtmlDocument - $WebResponse = Invoke-WebRequest "http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html" - $doc.LoadHtml($WebResponse.Content) + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + + #$doc = New-Object HtmlAgilityPack.HtmlDocument + #$WebResponse = Invoke-WebRequest "http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html" + #$doc.LoadHtml($WebResponse.Content) - $lines = $doc.DocumentNode.InnerText -split '\r\n?|\n\r?' + #$lines = $doc.DocumentNode.InnerText -split '\r\n?|\n\r?' - $jreLine = $lines| Where { $_.Contains("windows-x64.tar.gz") } | Select -First 1 + #$jreLine = $lines| Where { $_.Contains("windows-x64.tar.gz") } | Select -First 1 - $jreLine = $jreLine.Substring($jreLine.IndexOf("http"), ($jreLine.LastIndexOf(".tar.gz")+7)-$jreLine.IndexOf("http")) + #$jreLine = $jreLine.Substring($jreLine.IndexOf("http"), ($jreLine.LastIndexOf(".tar.gz")+7)-$jreLine.IndexOf("http")) - $downloadUrl = New-Object System.Uri -ArgumentList @($jreLine) + #$downloadUrl = New-Object System.Uri -ArgumentList @($jreLine) - Write-Host "Downloading " $downloadUrl - - $downloadPage = 'http://www.oracle.com/' - - $bak = $ProgressPreference - $ProgressPreference = "SilentlyContinue" - Invoke-WebRequest $downloadPage -UseBasicParsing -UseDefaultCredentials -SessionVariable s | Out-Null - $c = New-Object System.Net.Cookie("oraclelicense", "accept-securebackup-cookie", "/", ".oracle.com") - $s.Cookies.Add($downloadPage, $c) - Invoke-WebRequest $downloadUrl -UseBasicParsing -UseDefaultCredentials -WebSession $s -OutFile .\temp\jre.tgz + #Write-Host "Downloading " $downloadUrl + + #$downloadPage = 'http://www.oracle.com/' + + #$bak = $ProgressPreference + #$ProgressPreference = "SilentlyContinue" + #Invoke-WebRequest $downloadPage -UseBasicParsing -UseDefaultCredentials -SessionVariable s | Out-Null + #$c = New-Object System.Net.Cookie("oraclelicense", "accept-securebackup-cookie", "/", ".oracle.com") + #$s.Cookies.Add($downloadPage, $c) + #Invoke-WebRequest $downloadUrl -UseBasicParsing -UseDefaultCredentials -WebSession $s -OutFile .\temp\jre.tgz + + # Added download from third party repository because not able to download from oracle.com + $downloadUrl = https://github.com/frekele/oracle-java/releases/download/8u212-b10/jre-8u212-windows-x64.tar.gz + Write-Host "Downloading " $downloadUrl + Invoke-WebRequest $downloadUrl -OutFile .\temp\jre.tgz + Write-Host "done." -ForegroundColor Green +} + $ProgressPreference = $bak Write-Host "done." -ForegroundColor Green diff --git a/build/tools/K4os.Compression.LZ4.Streams.dll b/build/tools/K4os.Compression.LZ4.Streams.dll new file mode 100644 index 0000000000000000000000000000000000000000..4c68abb6b8c235f26d952b9fca3a572ecd882ccf GIT binary patch literal 17408 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 P`M=bx{xq3CPy_!T;uF61 literal 0 HcmV?d00001 diff --git a/build/tools/K4os.Compression.LZ4.Streams.xml b/build/tools/K4os.Compression.LZ4.Streams.xml new file mode 100644 index 0000000..4e02583 --- /dev/null +++ b/build/tools/K4os.Compression.LZ4.Streams.xml @@ -0,0 +1,296 @@ + + + + K4os.Compression.LZ4.Streams + + + + + LZ4 Frame descriptor. + + + + Content length. Not always known. + + + Indicates if content checksum is provided. + + + Indicates if blocks are chained (dependent) or not (independent). + + + Indicates if block checksums are provided. + + + Dictionary id. May be null. + + + Block size. + + + + Decoder settings. + + + + Extra memory for decompression. + + + + LZ4 Decompression stream handling. + + + + Creates new instance . + Inner stream. + A function which will create appropriate decoder depending + on frame descriptor. + If true inner stream will not be closed after disposing. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Length of stream. Please note, this will only work if original LZ4 stream has + ContentLength field set in descriptor. Otherwise returned value will be -1. + + + + + Position within the stream. Position can be read, but cannot be set as LZ4 stream does + not have Seek capability. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LZ4 encoder settings. + + + + + Content length. It is not enforced, it can be set to any value, but it will be + written to the stream so it can be used while decoding. If you don't know the length + just leave default value. + + + + + Indicates if blocks should be chained (dependent) or not (independent). Dependent blocks + (with chaining) provide better compression ratio but are a little but slower and take + more memory. + + + + + Block size. You can use any block size, but default values for LZ4 are 64k, 256k, 1m, + and 4m. 64k is good enough for dependent blocks, but for independent blocks bigger is + better. + + + + Indicates is content checksum is provided. Not implemented yet. + + + Indicates if block checksum is provided. Not implemented yet. + + + Dictionary id. Not implemented yet. + + + Compression level. + + + Extra memory (for the process, more is usually better). + + + + LZ4 compression stream. + + + + Creates new instance of . + Inner stream. + LZ4 Descriptor. + Function which will take descriptor and return + appropriate encoder. + Indicates if stream should be left + open after disposing. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Length of the stream and number of bytes written so far. + + + Read-only position in the stream. Trying to set it will throw + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + LZ4 frame descriptor. + + + + Content length (if available). + + + Indicates if content checksum if present. + + + Indicates if blocks are chained. + + + Indicates if block checksums are present. + + + Dictionary id (or null). + + + Block size. + + + Creates new instance of . + Content length. + Content checksum flag. + Chaining flag. + Block checksum flag. + Dictionary id. + Block size. + + + + Utility class with factory methods to create LZ4 compression and decompression streams. + + + + Created compression stream on top of inner stream. + Inner stream. + Compression settings. + Leave inner stream open after disposing. + Compression stream. + + + Created compression stream on top of inner stream. + Inner stream. + Compression level. + Extra memory used for compression. + Leave inner stream open after disposing. + Compression stream. + + + Creates decompression stream on top of inner stream. + Inner stream. + Decompression settings. + Leave inner stream open after disposing. + Decompression stream. + + + Creates decompression stream on top of inner stream. + Inner stream. + Extra memory used for decompression. + Leave inner stream open after disposing. + Decompression stream. + + + diff --git a/build/tools/K4os.Compression.LZ4.dll b/build/tools/K4os.Compression.LZ4.dll new file mode 100644 index 0000000000000000000000000000000000000000..ea7a3253314f43040ad21b94591b726586cd1f1c GIT binary patch literal 40448 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 literal 0 HcmV?d00001 diff --git a/build/tools/K4os.Compression.LZ4.xml b/build/tools/K4os.Compression.LZ4.xml new file mode 100644 index 0000000..9af6341 --- /dev/null +++ b/build/tools/K4os.Compression.LZ4.xml @@ -0,0 +1,794 @@ + + + + K4os.Compression.LZ4 + + + + + Action performed by encoder using FlushAndEncode method. + + + + Nothing has happened, most likely loading 0 bytes. + + + Some bytes has been loaded into encoder. + + + Compression was not possible so bytes has been copied. + + + Compression succeeded. + + + + Interface of LZ4 decoder used by LZ4 streams. + + + + Block size. + + + Bytes already decoded and available to be read. + Always smaller than + + + + Decodes previously compressed block and caches decompressed block in decoder. + Returns number of bytes decoded. These bytes can be read with . + + Points to compressed block. + Length of compressed block. + Size of the block. Value 0 indicates default block size. + Number of decoded bytes. + + + + Inject already decompressed block and caches it in decoder. + Used with uncompressed-yet-chained blocks and pre-made dictionaries. + These bytes can be read with . + + Points to uncompressed block. + Length of uncompressed block. + Number of decoded bytes. + + + + Reads previously decoded bytes. Please note, should be + negative number, pointing to bytes before current head. + + Buffer to write to. + Offset in source buffer relatively to current head. + Please note, it should be negative value. + Number of bytes to read. + + + + Interface of LZ4 encoder used by LZ4 streams. + + + + Block size. + + + Number of bytes read for compression. + Always smaller than + + + Adds bytes to internal buffer. Increases + Source buffer. + Source buffer length. + Number of bytes topped up. If this function returns 0 it means that buffer + is full ( equals ) and + should be called to flush it. + + + + Encodes bytes in internal buffer (see: , ). + If is true then if encoded buffer is bigger than + source buffer source bytes are copied instead. In such case returned length is negative. + + Target buffer. + Target buffer length. + Indicates if copying is allowed. + Length of encoded buffer. Negative if bytes are just copied. + + + + LZ4 decoder used with independent blocks mode. Plase note, that it will fail + if input data has been compressed with chained blocks + ( and ) + + + + + + + + + + Creates new instance of block decoder. + Block size. Must be equal or greater to one used for compression. + + + + + + + + + + + + + + + + Independent block encoder. Produces larger files but uses less memory and + gives better performance. + + + + Creates new instance of + Compression level. + Block size. + + + + + + + + + LZ4 decoder handling dependent blocks. + + + Creates new instance of . + Block size. + Number of extra blocks. + + + + + + + + + + + + + + + + + + + + + + Static class with factory methods to create LZ4 decoders. + + + + Creates appropriate decoder for given parameters. + Dependent blocks. + Block size. + Number of extra blocks. + LZ4 decoder. + + + + Static class with factory method to create LZ4 encoders. + + + + Creates appropriate decoder for given parameters. + Dependent blocks. + Compression level. + Block size. + Number of extra blocks. + LZ4 encoder. + + + + Base class for LZ4 encoders. Provides basic functionality shared by + , , + and encoders. Do not used directly. + + + + Creates new instance of encoder. + Needs to be true if using dependent blocks. + Block size. + Number of extra blocks. + + + + + + + + + + + + + + + Encodes single block using appropriate algorithm. + Source buffer. + Source buffer length. + Target buffer. + Target buffer length. + Number of bytes actually written to target buffer. + + + Copies current dictionary. + Target buffer. + Dictionary length. + Dictionary length. + + + + + + + Functionality of encoders added on top of fixed interface. + + + + Tops encoder up with some data. + Encoder. + Buffer pointer, will be shifted after operation by the number of + bytes actually loaded. + Length of buffer. + true if buffer was topped up, false if no bytes were loaded. + + + Tops encoder up with some data. + Encoder. + Buffer. + Buffer offset. + Length of buffer. + Number of bytes actually loaded. + + + Tops encoder up with some data. + Encoder. + Buffer. + Buffer offset, will be increased after operation by the number + of bytes actually loaded. + Length of buffer. + true if buffer was topped up, false if no bytes were loaded. + + + Encodes all bytes currently stored in encoder into target buffer. + Encoder. + Target buffer. + Offset in target buffer. + Length of target buffer. + if true copying bytes is allowed. + Number of bytes encoder. If bytes were copied than this value is negative. + + + Encodes all bytes currently stored in encoder into target buffer. + Encoder. + Target buffer. + Offset in target buffer. Will be updated after operation. + Length of target buffer. + if true copying bytes is allowed. + Result of this action. Bytes can be Copied (), + Encoded () or nothing could have + happened (). + + + Encodes all bytes currently stored in encoder into target buffer. + Encoder. + Target buffer. Will be updated after operation. + Length of buffer. + if true copying bytes is allowed. + Result of this action. Bytes can be Copied (), + Encoded () or nothing could have + happened (). + + + Tops encoder and encodes content. + Encoder. + Source buffer (used to top up from). + Source buffer length. + Target buffer (used to encode into) + Target buffer length. + Forces encoding even if encoder is not full. + Allows to copy bytes if compression was not possible. + Number of bytes loaded (topped up) + Number if bytes encoded or copied. + Value is 0 if no encoding was done. + Action performed. + + + Tops encoder and encodes content. + Encoder. + Source buffer (used to top up from). + Offset within source buffer. + Source buffer length. + Target buffer (used to encode into) + Offset within target buffer. + Target buffer length. + Forces encoding even if encoder is not full. + Allows to copy bytes if compression was not possible. + Number of bytes loaded (topped up) + Number if bytes encoded or copied. + Value is 0 if no encoding was done. + Action performed. + + + Encoded remaining bytes in encoder. + Encoder. + Target buffer. + Target buffer length. + Allows to copy bytes if compression was not possible. + Number if bytes encoded or copied. + Value is 0 if no encoding was done. + Action performed. + + + Encoded remaining bytes in encoder. + Encoder. + Target buffer. + Offset within target buffer. + Target buffer length. + Allows to copy bytes if compression was not possible. + Number if bytes encoded or copied. + Value is 0 if no encoding was done. + Action performed. + + + Drains decoder by reading all bytes which are ready. + Decoder. + Target buffer. + Offset within target buffer. + Offset in decoder relatively to decoder's head. + Please note, it should be negative value. + Number of bytes. + + + Decodes data and immediately drains it into target buffer. + Decoder. + Source buffer (with compressed data, to be decoded). + Source buffer length. + Target buffer (to drained into). + Target buffer length. + Number of bytes actually decoded. + true decoder was drained, false otherwise. + + + Decodes data and immediately drains it into target buffer. + Decoder. + Source buffer (with compressed data, to be decoded). + Offset within source buffer. + Source buffer length. + Target buffer (to drained into). + Offset within target buffer. + Target buffer length. + Number of bytes actually decoded. + true decoder was drained, false otherwise. + + + + LZ4 encoder using dependent blocks with fast compression. + + + + Creates new instance of + Block size. + Number of extra blocks. + + + + + + + + + + + + + LZ4 encoder using dependent blocks with high compression. + + + + Creates new instance of + Compression level. + Block size. + Number of extra blocks. + + + + + + + + + + + + Utility class with memory related functions. + + + 1 KiB + + + 2 KiB + + + 4 KiB + + + 8 KiB + + + 16 KiB + + + 32 KiB + + + 64 KiB + + + 128 KiB + + + 256 KiB + + + 512 KiB + + + 1 MiB + + + 4 MiB + + + Empty byte array. + + + Rounds integer value up to nearest multiple of step. + A value. + A step. + Value rounded up. + + + + Copies memory block for to . + Even though it is called "copy" it actually behaves like "move" which + might be potential problem, although it shouldn't as I cannot think about + any situation when "copy" invalid behaviour (forward copy of overlapping blocks) + can be a desired. + + The target block address. + The source block address. + Length in bytes. + + + + Copies memory block for to . + It handle "move" semantic properly handling overlapping blocks properly. + + The target block address. + The source block address. + Length in bytes. + + + + Copies memory block for to + up to (around) . + It does not handle overlapping blocks and may copy up to 8 bytes more than expected. + + The target block address. + The source block address. + The limit (in target block). + + + Fill block of memory with zeroes. + Address. + Length. + + + Fills memory block with repeating pattern of a single byte. + Address. + A pattern. + Length. + + + + Copies memory block for to . + This is proper implementation of memcpy (with all then weird behaviour for + overlapping blocks). It is slower than "Copy" but may be required if "Copy" + causes problems. + + The target block address. + The source block address. + Length in bytes. + + + + Copies memory block backwards from to . + This is needed to implement memmove It is slower than "Move" but is needed for .NET 4.5, + which does not implement Buffer.MemoryCopy. + + The target block address. + The source block address. + Length in bytes. + + + + Moves memory block for to . + It handles overlapping block properly. + + The target block address. + The source block address. + Length in bytes. + + + Copies exactly 8 bytes from source to target. + Target address. + Source address. + + + Copies exactly 16 bytes from source to target. + Target address. + Source address. + + + Copies exactly 18 bytes from source to target. + Target address. + Source address. + + + Allocated block of memory. It is NOT initialized with zeroes. + Size in bytes. + Pointer to allocated block. + + + Allocated block of memory and fills it with zeroes. + Size in bytes. + Pointer to allocated block. + + + + Free memory allocated previously with or + + + + + Reads exactly 1 byte from given address. + Address. + Byte at given address. + + + Reads exactly 2 bytes from given address. + Address. + 2 bytes at given address. + + + Reads exactly 4 bytes from given address. + Address. + 4 bytes at given address. + + + Reads exactly 8 bytes from given address. + Address. + 8 bytes at given address. + + + Writes exactly 1 byte to given address. + Address. + Value. + + + Writes exactly 2 bytes to given address. + Address. + Value. + + + Writes exactly 4 bytes to given address. + Address. + Value. + + + Writes exactly 8 bytes to given address. + Address. + Value. + + + + Skeleton for class with unmanaged resources. + Implements but also handles proper release in + case was not called. + + + + Determines if object was already disposed. + + + Throws exception is object has been disposed already. Convenience method. + Thrown if object is already disposed. + + + Method releasing unmanaged resources. + + + Method releasing managed resources. + + + + Disposed resources. + + true if dispose was explicitly called, + false if called from GC. + + + + + + Destructor. + + + + Static class exposing LZ4 block compression methods. + + + + Maximum size after compression. + Length of input buffer. + Maximum length after compression. + + + Compresses data from one buffer into another. + Input buffer. + Length of input buffer. + Output buffer. + Output buffer length. + Compression level. + Number of bytes written, or negative value if output buffer is too small. + + + Compresses data from one buffer into another. + Input buffer. + Output buffer. + Compression level. + Number of bytes written, or negative value if output buffer is too small. + + + Compresses data from one buffer into another. + Input buffer. + Input buffer offset. + Input buffer length. + Output buffer. + Output buffer offset. + Output buffer length. + Compression level. + Number of bytes written, or negative value if output buffer is too small. + + + Decompresses data from given buffer. + Input buffer. + Input buffer length. + Output buffer. + Output buffer length. + Number of bytes written, or negative value if output buffer is too small. + + + Decompresses data from given buffer. + Input buffer. + Output buffer. + Number of bytes written, or negative value if output buffer is too small. + + + Decompresses data from given buffer. + Input buffer. + Input buffer offset. + Input buffer length. + Output buffer. + Output buffer offset. + Output buffer length. + Number of bytes written, or negative value if output buffer is too small. + + + Compression level. + + + Fast compression. + + + High compression, level 3. + + + High compression, level 4. + + + High compression, level 5. + + + High compression, level 6. + + + High compression, level 7. + + + High compression, level 8. + + + High compression, level 9. + + + Optimal compression, level 10. + + + Optimal compression, level 11. + + + Maximum compression, level 12. + + + + Pickling support with LZ4 compression. + + + + Compresses input buffer into self-contained package. + Input buffer. + Compression level. + Output buffer. + + + Compresses input buffer into self-contained package. + Input buffer. + Input buffer offset. + Input buffer length. + Compression level. + Output buffer. + + + Compresses input buffer into self-contained package. + Input buffer. + Compression level. + Output buffer. + + + Compresses input buffer into self-contained package. + Input buffer. + Length of input data. + Compression level. + Output buffer. + + + Decompresses previously pickled buffer (see: . + Input buffer. + Output buffer. + + + Decompresses previously pickled buffer (see: . + Input buffer. + Input buffer offset. + Input buffer length. + Output buffer. + + + Decompresses previously pickled buffer (see: . + Input buffer. + Output buffer. + + + Decompresses previously pickled buffer (see: . + Input buffer. + Input buffer length. + Output buffer. + + + diff --git a/build/tools/K4os.Hash.xxHash.dll b/build/tools/K4os.Hash.xxHash.dll new file mode 100644 index 0000000000000000000000000000000000000000..b4cb8d940ec1237f00844a6365238f76c7ab95a4 GIT binary patch literal 12288 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 yoax$%6NWvGv6#n6@9?=+sHw + + + K4os.Hash.xxHash + + + + + Adapter implementing + + + + + Creates new . + + Hash size (in bytes) + Reset function. + Update function. + Digest function. + + + + + + + + + + + + + + + + + + + Base class for both and . Do not use directly. + + + + Protected constructor to prevent instantiation. + + + + xxHash 32-bit. + + + + Hash of empty buffer. + + + Hash of provided buffer. + Buffer. + Length of buffer. + Digest. + + + Hash of provided buffer. + Buffer. + Digest. + + + Hash of provided buffer. + Buffer. + Starting offset. + Length of buffer. + Digest. + + + Creates xxHash instance. + + + Resets hash calculation. + + + Updates the has using given buffer. + Buffer. + Length of buffer. + + + Updates the has using given buffer. + Buffer. + + + Updates the has using given buffer. + Buffer. + Starting offset. + Length of buffer. + + + Hash so far. + Hash so far. + + + Hash so far, as byte array. + Hash so far. + + + Converts this class to + + + + + xxHash 64-bit. + + + + Hash of empty buffer. + + + Hash of provided buffer. + Buffer. + Length of buffer. + Digest. + + + Hash of provided buffer. + Buffer. + Digest. + + + Hash of provided buffer. + Buffer. + Starting offset. + Length of buffer. + Digest. + + + Creates xxHash instance. + + + Resets hash calculation. + + + Updates the has using given buffer. + Buffer. + Length of buffer. + + + Updates the has using given buffer. + Buffer. + + + Updates the has using given buffer. + Buffer. + Starting offset. + Length of buffer. + + + Hash so far. + Hash so far. + + + Hash so far, as byte array. + Hash so far. + + + Converts this class to + + + + diff --git a/build/tools/LZ4-encoder/LZ4Encoder/App.config b/build/tools/LZ4-encoder/LZ4Encoder/App.config index b8e61f7..de27714 100644 --- a/build/tools/LZ4-encoder/LZ4Encoder/App.config +++ b/build/tools/LZ4-encoder/LZ4Encoder/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/build/tools/LZ4-encoder/LZ4Encoder/LZ4Encoder.csproj b/build/tools/LZ4-encoder/LZ4Encoder/LZ4Encoder.csproj index 3a112b7..d1d1173 100644 --- a/build/tools/LZ4-encoder/LZ4Encoder/LZ4Encoder.csproj +++ b/build/tools/LZ4-encoder/LZ4Encoder/LZ4Encoder.csproj @@ -9,11 +9,27 @@ Properties LZ4Encoder LZ4Encoder - v4.5.1 + v4.7.2 512 true ..\..\..\..\source\ true + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true AnyCPU @@ -35,13 +51,32 @@ 4 - - ..\..\..\..\source\packages\LZ4PCL.1.0.0\lib\portable-net4+netcore45+wpa81+MonoAndroid1+MonoTouch1\LZ4PCL.dll + + packages\K4os.Compression.LZ4.1.1.11\lib\net46\K4os.Compression.LZ4.dll + + + packages\K4os.Compression.LZ4.Streams.1.1.11\lib\net46\K4os.Compression.LZ4.Streams.dll + + + packages\K4os.Hash.xxHash.1.0.6\lib\net46\K4os.Hash.xxHash.dll + + packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll + + + packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll + + + + packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + @@ -57,6 +92,18 @@ + + + False + Microsoft .NET Framework 4.7.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + diff --git a/build/tools/LZ4-encoder/LZ4Encoder/Program.cs b/build/tools/LZ4-encoder/LZ4Encoder/Program.cs index 7c5b23a..31f3a35 100644 --- a/build/tools/LZ4-encoder/LZ4Encoder/Program.cs +++ b/build/tools/LZ4-encoder/LZ4Encoder/Program.cs @@ -1,9 +1,8 @@ using System; using System.IO; using System.IO.Compression; +using K4os.Compression.LZ4.Streams; using LZ4Encoder.Utilities; -using LZ4PCL; -using CompressionMode = LZ4PCL.CompressionMode; namespace LZ4Encoder { @@ -24,16 +23,29 @@ static void Main(string[] args) if (destination.Exists) throw new ApplicationException("Destination already exists"); + /* + using (var source = File.OpenRead(filename)) +using (var target = LZ4Stream.Encode(File.Create(filename + ".lz4"))) +{ + source.CopyTo(target); +} + */ + // mem-stream needs to be here for this to work? using (var destinationStream = destination.OpenWrite()) - using (var memStream = new MemoryStream()) - using (var lz4Stream = new LZ4Stream(destinationStream, CompressionMode.Compress, true, true)) { - using (var archiveWriter = new ArchiveWriter(memStream, true)) - archiveWriter.AddFiles(source); + using (var memStream = new MemoryStream()) + { + //using (var lz4Stream = new LZ4Stream(destinationStream, CompressionMode.Compress, true, true)) + using (var lz4Stream = LZ4Stream.Encode(destinationStream)) + { + using (var archiveWriter = new ArchiveWriter(memStream, true)) + archiveWriter.AddFiles(source); - memStream.Position = 0; - memStream.CopyTo(lz4Stream); + memStream.Position = 0; + memStream.CopyTo(lz4Stream); + } + } } } diff --git a/build/tools/LZ4-encoder/LZ4Encoder/packages.config b/build/tools/LZ4-encoder/LZ4Encoder/packages.config index 9b30b90..8821fa1 100644 --- a/build/tools/LZ4-encoder/LZ4Encoder/packages.config +++ b/build/tools/LZ4-encoder/LZ4Encoder/packages.config @@ -1,4 +1,10 @@  - + + + + + + + \ No newline at end of file diff --git a/build/tools/LZ4Encoder.exe b/build/tools/LZ4Encoder.exe index e4f9ef73ac2d2b8763f291ea3a15a2dddcc5b85f..5c3027051c939a7fffbfc470907cae7262cccffe 100644 GIT binary patch literal 7168 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 Vbn)Hrk&1KcGdPR?oBSVo;9oe4_-6nB diff --git a/build/tools/System.Buffers.dll b/build/tools/System.Buffers.dll new file mode 100644 index 0000000000000000000000000000000000000000..b6d9c7782d275b83f4d0883f9bfb2d65fc5c9e9f GIT binary patch literal 27992 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%0DV%GL-7lfv$jZq+l3F9+zd% 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 literal 0 HcmV?d00001 diff --git a/build/tools/System.Buffers.xml b/build/tools/System.Buffers.xml new file mode 100644 index 0000000..d3d239e --- /dev/null +++ b/build/tools/System.Buffers.xml @@ -0,0 +1,39 @@ + + + + System.Buffers + + + + Provides a resource pool that enables reusing instances of type . + The type of the objects that are in the resource pool. + + + Initializes a new instance of the class. + + + Creates a new instance of the class. + A new instance of the class. + + + Creates a new instance of the class using the specifed configuration. + The maximum length of an array instance that may be stored in the pool. + The maximum number of array instances that may be stored in each bucket in the pool. The pool groups arrays of similar lengths into buckets for faster access. + A new instance of the class with the specified configuration. + + + Retrieves a buffer that is at least the requested length. + The minimum length of the array. + An array of type that is at least minimumLength in length. + + + Returns an array to the pool that was previously obtained using the method on the same instance. + A buffer to return to the pool that was previously obtained using the method. + Indicates whether the contents of the buffer should be cleared before reuse. If bufferLength is set to true, and if the pool will store the buffer to enable subsequent reuse, the method will clear the array of its contents so that a subsequent caller using the method will not see the content of the previous caller. If bufferLength is set to false or if the pool will release the buffer, the array's contents are left unchanged. + + + Gets a shared instance. + A shared instance. + + + \ No newline at end of file diff --git a/build/tools/System.Memory.dll b/build/tools/System.Memory.dll new file mode 100644 index 0000000000000000000000000000000000000000..bdfc501e9647719549793297acb072d33067d4e5 GIT binary patch literal 148760 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 IXGb{$00BiQzyJUM literal 0 HcmV?d00001 diff --git a/build/tools/System.Memory.xml b/build/tools/System.Memory.xml new file mode 100644 index 0000000..4d12fd7 --- /dev/null +++ b/build/tools/System.Memory.xml @@ -0,0 +1,355 @@ + + + System.Memory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/tools/System.Numerics.Vectors.dll b/build/tools/System.Numerics.Vectors.dll new file mode 100644 index 0000000000000000000000000000000000000000..ce46d5be85cdee1a3c0ef5bc22c8e1772d0d0d98 GIT binary patch literal 115936 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 literal 0 HcmV?d00001 diff --git a/build/tools/System.Numerics.Vectors.xml b/build/tools/System.Numerics.Vectors.xml new file mode 100644 index 0000000..5129793 --- /dev/null +++ b/build/tools/System.Numerics.Vectors.xml @@ -0,0 +1,2597 @@ + + + + System.Numerics.Vectors + + + + Represents a 3x2 matrix. + + + Creates a 3x2 matrix from the specified components. + The value to assign to the first element in the first row. + The value to assign to the second element in the first row. + The value to assign to the first element in the second row. + The value to assign to the second element in the second row. + The value to assign to the first element in the third row. + The value to assign to the second element in the third row. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values of value1 and value2. + + + Creates a rotation matrix using the given rotation in radians. + The amount of rotation, in radians. + The rotation matrix. + + + Creates a rotation matrix using the specified rotation in radians and a center point. + The amount of rotation, in radians. + The center point. + The rotation matrix. + + + Creates a scaling matrix from the specified X and Y components. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The scaling matrix. + + + Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. + The uniform scale to use. + The center offset. + The scaling matrix. + + + Creates a scaling matrix that is offset by a given center point. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The center point. + The scaling matrix. + + + Creates a scaling matrix that scales uniformly with the given scale. + The uniform scale to use. + The scaling matrix. + + + Creates a scaling matrix from the specified vector scale. + The scale to use. + The scaling matrix. + + + Creates a scaling matrix from the specified vector scale with an offset from the specified center point. + The scale to use. + The center offset. + The scaling matrix. + + + Creates a skew matrix from the specified angles in radians. + The X angle, in radians. + The Y angle, in radians. + The skew matrix. + + + Creates a skew matrix from the specified angles in radians and a center point. + The X angle, in radians. + The Y angle, in radians. + The center point. + The skew matrix. + + + Creates a translation matrix from the specified 2-dimensional vector. + The translation position. + The translation matrix. + + + Creates a translation matrix from the specified X and Y components. + The X position. + The Y position. + The translation matrix. + + + Returns a value that indicates whether this instance and another 3x2 matrix are equal. + The other matrix. + true if the two matrices are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. + + + Calculates the determinant for this matrix. + The determinant. + + + Returns the hash code for this instance. + The hash code. + + + Gets the multiplicative identity matrix. + The multiplicative identify matrix. + + + Inverts the specified matrix. The return value indicates whether the operation succeeded. + The matrix to invert. + When this method returns, contains the inverted matrix if the operation succeeded. + true if matrix was converted successfully; otherwise, false. + + + Indicates whether the current matrix is the identity matrix. + true if the current matrix is the identity matrix; otherwise, false. + + + Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. + The first matrix. + The second matrix. + The relative weighting of matrix2. + The interpolated matrix. + + + The first element of the first row. + + + + The second element of the first row. + + + + The first element of the second row. + + + + The second element of the second row. + + + + The first element of the third row. + + + + The second element of the third row. + + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values. + + + Returns a value that indicates whether the specified matrices are equal. + The first matrix to compare. + The second matrix to compare. + true if value1 and value2 are equal; otherwise, false. + + + Returns a value that indicates whether the specified matrices are not equal. + The first matrix to compare. + The second matrix to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Returns a string that represents this matrix. + The string representation of this matrix. + + + Gets or sets the translation component of this matrix. + The translation component of the current instance. + + + Represents a 4x4 matrix. + + + Creates a object from a specified object. + A 3x2 matrix. + + + Creates a 4x4 matrix from the specified components. + The value to assign to the first element in the first row. + The value to assign to the second element in the first row. + The value to assign to the third element in the first row. + The value to assign to the fourth element in the first row. + The value to assign to the first element in the second row. + The value to assign to the second element in the second row. + The value to assign to the third element in the second row. + The value to assign to the third element in the second row. + The value to assign to the first element in the third row. + The value to assign to the second element in the third row. + The value to assign to the third element in the third row. + The value to assign to the fourth element in the third row. + The value to assign to the first element in the fourth row. + The value to assign to the second element in the fourth row. + The value to assign to the third element in the fourth row. + The value to assign to the fourth element in the fourth row. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values of value1 and value2. + + + Creates a spherical billboard that rotates around a specified object position. + The position of the object that the billboard will rotate around. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard. + + + Creates a cylindrical billboard that rotates around a specified axis. + The position of the object that the billboard will rotate around. + The position of the camera. + The axis to rotate the billboard around. + The forward vector of the camera. + The forward vector of the object. + The billboard matrix. + + + Creates a matrix that rotates around an arbitrary vector. + The axis to rotate around. + The angle to rotate around axis, in radians. + The rotation matrix. + + + Creates a rotation matrix from the specified Quaternion rotation value. + The source Quaternion. + The rotation matrix. + + + Creates a rotation matrix from the specified yaw, pitch, and roll. + The angle of rotation, in radians, around the Y axis. + The angle of rotation, in radians, around the X axis. + The angle of rotation, in radians, around the Z axis. + The rotation matrix. + + + Creates a view matrix. + The position of the camera. + The target towards which the camera is pointing. + The direction that is "up" from the camera's point of view. + The view matrix. + + + Creates an orthographic perspective matrix from the given view volume dimensions. + The width of the view volume. + The height of the view volume. + The minimum Z-value of the view volume. + The maximum Z-value of the view volume. + The orthographic projection matrix. + + + Creates a customized orthographic projection matrix. + The minimum X-value of the view volume. + The maximum X-value of the view volume. + The minimum Y-value of the view volume. + The maximum Y-value of the view volume. + The minimum Z-value of the view volume. + The maximum Z-value of the view volume. + The orthographic projection matrix. + + + Creates a perspective projection matrix from the given view volume dimensions. + The width of the view volume at the near view plane. + The height of the view volume at the near view plane. + The distance to the near view plane. + The distance to the far view plane. + The perspective projection matrix. + nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. + + + Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. + The field of view in the y direction, in radians. + The aspect ratio, defined as view space width divided by height. + The distance to the near view plane. + The distance to the far view plane. + The perspective projection matrix. + fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. + + + Creates a customized perspective projection matrix. + The minimum x-value of the view volume at the near view plane. + The maximum x-value of the view volume at the near view plane. + The minimum y-value of the view volume at the near view plane. + The maximum y-value of the view volume at the near view plane. + The distance to the near view plane. + The distance to the far view plane. + The perspective projection matrix. + nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. + + + Creates a matrix that reflects the coordinate system about a specified plane. + The plane about which to create a reflection. + A new matrix expressing the reflection. + + + Creates a matrix for rotating points around the X axis. + The amount, in radians, by which to rotate around the X axis. + The rotation matrix. + + + Creates a matrix for rotating points around the X axis from a center point. + The amount, in radians, by which to rotate around the X axis. + The center point. + The rotation matrix. + + + The amount, in radians, by which to rotate around the Y axis from a center point. + The amount, in radians, by which to rotate around the Y-axis. + The center point. + The rotation matrix. + + + Creates a matrix for rotating points around the Y axis. + The amount, in radians, by which to rotate around the Y-axis. + The rotation matrix. + + + Creates a matrix for rotating points around the Z axis. + The amount, in radians, by which to rotate around the Z-axis. + The rotation matrix. + + + Creates a matrix for rotating points around the Z axis from a center point. + The amount, in radians, by which to rotate around the Z-axis. + The center point. + The rotation matrix. + + + Creates a scaling matrix from the specified vector scale. + The scale to use. + The scaling matrix. + + + Creates a uniform scaling matrix that scale equally on each axis. + The uniform scaling factor. + The scaling matrix. + + + Creates a scaling matrix with a center point. + The vector that contains the amount to scale on each axis. + The center point. + The scaling matrix. + + + Creates a uniform scaling matrix that scales equally on each axis with a center point. + The uniform scaling factor. + The center point. + The scaling matrix. + + + Creates a scaling matrix from the specified X, Y, and Z components. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The value to scale by on the Z axis. + The scaling matrix. + + + Creates a scaling matrix that is offset by a given center point. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The value to scale by on the Z axis. + The center point. + The scaling matrix. + + + Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. + The direction from which the light that will cast the shadow is coming. + The plane onto which the new matrix should flatten geometry so as to cast a shadow. + A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. + + + Creates a translation matrix from the specified 3-dimensional vector. + The amount to translate in each axis. + The translation matrix. + + + Creates a translation matrix from the specified X, Y, and Z components. + The amount to translate on the X axis. + The amount to translate on the Y axis. + The amount to translate on the Z axis. + The translation matrix. + + + Creates a world matrix with the specified parameters. + The position of the object. + The forward direction of the object. + The upward direction of the object. Its value is usually [0, 1, 0]. + The world matrix. + + + Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. + The source matrix. + When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. + When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. + When the method returns, contains the translation component of the transformation matrix if the operation succeeded. + true if matrix was decomposed successfully; otherwise, false. + + + Returns a value that indicates whether this instance and another 4x4 matrix are equal. + The other matrix. + true if the two matrices are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. + + + Calculates the determinant of the current 4x4 matrix. + The determinant. + + + Returns the hash code for this instance. + The hash code. + + + Gets the multiplicative identity matrix. + Gets the multiplicative identity matrix. + + + Inverts the specified matrix. The return value indicates whether the operation succeeded. + The matrix to invert. + When this method returns, contains the inverted matrix if the operation succeeded. + true if matrix was converted successfully; otherwise, false. + + + Indicates whether the current matrix is the identity matrix. + true if the current matrix is the identity matrix; otherwise, false. + + + Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. + The first matrix. + The second matrix. + The relative weighting of matrix2. + The interpolated matrix. + + + The first element of the first row. + + + + The second element of the first row. + + + + The third element of the first row. + + + + The fourth element of the first row. + + + + The first element of the second row. + + + + The second element of the second row. + + + + The third element of the second row. + + + + The fourth element of the second row. + + + + The first element of the third row. + + + + The second element of the third row. + + + + The third element of the third row. + + + + The fourth element of the third row. + + + + The first element of the fourth row. + + + + The second element of the fourth row. + + + + The third element of the fourth row. + + + + The fourth element of the fourth row. + + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values. + + + Returns a value that indicates whether the specified matrices are equal. + The first matrix to compare. + The second matrix to care + true if value1 and value2 are equal; otherwise, false. + + + Returns a value that indicates whether the specified matrices are not equal. + The first matrix to compare. + The second matrix to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Returns a string that represents this matrix. + The string representation of this matrix. + + + Transforms the specified matrix by applying the specified Quaternion rotation. + The matrix to transform. + The rotation t apply. + The transformed matrix. + + + Gets or sets the translation component of this matrix. + The translation component of the current instance. + + + Transposes the rows and columns of a matrix. + The matrix to transpose. + The transposed matrix. + + + Represents a three-dimensional plane. + + + Creates a object from a specified four-dimensional vector. + A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. + + + Creates a object from a specified normal and the distance along the normal from the origin. + The plane's normal vector. + The plane's distance from the origin along its normal vector. + + + Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. + The X component of the normal. + The Y component of the normal. + The Z component of the normal. + The distance of the plane along its normal from the origin. + + + Creates a object that contains three specified points. + The first point defining the plane. + The second point defining the plane. + The third point defining the plane. + The plane containing the three points. + + + The distance of the plane along its normal from the origin. + + + + Calculates the dot product of a plane and a 4-dimensional vector. + The plane. + The four-dimensional vector. + The dot product. + + + Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. + The plane. + The 3-dimensional vector. + The dot product. + + + Returns the dot product of a specified three-dimensional vector and the vector of this plane. + The plane. + The three-dimensional vector. + The dot product. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. + + + Returns a value that indicates whether this instance and another plane object are equal. + The other plane. + true if the two planes are equal; otherwise, false. + + + Returns the hash code for this instance. + The hash code. + + + The normal vector of the plane. + + + + Creates a new object whose normal vector is the source plane's normal vector normalized. + The source plane. + The normalized plane. + + + Returns a value that indicates whether two planes are equal. + The first plane to compare. + The second plane to compare. + true if value1 and value2 are equal; otherwise, false. + + + Returns a value that indicates whether two planes are not equal. + The first plane to compare. + The second plane to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the string representation of this plane object. + A string that represents this object. + + + Transforms a normalized plane by a 4x4 matrix. + The normalized plane to transform. + The transformation matrix to apply to plane. + The transformed plane. + + + Transforms a normalized plane by a Quaternion rotation. + The normalized plane to transform. + The Quaternion rotation to apply to the plane. + A new plane that results from applying the Quaternion rotation. + + + Represents a vector that is used to encode three-dimensional physical rotations. + + + Creates a quaternion from the specified vector and rotation parts. + The vector part of the quaternion. + The rotation part of the quaternion. + + + Constructs a quaternion from the specified components. + The value to assign to the X component of the quaternion. + The value to assign to the Y component of the quaternion. + The value to assign to the Z component of the quaternion. + The value to assign to the W component of the quaternion. + + + Adds each element in one quaternion with its corresponding element in a second quaternion. + The first quaternion. + The second quaternion. + The quaternion that contains the summed values of value1 and value2. + + + Concatenates two quaternions. + The first quaternion rotation in the series. + The second quaternion rotation in the series. + A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. + + + Returns the conjugate of a specified quaternion. + The quaternion. + A new quaternion that is the conjugate of value. + + + Creates a quaternion from a vector and an angle to rotate about the vector. + The vector to rotate around. + The angle, in radians, to rotate around the vector. + The newly created quaternion. + + + Creates a quaternion from the specified rotation matrix. + The rotation matrix. + The newly created quaternion. + + + Creates a new quaternion from the given yaw, pitch, and roll. + The yaw angle, in radians, around the Y axis. + The pitch angle, in radians, around the X axis. + The roll angle, in radians, around the Z axis. + The resulting quaternion. + + + Divides one quaternion by a second quaternion. + The dividend. + The divisor. + The quaternion that results from dividing value1 by value2. + + + Calculates the dot product of two quaternions. + The first quaternion. + The second quaternion. + The dot product. + + + Returns a value that indicates whether this instance and another quaternion are equal. + The other quaternion. + true if the two quaternions are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. + + + Returns the hash code for this instance. + The hash code. + + + Gets a quaternion that represents no rotation. + A quaternion whose values are (0, 0, 0, 1). + + + Returns the inverse of a quaternion. + The quaternion. + The inverted quaternion. + + + Gets a value that indicates whether the current instance is the identity quaternion. + true if the current instance is the identity quaternion; otherwise, false. + + + Calculates the length of the quaternion. + The computed length of the quaternion. + + + Calculates the squared length of the quaternion. + The length squared of the quaternion. + + + Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. + The first quaternion. + The second quaternion. + The relative weight of quaternion2 in the interpolation. + The interpolated quaternion. + + + Returns the quaternion that results from multiplying two quaternions together. + The first quaternion. + The second quaternion. + The product quaternion. + + + Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. + The source quaternion. + The scalar value. + The scaled quaternion. + + + Reverses the sign of each component of the quaternion. + The quaternion to negate. + The negated quaternion. + + + Divides each component of a specified by its length. + The quaternion to normalize. + The normalized quaternion. + + + Adds each element in one quaternion with its corresponding element in a second quaternion. + The first quaternion. + The second quaternion. + The quaternion that contains the summed values of value1 and value2. + + + Divides one quaternion by a second quaternion. + The dividend. + The divisor. + The quaternion that results from dividing value1 by value2. + + + Returns a value that indicates whether two quaternions are equal. + The first quaternion to compare. + The second quaternion to compare. + true if the two quaternions are equal; otherwise, false. + + + Returns a value that indicates whether two quaternions are not equal. + The first quaternion to compare. + The second quaternion to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. + The source quaternion. + The scalar value. + The scaled quaternion. + + + Returns the quaternion that results from multiplying two quaternions together. + The first quaternion. + The second quaternion. + The product quaternion. + + + Subtracts each element in a second quaternion from its corresponding element in a first quaternion. + The first quaternion. + The second quaternion. + The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Reverses the sign of each component of the quaternion. + The quaternion to negate. + The negated quaternion. + + + Interpolates between two quaternions, using spherical linear interpolation. + The first quaternion. + The second quaternion. + The relative weight of the second quaternion in the interpolation. + The interpolated quaternion. + + + Subtracts each element in a second quaternion from its corresponding element in a first quaternion. + The first quaternion. + The second quaternion. + The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Returns a string that represents this quaternion. + The string representation of this quaternion. + + + The rotation component of the quaternion. + + + + The X value of the vector component of the quaternion. + + + + The Y value of the vector component of the quaternion. + + + + The Z value of the vector component of the quaternion. + + + + Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. + The vector type. T can be any primitive numeric type. + + + Creates a vector whose components are of a specified type. + The numeric type that defines the type of the components in the vector. + + + Creates a vector from a specified array. + A numeric array. + values is null. + + + Creates a vector from a specified array starting at a specified index position. + A numeric array. + The starting index position from which to create the vector. + values is null. + index is less than zero. -or- The length of values minus index is less than . + + + Copies the vector instance to a specified destination array. + The array to receive a copy of the vector values. + destination is null. + The number of elements in the current vector is greater than the number of elements available in the destination array. + + + Copies the vector instance to a specified destination array starting at a specified index position. + The array to receive a copy of the vector values. + The starting index in destination at which to begin the copy operation. + destination is null. + The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. + index is less than zero or greater than the last index in destination. + + + Returns the number of elements stored in the vector. + The number of elements stored in the vector. + Access to the property getter via reflection is not supported. + + + Returns a value that indicates whether this instance is equal to a specified vector. + The vector to compare with this instance. + true if the current instance and other are equal; otherwise, false. + + + Returns a value that indicates whether this instance is equal to a specified object. + The object to compare with this instance. + true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. + + + Returns the hash code for this instance. + The hash code. + + + Gets the element at a specified index. + The index of the element to return. + The element at index index. + index is less than zero. -or- index is greater than or equal to . + + + Returns a vector containing all ones. + A vector containing all ones. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. + The first vector. + The second vector. + The vector that results from the bitwise And of left and right. + + + Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. + The first vector. + The second vector. + The vector that results from the bitwise Or of the elements in left and right. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Returns a value that indicates whether each pair of elements in two specified vectors are equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. + The first vector. + The second vector. + The vector that results from the bitwise XOr of the elements in left and right. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Returns a value that indicates whether any single pair of elements in the specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if any element pairs in left and right are equal. false if no element pairs are equal. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar value. + The source vector. + A scalar value. + The scaled vector. + + + Multiplies a vector by the given scalar. + The scalar value. + The source vector. + The scaled vector. + + + Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. + The source vector. + The one's complement vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates a given vector. + The vector to negate. + The negated vector. + + + Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Returns the string representation of this vector using default formatting. + The string representation of this vector. + + + Returns the string representation of this vector using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns a vector containing all zeroes. + A vector containing all zeroes. + + + Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. + + + Returns a new vector whose elements are the absolute values of the given vector's elements. + The source vector. + The vector type. T can be any primitive numeric type. + The absolute value vector. + + + Returns a new vector whose values are the sum of each pair of elements from two given vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The summed vector. + + + Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of long integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of signed bytes. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. + The integral mask vector used to drive selection. + The first source vector. + The second source vector. + The new vector with elements selected based on the mask. + + + Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. + The integral mask vector used to drive selection. + The first source vector. + The second source vector. + The new vector with elements selected based on the mask. + + + Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. + The integral mask vector used to drive selection. + The first source vector. + The second source vector. + The vector type. T can be any primitive numeric type. + The new vector with elements selected based on the mask. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The divided vector. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The dot product. + + + Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether each pair of elements in the given vectors is equal. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all elements in left and right are equal; otherwise, false. + + + Returns a value that indicates whether any single pair of elements in the given vectors is equal. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element pair in left and right is equal; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all elements in left are greater than the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is greater than the corresponding element in right; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. + + + Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. + true if vector operations are subject to hardware acceleration; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all of the elements in left are less than the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is less than the corresponding element in right; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is less than or equal to the corresponding element in right; otherwise, false. + + + Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The maximum vector. + + + Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The minimum vector. + + + Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. + The scalar value. + The vector. + The vector type. T can be any primitive numeric type. + The scaled vector. + + + Returns a new vector whose values are the product of each pair of elements in two specified vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The product vector. + + + Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. + The vector. + The scalar value. + The vector type. T can be any primitive numeric type. + The scaled vector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns a new vector whose elements are the negation of the corresponding element in the specified vector. + The source vector. + The vector type. T can be any primitive numeric type. + The negated vector. + + + Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. + The source vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a new vector whose elements are the square roots of a specified vector's elements. + The source vector. + The vector type. T can be any primitive numeric type. + The square root vector. + + + Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The difference vector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Represents a vector with two single-precision floating-point values. + + + Creates a new object whose two elements have the same value. + The value to assign to both elements. + + + Creates a vector whose elements have the specified values. + The value to assign to the field. + The value to assign to the field. + + + Returns a vector whose elements are the absolute values of each of the specified vector's elements. + A vector. + The absolute value vector. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Restricts a vector between a minimum and a maximum value. + The vector to restrict. + The minimum value. + The maximum value. + The restricted vector. + + + Copies the elements of the vector to a specified array. + The destination array. + array is null. + The number of elements in the current instance is greater than in the array. + array is multidimensional. + + + Copies the elements of the vector to a specified array starting at a specified index position. + The destination array. + The index at which to copy the first element of the vector. + array is null. + The number of elements in the current instance is greater than in the array. + index is less than zero. -or- index is greater than or equal to the array length. + array is multidimensional. + + + Computes the Euclidean distance between the two given points. + The first point. + The second point. + The distance. + + + Returns the Euclidean distance squared between two specified points. + The first point. + The second point. + The distance squared. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector resulting from the division. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The vector that results from the division. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The dot product. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. + + + Returns a value that indicates whether this instance and another vector are equal. + The other vector. + true if the two vectors are equal; otherwise, false. + + + Returns the hash code for this instance. + The hash code. + + + Returns the length of the vector. + The vector's length. + + + Returns the length of the vector squared. + The vector's length squared. + + + Performs a linear interpolation between two vectors based on the given weighting. + The first vector. + The second vector. + A value between 0 and 1 that indicates the weight of value2. + The interpolated vector. + + + Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The maximized vector. + + + Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The minimized vector. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar. + The vector to multiply. + The scalar value. + The scaled vector. + + + Multiplies a scalar value by a specified vector. + The scaled value. + The vector. + The scaled vector. + + + Negates a specified vector. + The vector to negate. + The negated vector. + + + Returns a vector with the same direction as the specified vector, but with a length of one. + The vector to normalize. + The normalized vector. + + + Gets a vector whose 2 elements are equal to one. + A vector whose two elements are equal to one (that is, it returns the vector (1,1). + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The result of the division. + + + Returns a value that indicates whether each pair of elements in two specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a value that indicates whether two specified vectors are not equal. + The first vector to compare. + The second vector to compare. + true if left and right are not equal; otherwise, false. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiples the specified vector by the specified scalar value. + The vector. + The scalar value. + The scaled vector. + + + Multiples the scalar value by the specified vector. + The vector. + The scalar value. + The scaled vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates the specified vector. + The vector to negate. + The negated vector. + + + Returns the reflection of a vector off a surface that has the specified normal. + The source vector. + The normal of the surface being reflected off. + The reflected vector. + + + Returns a vector whose elements are the square root of each of a specified vector's elements. + A vector. + The square root vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The difference vector. + + + Returns the string representation of the current instance using default formatting. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Transforms a vector by a specified 3x2 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a vector normal by the given 3x2 matrix. + The source vector. + The matrix. + The transformed vector. + + + Transforms a vector normal by the given 4x4 matrix. + The source vector. + The matrix. + The transformed vector. + + + Gets the vector (1,0). + The vector (1,0). + + + Gets the vector (0,1). + The vector (0,1). + + + The X component of the vector. + + + + The Y component of the vector. + + + + Returns a vector whose 2 elements are equal to zero. + A vector whose two elements are equal to zero (that is, it returns the vector (0,0). + + + Represents a vector with three single-precision floating-point values. + + + Creates a new object whose three elements have the same value. + The value to assign to all three elements. + + + Creates a new object from the specified object and the specified value. + The vector with two elements. + The additional value to assign to the field. + + + Creates a vector whose elements have the specified values. + The value to assign to the field. + The value to assign to the field. + The value to assign to the field. + + + Returns a vector whose elements are the absolute values of each of the specified vector's elements. + A vector. + The absolute value vector. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Restricts a vector between a minimum and a maximum value. + The vector to restrict. + The minimum value. + The maximum value. + The restricted vector. + + + Copies the elements of the vector to a specified array. + The destination array. + array is null. + The number of elements in the current instance is greater than in the array. + array is multidimensional. + + + Copies the elements of the vector to a specified array starting at a specified index position. + The destination array. + The index at which to copy the first element of the vector. + array is null. + The number of elements in the current instance is greater than in the array. + index is less than zero. -or- index is greater than or equal to the array length. + array is multidimensional. + + + Computes the cross product of two vectors. + The first vector. + The second vector. + The cross product. + + + Computes the Euclidean distance between the two given points. + The first point. + The second point. + The distance. + + + Returns the Euclidean distance squared between two specified points. + The first point. + The second point. + The distance squared. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The vector that results from the division. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector resulting from the division. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The dot product. + + + Returns a value that indicates whether this instance and another vector are equal. + The other vector. + true if the two vectors are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. + + + Returns the hash code for this instance. + The hash code. + + + Returns the length of this vector object. + The vector's length. + + + Returns the length of the vector squared. + The vector's length squared. + + + Performs a linear interpolation between two vectors based on the given weighting. + The first vector. + The second vector. + A value between 0 and 1 that indicates the weight of value2. + The interpolated vector. + + + Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The maximized vector. + + + Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The minimized vector. + + + Multiplies a scalar value by a specified vector. + The scaled value. + The vector. + The scaled vector. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar. + The vector to multiply. + The scalar value. + The scaled vector. + + + Negates a specified vector. + The vector to negate. + The negated vector. + + + Returns a vector with the same direction as the specified vector, but with a length of one. + The vector to normalize. + The normalized vector. + + + Gets a vector whose 3 elements are equal to one. + A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The result of the division. + + + Returns a value that indicates whether each pair of elements in two specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a value that indicates whether two specified vectors are not equal. + The first vector to compare. + The second vector to compare. + true if left and right are not equal; otherwise, false. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiples the specified vector by the specified scalar value. + The vector. + The scalar value. + The scaled vector. + + + Multiples the scalar value by the specified vector. + The vector. + The scalar value. + The scaled vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates the specified vector. + The vector to negate. + The negated vector. + + + Returns the reflection of a vector off a surface that has the specified normal. + The source vector. + The normal of the surface being reflected off. + The reflected vector. + + + Returns a vector whose elements are the square root of each of a specified vector's elements. + A vector. + The square root vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The difference vector. + + + Returns the string representation of the current instance using default formatting. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Transforms a vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a vector normal by the given 4x4 matrix. + The source vector. + The matrix. + The transformed vector. + + + Gets the vector (1,0,0). + The vector (1,0,0). + + + Gets the vector (0,1,0). + The vector (0,1,0).. + + + Gets the vector (0,0,1). + The vector (0,0,1). + + + The X component of the vector. + + + + The Y component of the vector. + + + + The Z component of the vector. + + + + Gets a vector whose 3 elements are equal to zero. + A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). + + + Represents a vector with four single-precision floating-point values. + + + Creates a new object whose four elements have the same value. + The value to assign to all four elements. + + + Constructs a new object from the specified object and a W component. + The vector to use for the X, Y, and Z components. + The W component. + + + Creates a new object from the specified object and a Z and a W component. + The vector to use for the X and Y components. + The Z component. + The W component. + + + Creates a vector whose elements have the specified values. + The value to assign to the field. + The value to assign to the field. + The value to assign to the field. + The value to assign to the field. + + + Returns a vector whose elements are the absolute values of each of the specified vector's elements. + A vector. + The absolute value vector. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Restricts a vector between a minimum and a maximum value. + The vector to restrict. + The minimum value. + The maximum value. + The restricted vector. + + + Copies the elements of the vector to a specified array. + The destination array. + array is null. + The number of elements in the current instance is greater than in the array. + array is multidimensional. + + + Copies the elements of the vector to a specified array starting at a specified index position. + The destination array. + The index at which to copy the first element of the vector. + array is null. + The number of elements in the current instance is greater than in the array. + index is less than zero. -or- index is greater than or equal to the array length. + array is multidimensional. + + + Computes the Euclidean distance between the two given points. + The first point. + The second point. + The distance. + + + Returns the Euclidean distance squared between two specified points. + The first point. + The second point. + The distance squared. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector resulting from the division. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The vector that results from the division. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The dot product. + + + Returns a value that indicates whether this instance and another vector are equal. + The other vector. + true if the two vectors are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. + + + Returns the hash code for this instance. + The hash code. + + + Returns the length of this vector object. + The vector's length. + + + Returns the length of the vector squared. + The vector's length squared. + + + Performs a linear interpolation between two vectors based on the given weighting. + The first vector. + The second vector. + A value between 0 and 1 that indicates the weight of value2. + The interpolated vector. + + + Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The maximized vector. + + + Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The minimized vector. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar. + The vector to multiply. + The scalar value. + The scaled vector. + + + Multiplies a scalar value by a specified vector. + The scaled value. + The vector. + The scaled vector. + + + Negates a specified vector. + The vector to negate. + The negated vector. + + + Returns a vector with the same direction as the specified vector, but with a length of one. + The vector to normalize. + The normalized vector. + + + Gets a vector whose 4 elements are equal to one. + Returns . + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The result of the division. + + + Returns a value that indicates whether each pair of elements in two specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a value that indicates whether two specified vectors are not equal. + The first vector to compare. + The second vector to compare. + true if left and right are not equal; otherwise, false. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiples the specified vector by the specified scalar value. + The vector. + The scalar value. + The scaled vector. + + + Multiples the scalar value by the specified vector. + The vector. + The scalar value. + The scaled vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates the specified vector. + The vector to negate. + The negated vector. + + + Returns a vector whose elements are the square root of each of a specified vector's elements. + A vector. + The square root vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The difference vector. + + + Returns the string representation of the current instance using default formatting. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Transforms a four-dimensional vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a four-dimensional vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a three-dimensional vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a two-dimensional vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a two-dimensional vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a three-dimensional vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Gets the vector (0,0,0,1). + The vector (0,0,0,1). + + + Gets the vector (1,0,0,0). + The vector (1,0,0,0). + + + Gets the vector (0,1,0,0). + The vector (0,1,0,0).. + + + Gets a vector whose 4 elements are equal to zero. + The vector (0,0,1,0). + + + The W component of the vector. + + + + The X component of the vector. + + + + The Y component of the vector. + + + + The Z component of the vector. + + + + Gets a vector whose 4 elements are equal to zero. + A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). + + + \ No newline at end of file diff --git a/build/tools/System.Runtime.CompilerServices.Unsafe.dll b/build/tools/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..3156239266db9cceede249731f00c3822e479a1f GIT binary patch literal 23600 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 OyIXQg_#$)@0sTLk9O=pc literal 0 HcmV?d00001 diff --git a/build/tools/System.Runtime.CompilerServices.Unsafe.xml b/build/tools/System.Runtime.CompilerServices.Unsafe.xml new file mode 100644 index 0000000..6a7cfcf --- /dev/null +++ b/build/tools/System.Runtime.CompilerServices.Unsafe.xml @@ -0,0 +1,200 @@ + + + System.Runtime.CompilerServices.Unsafe + + + + Contains generic, low-level functionality for manipulating pointers. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Determines whether the specified references point to the same location. + The first reference to compare. + The second reference to compare. + The type of reference. + true if left and right point to the same location; otherwise, false. + + + Casts the given object to the specified type. + The object to cast. + The type which the object will be cast to. + The original object, casted to the given type. + + + Reinterprets the given reference as a reference to a value of type TTo. + The reference to reinterpret. + The type of reference to reinterpret.. + The desired type of the reference. + A reference to a value of type TTo. + + + Returns a pointer to the given by-ref parameter. + The object whose pointer is obtained. + The type of object. + A pointer to the given value. + + + Reinterprets the given location as a reference to a value of type T. + The location of the value to reference. + The type of the interpreted location. + A reference to a value of type T. + + + Determines the byte offset from origin to target from the given references. + The reference to origin. + The reference to target. + The type of reference. + Byte offset from origin to target i.e. target - origin. + + + Copies a value of type T to the given location. + The location to copy to. + A reference to the value to copy. + The type of value to copy. + + + Copies a value of type T to the given location. + The location to copy to. + A pointer to the value to copy. + The type of value to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Reads a value of type T from the given location. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Returns the size of an object of the given type parameter. + The type of object whose size is retrieved. + The size of an object of type T. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + + The type of reference. + A new reference that reflects the subraction of byte offset from pointer. + + + Writes a value of type T to the given location. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + \ No newline at end of file diff --git a/source/ElasticsearchInside/Config/jvm.options b/source/ElasticsearchInside/Config/jvm.options index c8d4613..ce8bcc9 100644 --- a/source/ElasticsearchInside/Config/jvm.options +++ b/source/ElasticsearchInside/Config/jvm.options @@ -20,7 +20,7 @@ # Xmx represents the maximum size of total heap space -Xms128m --Xmx128m +-Xmx2g ################################################################ ## Expert settings diff --git a/source/ElasticsearchInside/Elasticsearch.cs b/source/ElasticsearchInside/Elasticsearch.cs index 8810aa3..6116616 100644 --- a/source/ElasticsearchInside/Elasticsearch.cs +++ b/source/ElasticsearchInside/Elasticsearch.cs @@ -12,7 +12,7 @@ using ElasticsearchInside.Executables; using ElasticsearchInside.Utilities; using ElasticsearchInside.Utilities.Archive; -using LZ4; +using K4os.Compression.LZ4.Streams; namespace ElasticsearchInside @@ -190,10 +190,23 @@ public async Task Restart() var started = Stopwatch.StartNew(); using (var stream = GetType().Assembly.GetManifestResourceStream(typeof(RessourceTarget), name)) - using (var decompresStream = new LZ4Stream(stream, LZ4StreamMode.Decompress)) - using (var archiveReader = new ArchiveReader(decompresStream)) - await archiveReader.ExtractToDirectory(destination, cancellationToken).ConfigureAwait(false); - + { + //using (var decompresStream = new LZ4Stream(stream, LZ4StreamMode.Decompress)) + //{ + // using (var archiveReader = new ArchiveReader(decompresStream)) + // { + // await archiveReader.ExtractToDirectory(destination, cancellationToken).ConfigureAwait(false); + // } + //} + using (LZ4DecoderStream decompresStream = LZ4Stream.Decode(stream)) + { + using (var archiveReader = new ArchiveReader(decompresStream)) + { + await archiveReader.ExtractToDirectory(destination, cancellationToken).ConfigureAwait(false); + } + } + } + Info($"Extracted {name.Split('.')[0]} in {started.Elapsed.TotalSeconds:#0.##} seconds"); } diff --git a/source/ElasticsearchInside/ElasticsearchInside.csproj b/source/ElasticsearchInside/ElasticsearchInside.csproj index d555d46..f9be082 100644 --- a/source/ElasticsearchInside/ElasticsearchInside.csproj +++ b/source/ElasticsearchInside/ElasticsearchInside.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 @@ -8,6 +8,11 @@ https://github.com/poulfoged/Elasticsearch-Inside https://raw.githubusercontent.com/poulfoged/elasticsearch-inside/master/logo.png https://github.com/poulfoged/Elasticsearch-Inside + true + Cgi.elasticsearch-inside + 7.1.4 + 7.1.4.0 + 7.1.4.0 @@ -22,8 +27,7 @@ - - 1.0.15.93 - + + \ No newline at end of file diff --git a/source/ElasticsearchInside/ElasticsearchInside.nuspec b/source/ElasticsearchInside/ElasticsearchInside.nuspec deleted file mode 100644 index b50ee7c..0000000 --- a/source/ElasticsearchInside/ElasticsearchInside.nuspec +++ /dev/null @@ -1,20 +0,0 @@ - - - - elasticsearch-inside - $version$ - Elasticsearch Inside - Monzoom (Poul Foged) - Monzoom (Poul Foged) - https://github.com/poulfoged/elasticsearch-inside - https://raw.githubusercontent.com/poulfoged/elasticsearch-inside/master/logo.png - false - Start Elasticsearch from .NET for integration tests. Contains both java runtime and elasticsearch embedded in the dll. - The version number follows the version of the embedded Elasticsearch. With Jvm updates and other changes only the last digit is increased. - Copyright 2015 - elasticsearch, elastic, integration, tests - - Elasticsearch $version$ - - - \ No newline at end of file diff --git a/source/ElasticsearchInside/Properties/AssemblyInfo.cs b/source/ElasticsearchInside/Properties/AssemblyInfo.cs index a2fb782..a80d456 100644 --- a/source/ElasticsearchInside/Properties/AssemblyInfo.cs +++ b/source/ElasticsearchInside/Properties/AssemblyInfo.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle("ElasticsearchInside")] -[assembly: AssemblyDescription("A fully embedded version of Elasticsearch for your integration tests.\r\n\r\nLicense: MIT")] +[assembly: AssemblyDescription("NuGet package made by developers of CGI.\r\nA fully embedded version of Elasticsearch for your integration tests.\r\n\r\nLicense: MIT")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ElasticsearchInside")] From c0aa292ac734bc84dd1df8473c61ec75e3189bf3 Mon Sep 17 00:00:00 2001 From: Martynas Ramonas Date: Wed, 9 Oct 2019 16:34:12 +0300 Subject: [PATCH 3/3] Fixed typo error on add-externals.ps1 --- build/add-externals.ps1 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build/add-externals.ps1 b/build/add-externals.ps1 index 1cfbf34..eccc1e4 100644 --- a/build/add-externals.ps1 +++ b/build/add-externals.ps1 @@ -73,11 +73,10 @@ function DownloadJre{ #Invoke-WebRequest $downloadUrl -UseBasicParsing -UseDefaultCredentials -WebSession $s -OutFile .\temp\jre.tgz # Added download from third party repository because not able to download from oracle.com - $downloadUrl = https://github.com/frekele/oracle-java/releases/download/8u212-b10/jre-8u212-windows-x64.tar.gz + $downloadUrl = "https://github.com/frekele/oracle-java/releases/download/8u212-b10/jre-8u212-windows-x64.tar.gz" Write-Host "Downloading " $downloadUrl Invoke-WebRequest $downloadUrl -OutFile .\temp\jre.tgz Write-Host "done." -ForegroundColor Green -} $ProgressPreference = $bak Write-Host "done." -ForegroundColor Green