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:
parent
73a8b950cb
commit
1d2e2b5a5b
2 changed files with 31 additions and 1 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue