Generalize even more
This commit is contained in:
parent
4e46500292
commit
6f2124daa5
|
@ -22,52 +22,48 @@ type
|
||||||
UInt1024* = UInt[16]
|
UInt1024* = UInt[16]
|
||||||
UInt2048* = UInt[32]
|
UInt2048* = UInt[32]
|
||||||
|
|
||||||
|
TTInt = Int or UInt
|
||||||
|
|
||||||
stdString {.importc: "std::string", header: "<string.h>".} = object
|
stdString {.importc: "std::string", header: "<string.h>".} = object
|
||||||
|
|
||||||
proc inplacePow[T](a: var T, b: T) {.importcpp: "(#.Pow(#))".}
|
proc inplacePow[T](a: var T, b: T) {.importcpp: "(#.Pow(#))".}
|
||||||
proc inplaceDiv[T](a: var T, b: T, c: var T) {.importcpp: "(#.Div(#, #))".}
|
proc inplaceDiv[T](a: var T, b: T, c: var T) {.importcpp: "(#.Div(#, #))".}
|
||||||
|
|
||||||
template defineSharedProcs(TTInt: untyped) =
|
proc `+`*(a, b: TTInt): TTInt {.importcpp: "(# + #)".}
|
||||||
# These procs are legit for both Int and UInt
|
proc `-`*(a, b: TTInt): TTInt {.importcpp: "(# - #)".}
|
||||||
|
proc `*`*(a, b: TTInt): TTInt {.importcpp: "(# * #)".}
|
||||||
|
proc `/`*(a, b: TTInt): TTInt {.importcpp: "(# / #)".}
|
||||||
|
proc `div`*(a, b: TTInt): TTInt {.importcpp: "(# / #)".}
|
||||||
|
|
||||||
proc `+`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# + #)".}
|
proc `==`*(a, b: TTInt): bool {.importcpp: "(# == #)".}
|
||||||
proc `-`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# - #)".}
|
proc `<`*(a, b: TTInt): bool {.importcpp: "(# < #)".}
|
||||||
proc `*`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# * #)".}
|
proc `<=`*(a, b: TTInt): bool {.importcpp: "(# <= #)".}
|
||||||
proc `/`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# / #)".}
|
|
||||||
proc `div`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# / #)".}
|
|
||||||
|
|
||||||
proc `==`*[N](a, b: TTInt[N]): bool {.importcpp: "(# == #)".}
|
proc `+=`*(a: var TTInt, b: TTInt) {.importcpp: "# += #".}
|
||||||
proc `<`*[N](a, b: TTInt[N]): bool {.importcpp: "(# < #)".}
|
proc `-=`*(a: var TTInt, b: TTInt) {.importcpp: "# -= #".}
|
||||||
proc `<=`*[N](a, b: TTInt[N]): bool {.importcpp: "(# <= #)".}
|
proc `*=`*(a: var TTInt, b: TTInt) {.importcpp: "# *= #".}
|
||||||
|
proc `/=`*(a: var TTInt, b: TTInt) {.importcpp: "# /= #".}
|
||||||
|
|
||||||
proc `+=`*[N](a: var TTInt[N], b: TTInt[N]) {.importcpp: "# += #".}
|
proc `and`*(a, b: TTInt): TTInt {.importcpp: "(# & #)".}
|
||||||
proc `-=`*[N](a: var TTInt[N], b: TTInt[N]) {.importcpp: "# -= #".}
|
proc `or`*(a, b: TTInt): TTInt {.importcpp: "(# | #)".}
|
||||||
proc `*=`*[N](a: var TTInt[N], b: TTInt[N]) {.importcpp: "# *= #".}
|
proc `xor`*(a, b: TTInt): TTInt {.importcpp: "(# ^ #)".}
|
||||||
proc `/=`*[N](a: var TTInt[N], b: TTInt[N]) {.importcpp: "# /= #".}
|
|
||||||
|
|
||||||
proc `and`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# & #)".}
|
proc `|=`*(a: var TTInt, b: TTInt) {.importcpp: "(# |= #)".}
|
||||||
proc `or`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# | #)".}
|
proc `&=`*(a: var TTInt, b: TTInt) {.importcpp: "(# &= #)".}
|
||||||
proc `xor`*[N](a, b: TTInt[N]): TTInt[N] {.importcpp: "(# ^ #)".}
|
proc `^=`*(a: var TTInt, b: TTInt) {.importcpp: "(# ^= #)".}
|
||||||
|
|
||||||
proc `|=`*[N](a: var TTInt[N], b: TTInt[N]) {.importcpp: "(# |= #)".}
|
proc isZero*(a: TTInt): bool {.importcpp: "IsZero", header: TTMATH_HEADER.}
|
||||||
proc `&=`*[N](a: var TTInt[N], b: TTInt[N]) {.importcpp: "(# &= #)".}
|
|
||||||
proc `^=`*[N](a: var TTInt[N], b: TTInt[N]) {.importcpp: "(# ^= #)".}
|
|
||||||
|
|
||||||
proc isZero*[N](a: TTInt[N]): bool {.importcpp: "IsZero", header: TTMATH_HEADER.}
|
proc pow*(a, b: TTInt): TTInt =
|
||||||
|
var tmp = a
|
||||||
|
tmp.inplacePow(b)
|
||||||
|
result = tmp
|
||||||
|
|
||||||
proc pow*[N](a, b: TTInt[N]): TTInt[N] =
|
proc `mod`*(a, b: TTInt): TTInt =
|
||||||
var tmp = a
|
var tmp = a
|
||||||
tmp.inplacePow(b)
|
tmp.inplaceDiv(b, result)
|
||||||
result = tmp
|
|
||||||
|
|
||||||
proc `mod`*[N](a, b: TTInt[N]): TTInt[N] =
|
proc ToString(a: TTInt, s: stdString) {.importcpp, header: TTMATH_HEADER.}
|
||||||
var tmp = a
|
|
||||||
tmp.inplaceDiv(b, result)
|
|
||||||
|
|
||||||
proc ToString[N](a: TTInt[N], s: stdString) {.importcpp, header: TTMATH_HEADER.}
|
|
||||||
|
|
||||||
defineSharedProcs(Int)
|
|
||||||
defineSharedProcs(UInt)
|
|
||||||
|
|
||||||
proc initInt[T](a: int64): T {.importcpp: "'0((int)#)".}
|
proc initInt[T](a: int64): T {.importcpp: "'0((int)#)".}
|
||||||
proc initUInt[T](a: uint64): T {.importcpp: "'0((int)#)".}
|
proc initUInt[T](a: uint64): T {.importcpp: "'0((int)#)".}
|
||||||
|
|
Loading…
Reference in New Issue