From 5a205eb602e91a9c5854a76e3841fde91680889a Mon Sep 17 00:00:00 2001 From: Jonathan Leffler Date: Wed, 18 Mar 2020 22:20:37 -0600 Subject: [PATCH] Add strspan-1.03.tgz to packages --- packages/README.md | 127 ++++++++++++++++++++++++++++---------- packages/strspan-1.03.tgz | Bin 0 -> 30359 bytes 2 files changed, 93 insertions(+), 34 deletions(-) create mode 100644 packages/strspan-1.03.tgz diff --git a/packages/README.md b/packages/README.md index d858f42c..c2429315 100644 --- a/packages/README.md +++ b/packages/README.md @@ -60,40 +60,64 @@ The release has a SHA2-256 checksum and size as shown: SHA-256 d116d9e85c77826c1fd3ff4d18c56c311a6295c8247f83686cd7e8805963220f 28953 newgid-1.10.tgz -### `utf8-unicode` - -The code for `utf8-unicode` which processes named files or standard -input as UTF-8 and prints the sequence of bytes that make up a single -character and the Unicode character it corresponds to. - -For example: - - $ echo "grep –i where | wc -l" | utf8-unicode - 0x67 = U+0067 - 0x72 = U+0072 - 0x65 = U+0065 - 0x70 = U+0070 - 0x20 = U+0020 - 0xE2 0x80 0x93 = U+2013 - 0x69 = U+0069 - 0x20 = U+0020 - 0x77 = U+0077 - 0x68 = U+0068 - 0x65 = U+0065 - 0x72 = U+0072 - 0x65 = U+0065 - 0x20 = U+0020 - 0x7C = U+007C - 0x20 = U+0020 - 0x77 = U+0077 - 0x63 = U+0063 - 0x20 = U+0020 - 0x2D = U+002D - 0x6C = U+006C +### `strspan` + +The code for library functions `str_span()` and `str_cspan()`, which are +related to, but different from `strspn()` and `strcspn()`. +These functions are designed to be used repeatedly for the same set of +searching. +They precompute a table of which characters are to be matched. +One of the functions `set_span()` or `set_ranges()` is used to +initialize the precomputed data. +They readily out-perform `strspn()` and `strcspn()` on moderate size +searches. + +The distribution includes a timing program `test2.strspan` which can be +run with a number files. +It measures the time to read the files — processing them with +`strlen()` and `strchr()` to warm up the cache and I/O buffers. +It then runs `str_span()` and `str_cspan()` on the same files, and then +`strspn()` and `strcspn()`. +It can be effective to name the same file multiple times on the command +line. + +Example use: + + $ test2.strspan bible-be.txt bible-be.txt bible-be.txt + # NB: The tests for str_span and strspn are comparable + # The tests for strlen and strchr are not comparable + strlen 0.187297 (4467663) bible-be.txt + strlen 0.186324 (4467663) bible-be.txt + strlen 0.187616 (4467663) bible-be.txt + strchr 0.182676 (4467663) bible-be.txt + strchr 0.185405 (4467663) bible-be.txt + strchr 0.184813 (4467663) bible-be.txt + str_span 0.195715 (4467663) bible-be.txt + str_span 0.199516 (4467663) bible-be.txt + str_span 0.194588 (4467663) bible-be.txt + strspn 0.347890 (4467663) bible-be.txt + strspn 0.346028 (4467663) bible-be.txt + strspn 0.347305 (4467663) bible-be.txt + $ test2.strspan great.panjandrum great.panjandrum great.panjandrum + # NB: The tests for str_span and strspn are comparable + # The tests for strlen and strchr are not comparable + strlen 0.000046 (487) great.panjandrum + strlen 0.000031 (487) great.panjandrum + strlen 0.000030 (487) great.panjandrum + strchr 0.000036 (487) great.panjandrum + strchr 0.000030 (487) great.panjandrum + strchr 0.000030 (487) great.panjandrum + str_span 0.000035 (487) great.panjandrum + str_span 0.000032 (487) great.panjandrum + str_span 0.000031 (487) great.panjandrum + strspn 0.000061 (487) great.panjandrum + strspn 0.000052 (487) great.panjandrum + strspn 0.000053 (487) great.panjandrum $ -The Unicode EN DASH U+2013 was why that `grep` command was failing with -an error about being unable to find the file `where`. +These results show that `str_span()` and `str_cspan()` are marginally +slower than using `strlen()` or `strchr(), but considerably quicker than +use `strspn()` and `strcspn()`. ### `timecmd` @@ -115,7 +139,7 @@ The code for `timecmd` which measures elapsed time of commands specified as part Example uses: - $ timecmd -m sleep 65 + $ timecmd -m sleep 65 2020-03-01 08:42:58.079 [PID 16916] sleep 65 2020-03-01 08:44:03.086 [PID 16916; status 0x0000] - 1m 5.007s $ timecmd -b -m sleep 65 @@ -135,5 +159,40 @@ Example uses: The sample commands all produced no output. It works fine with commands that do. +### `utf8-unicode` + +The code for `utf8-unicode` which processes named files or standard +input as UTF-8 and prints the sequence of bytes that make up a single +character and the Unicode character it corresponds to. + +For example: + + $ echo "grep –i where | wc -l" | utf8-unicode + 0x67 = U+0067 + 0x72 = U+0072 + 0x65 = U+0065 + 0x70 = U+0070 + 0x20 = U+0020 + 0xE2 0x80 0x93 = U+2013 + 0x69 = U+0069 + 0x20 = U+0020 + 0x77 = U+0077 + 0x68 = U+0068 + 0x65 = U+0065 + 0x72 = U+0072 + 0x65 = U+0065 + 0x20 = U+0020 + 0x7C = U+007C + 0x20 = U+0020 + 0x77 = U+0077 + 0x63 = U+0063 + 0x20 = U+0020 + 0x2D = U+002D + 0x6C = U+006C + $ + +The Unicode EN DASH U+2013 was why that `grep` command was failing with +an error about being unable to find the file `where`. + Jonathan Leffler (jonathan.leffler@gmail.com) -Sunday 1st March 2020 +Wednesday 18th March 2020 diff --git a/packages/strspan-1.03.tgz b/packages/strspan-1.03.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3331a79b00f93543af1af2a841bef02a66d584b0 GIT binary patch literal 30359 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 z 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 GxB&p