Mercurial > games > semicongine
comparison svk/generate.nim @ 1488:3ce7c132fdac
did: improvments
author | sam <sam@basx.dev> |
---|---|
date | Sun, 18 May 2025 16:36:52 +0700 |
parents | f786797a0cbe |
children | e6bd1f553c1b |
comparison
equal
deleted
inserted
replaced
1487:f786797a0cbe | 1488:3ce7c132fdac |
---|---|
259 for flag in flags: | 259 for flag in flags: |
260 let a = distinctBase(S)(result) | 260 let a = distinctBase(S)(result) |
261 let b = distinctBase(S)(flag) | 261 let b = distinctBase(S)(flag) |
262 result = S(a or b) | 262 result = S(a or b) |
263 | 263 |
264 func toEnums[T, S](number: T): seq[S] = | 264 func toEnums*[T, S](number: T): seq[S] = |
265 for value in enumFullRange(T): | 265 for value in enumFullRange(S): |
266 if (value.ord and cint(number)) > 0: | 266 if (value.ord and cint(number)) > 0: |
267 result.add value | 267 result.add value |
268 """ | 268 """ |
269 | 269 |
270 outFile.writeLine "type" | 270 outFile.writeLine "type" |
431 | 431 |
432 for edef in enums.values(): | 432 for edef in enums.values(): |
433 if edef.values.len > 0: | 433 if edef.values.len > 0: |
434 if edef.isBitmask: | 434 if edef.isBitmask: |
435 let bitsName = edef.name | 435 let bitsName = edef.name |
436 let p = bitsName.rfind("Flag") | 436 let p = bitsName.rfind("FlagBits") |
437 let flagsName = bitsName[0 ..< p] & "Flags" | 437 let flagsName = bitsName[0 ..< p] & "Flags" & bitsName[p + 8 .. ^1] |
438 | 438 |
439 outFile.writeLine &"converter {bitsName}ToBits*(flags: openArray[{bitsName}]): {flagsName} =" | 439 outFile.writeLine &"converter {bitsName}ToBits*(flags: openArray[{bitsName}]): {flagsName} =" |
440 outFile.writeLine &" asBits[{bitsName}, {flagsName}](flags)" | 440 outFile.writeLine &" asBits[{bitsName}, {flagsName}](flags)" |
441 outFile.writeLine &"func `$`*(bits: {flagsName}): string =" | 441 outFile.writeLine &"func `$`*(bits: {flagsName}): string =" |
442 outFile.writeLine &" $toEnums[{flagsName}, {bitsName}](bits)" | 442 outFile.writeLine &" $toEnums[{flagsName}, {bitsName}](bits)" |