Add mimetypes.mimesLongest (#16480)

* Allow single alloc mimetypes ops

* Allow single alloc mimetypes ops

* Update lib/pure/mimetypes.nim

Co-authored-by: flywind <43030857+xflywind@users.noreply.github.com>

* https://github.com/nim-lang/Nim/pull/16480#issuecomment-752630190

* https://github.com/nim-lang/Nim/pull/16480#issuecomment-752630190

* https://github.com/nim-lang/Nim/pull/16480#issuecomment-753349661

* update changelog

Co-authored-by: flywind <43030857+xflywind@users.noreply.github.com>
This commit is contained in:
Juan Carlos 2021-01-02 04:10:38 -03:00 • committed by GitHub
commit 1d2e2b5a5b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View file

@ -81,6 +81,9 @@
- Added `httpcore.is1xx` and missing HTTP codes. - Added `httpcore.is1xx` and missing HTTP codes.
- Added `jsconsole.jsAssert` for JavaScript target. - Added `jsconsole.jsAssert` for JavaScript target.
- Added `mimetypes.mimesExtMaxLen` thats equal to the length of the longest "ext" from `mimes`.
- Added `mimetypes.mimesMaxLen` thats equal to the length of the longest "mime" from `mimes`.
## Language changes ## Language changes

View file

@ -8,7 +8,7 @@
# #
## This module implements a mimetypes database ## This module implements a mimetypes database
import strtabs import strtabs, std/private/since
from strutils import startsWith, toLowerAscii, strip from strutils import startsWith, toLowerAscii, strip
type type
@ -1917,6 +1917,33 @@ func register*(mimedb: var MimeDB, ext: string, mimetype: string) =
{.noSideEffect.}: {.noSideEffect.}:
mimedb.mimes[ext.toLowerAscii()] = mimetype.toLowerAscii() mimedb.mimes[ext.toLowerAscii()] = mimetype.toLowerAscii()
since (1, 5):
func mimesLongest(): array[2, int] {.compiletime.} =
runnableExamples:
static:
doAssert mimesLongest() >= (ext: 24, mime: 73)
var currentKeyLength, currentValLength: int
for item in mimes:
currentKeyLength = item[0].len
currentValLength = item[1].len
if currentKeyLength > result[0]: result[0] = currentKeyLength
if currentValLength > result[1]: result[1] = currentValLength
const
ctValue = mimesLongest() # Use 2 const instead of func, save tuple unpack.
mimesExtMaxLen*: int = ctValue[0] ## \
## The length of the longest "ext" from `mimes`,
## this is useful for optimizations with `newStringOfCap` and `newString`.
mimesMaxLen*: int = ctValue[1] ## \
## The length of the longest "mime" from `mimes`,
## this is useful for optimizations with `newStringOfCap` and `newString`.
##
## See also:
## * `newStringOfCap <system.html#newStringOfCap>`_
## * `newString <system.html#newString>`_
runnableExamples: runnableExamples:
static: static:
block: block: