Skip to content

Instantly share code, notes, and snippets.

@Araq
Araq / tsortdev.nim
Created January 28, 2012 22:46
yet another showstopper (part 2)
discard """
disabled: false
"""
import math, algorithm
proc sorted[T](a: openArray[T], order: TSortOrder): bool =
result = true
for i in 0 .. < a.high:
if cmp(a[i], a[i+1]) * order > 0:
@Araq
Araq / widestrings.nim
Created January 22, 2012 18:48
Windows' wide strings to Nimrod
import os
type
TUtf16Char = distinct int16
WideCString = ptr array[0.. 1_000_000, TUtf16Char]
const
utf8Encoding = 65001
proc len(w: WideCString): int =
@Araq
Araq / cstrings.nim
Created January 22, 2012 13:58
More procs for dealing with CStringArray
proc allocCStringArray*(a: openArray[string]): cstringArray =
## creates a NULL terminated cstringArray from `a`. The result has to
## be freed with `deallocCStringArray` after it's not needed anymore.
result = cast[cstringArray](alloc0((a.len+1) * sizeof(cstring)))
for i in 0 .. a.high:
# XXX get rid of this string copy here:
var x = a[i]
result[i] = cast[cstring](alloc0(x.len+1))
copyMem(result[i], addr(x[0]), x.len)
@Araq
Araq / gist:1235428
Created September 22, 2011 17:38
Module injection
# module A
when not defined(dolog):
template dolog(msg: string) = nil
proc whatever() =
dolog "start of whatever"
doSomeWork
dolog "end of whatever"
#
#
# Nimrod's Runtime Library
# (c) Copyright 2011 Andreas Rumpf
#
# See the file "copying.txt", included in this
# distribution, for details about the copyright.
#
## This module implements big integers for Nimrod.
@Araq
Araq / parseBool.nim
Created February 20, 2011 13:17
parseBool
proc parseBool(s: string): bool =
case normalize(s)
of "y", "yes", "true", "1", "on": result = true
of "n", "no", "false", "0", "off": result = false
else: raise newException(EInvalidValue, "cannot interpret as a bool: " & s)