| 00:08:53 | * | endragor joined #nim |
| 00:11:23 | * | MJCaley joined #nim |
| 00:13:27 | * | endragor quit (Ping timeout: 240 seconds) |
| 00:29:32 | * | endragor joined #nim |
| 00:33:57 | * | endragor quit (Ping timeout: 240 seconds) |
| 01:01:33 | * | yglukhov joined #nim |
| 01:05:57 | * | yglukhov quit (Ping timeout: 240 seconds) |
| 01:20:46 | * | chamar quit (Quit: Leaving) |
| 01:42:06 | * | vlad1777d joined #nim |
| 02:39:53 | * | chemist69 quit (Ping timeout: 252 seconds) |
| 02:44:11 | * | S1t1Schu joined #nim |
| 02:48:17 | * | S1tiSchu quit (Ping timeout: 268 seconds) |
| 02:48:20 | * | endragor joined #nim |
| 02:52:12 | * | dandevelo quit (Ping timeout: 272 seconds) |
| 02:52:49 | * | endragor quit (Ping timeout: 248 seconds) |
| 02:53:17 | * | chemist69 joined #nim |
| 03:12:09 | * | user0 quit (Quit: user0) |
| 03:12:17 | * | user0 joined #nim |
| 03:37:54 | * | BitPuffin|osx joined #nim |
| 04:05:11 | * | MJCaley quit (Quit: MJCaley) |
| 04:14:27 | FromGitter | <gogolxdong> Is there any description of importc or importcpp, I don't quite get it. |
| 04:15:22 | FromGitter | <Quelklef> https://nim-lang.org/docs/backends.html ? |
| 04:16:12 | FromGitter | <gogolxdong> not detailed enough |
| 04:16:27 | * | vlad1777d quit (Ping timeout: 240 seconds) |
| 04:17:35 | FromGitter | <gogolxdong> Quoted from Araq ⏎ 'importcpp' doesn't mean "import from C++" (sorry!) ⏎ it means "import from the target environment as a method or pattern" ⏎ importcpp: "name" ⏎ is a shortcut for ... [https://gitter.im/nim-lang/Nim?at=5a4864df68d092bb6209224c] |
| 04:19:22 | FromGitter | <gogolxdong> Specifically if I want to use gapi object of Google Compute Engine javascript SDK in karax , how do I do? |
| 04:21:02 | * | tefter joined #nim |
| 04:21:26 | FromGitter | <gogolxdong> I found I had never understood where `importc` or `importcpp` import from. |
| 04:41:14 | * | dddddd quit (Remote host closed the connection) |
| 05:10:15 | * | endragor joined #nim |
| 05:24:17 | * | dandevelo joined #nim |
| 05:37:33 | * | dandevelo quit (Ping timeout: 264 seconds) |
| 05:56:12 | * | endragor quit (Remote host closed the connection) |
| 05:59:13 | * | endragor joined #nim |
| 06:13:22 | FromGitter | <Varriount> @gogolxdong Well, how would you use the object in JavaScript? |
| 06:14:53 | * | xkapastel quit (Quit: Connection closed for inactivity) |
| 06:48:30 | * | sz0 joined #nim |
| 06:51:38 | * | yglukhov joined #nim |
| 07:07:01 | * | yglukhov quit (Remote host closed the connection) |
| 07:34:04 | * | dandevelo joined #nim |
| 07:38:27 | * | dandevelo quit (Ping timeout: 240 seconds) |
| 07:44:09 | * | miran joined #nim |
| 07:47:36 | * | Vladar joined #nim |
| 08:23:10 | * | marenz__ joined #nim |
| 08:32:50 | FromGitter | <gogolxdong> I just don't know how in karax. |
| 08:53:12 | * | claudiuinberlin joined #nim |
| 09:02:37 | * | gmpreussner quit (Ping timeout: 256 seconds) |
| 09:05:44 | * | gmpreussner joined #nim |
| 09:15:05 | * | Yardanico[Phone] quit (Ping timeout: 256 seconds) |
| 09:16:07 | * | Yardanico[Phone] joined #nim |
| 09:34:16 | FromGitter | <alehander42> @gogolxdong the whole point of import pragmas is to tell Nim about an existing function/variable |
| 09:35:45 | FromGitter | <alehander42> e.g. you have `__dirname` and you want to somehow access it in Nim |
| 09:36:24 | FromGitter | <alehander42> you can write ⏎ ⏎ ```dirname* {. importcpp: "__dirname" .}: cstring``` ⏎ ⏎ and now the language knows how to compile this name (to `__dirname`) and what its type is (you dont need to cast) [https://gitter.im/nim-lang/Nim?at=5a48af9884fb74b9401ffef8] |
| 09:37:42 | FromGitter | <alehander42> I have no idea why is it called `importcpp` tho, @Araq ? I also thought it's for `import c++` in the beginning, but it's more like `importc_pattern` or something |
| 09:52:17 | * | gokr joined #nim |
| 10:00:32 | * | endragor quit (Remote host closed the connection) |
| 10:01:35 | * | rauss quit (Read error: Connection reset by peer) |
| 10:02:46 | * | rauss joined #nim |
| 10:04:54 | * | MJCaley joined #nim |
| 10:08:42 | FromGitter | <gogolxdong> @alehander42 Do I use `var gapi {. importcpp:"gapi".}` in Google Compute Engine javascript SDK case? |
| 10:15:05 | * | MJCaley quit (Quit: MJCaley) |
| 10:23:02 | FromGitter | <gogolxdong> ```code paste, see link``` ⏎ ⏎ Do I user `proc authorization() :JsObject {. importcpp .}` [https://gitter.im/nim-lang/Nim?at=5a48ba850163b0281097c2ec] |
| 10:32:40 | * | nsf joined #nim |
| 10:47:47 | * | Ven`` joined #nim |
| 10:47:49 | * | Ven`` quit (Client Quit) |
| 10:58:14 | dom96 | gogolxdong: look into how other JS wrappers are made |
| 10:59:02 | dom96 | Example: https://github.com/stisa/jswebsockets/blob/master/src/jswebsockets.nim |
| 11:01:03 | * | endragor joined #nim |
| 11:06:03 | * | Ven`` joined #nim |
| 11:08:13 | * | yglukhov joined #nim |
| 11:09:22 | * | endragor quit (Ping timeout: 272 seconds) |
| 11:12:57 | * | yglukhov quit (Ping timeout: 264 seconds) |
| 11:27:40 | * | endragor joined #nim |
| 11:27:47 | * | dddddd joined #nim |
| 11:47:02 | * | yglukhov joined #nim |
| 11:50:23 | * | scriptum quit (Quit: Leaving) |
| 11:51:27 | * | yglukhov quit (Ping timeout: 240 seconds) |
| 11:54:25 | * | endragor quit (Remote host closed the connection) |
| 12:01:50 | * | Trustable joined #nim |
| 12:09:52 | * | vlad1777d joined #nim |
| 12:17:39 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 12:18:22 | * | natrys joined #nim |
| 12:29:53 | * | nsf quit (Quit: WeeChat 2.0.1) |
| 12:30:41 | * | endragor joined #nim |
| 12:51:01 | * | themagician joined #nim |
| 12:55:08 | dom96 | Nim's C++ wrapping capabilities sure are awesome |
| 13:02:56 | dom96 | https://stackoverflow.com/a/48042694/492186 :D |
| 13:07:31 | * | dandevelo joined #nim |
| 13:12:26 | * | lastjedi joined #nim |
| 13:12:27 | * | dandevelo quit (Ping timeout: 240 seconds) |
| 13:19:34 | * | lastjedi quit (Remote host closed the connection) |
| 13:19:54 | * | profkitkat joined #nim |
| 13:25:46 | * | Ven`` joined #nim |
| 13:33:40 | * | Yardanico joined #nim |
| 13:43:53 | Yardanico | dom96, merge this? https://github.com/nim-lang/Nim/pull/7005 |
| 13:55:23 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 13:57:45 | * | Amrykid2 quit (Quit: Goodbye!) |
| 14:00:37 | Araq | alehander42: historical accident |
| 14:05:54 | * | endragor quit (Remote host closed the connection) |
| 14:19:42 | * | deathstar joined #nim |
| 14:22:31 | * | profkitkat quit (Ping timeout: 260 seconds) |
| 14:23:27 | * | Ven`` joined #nim |
| 14:35:33 | Yardanico | ohh it's so satisfying to see nim compiler bootstrapping itself on 16-core machine |
| 14:37:27 | * | gokr quit (Ping timeout: 268 seconds) |
| 14:41:07 | * | endragor joined #nim |
| 14:44:17 | * | xet7 quit (Quit: Leaving) |
| 14:53:18 | dom96 | So what's everyone's new year plan? |
| 14:54:54 | * | endragor quit (Remote host closed the connection) |
| 14:55:30 | * | Trustable quit (Remote host closed the connection) |
| 14:58:26 | * | yglukhov joined #nim |
| 15:00:26 | * | MJCaley joined #nim |
| 15:02:06 | FromGitter | <data-man> To Learn Nim :-) |
| 15:02:27 | * | yglukhov quit (Ping timeout: 240 seconds) |
| 15:07:29 | FromGitter | <Varriount> To learn German. |
| 15:10:02 | * | dandevelo joined #nim |
| 15:11:32 | * | MJCaley quit (Quit: MJCaley) |
| 15:15:13 | * | dandevelo quit (Ping timeout: 248 seconds) |
| 15:23:43 | * | yglukhov joined #nim |
| 15:33:56 | * | themagician_n joined #nim |
| 15:35:00 | * | S1tiSchu joined #nim |
| 15:35:27 | * | themagician quit (Ping timeout: 248 seconds) |
| 15:36:00 | * | earenndil quit (Ping timeout: 248 seconds) |
| 15:36:31 | * | gmpreussner quit (Ping timeout: 248 seconds) |
| 15:37:04 | * | bozaloshtsh quit (Ping timeout: 248 seconds) |
| 15:37:04 | * | Xe quit (Ping timeout: 248 seconds) |
| 15:37:35 | * | natrys quit (Ping timeout: 248 seconds) |
| 15:37:36 | * | claudiuinberlin quit (Ping timeout: 248 seconds) |
| 15:37:36 | * | Vladar quit (Ping timeout: 248 seconds) |
| 15:37:36 | * | S1t1Schu quit (Ping timeout: 248 seconds) |
| 15:37:36 | * | onionhammer1 quit (Ping timeout: 248 seconds) |
| 15:37:36 | * | MonsterAbyss quit (Ping timeout: 248 seconds) |
| 15:38:01 | * | onionhammer1 joined #nim |
| 15:39:27 | * | ldlework quit (Ping timeout: 240 seconds) |
| 15:39:36 | * | endragor joined #nim |
| 15:39:50 | * | endragor quit (Remote host closed the connection) |
| 15:41:16 | * | surma quit (Ping timeout: 260 seconds) |
| 15:42:30 | * | ldlework joined #nim |
| 15:42:59 | * | gmpreussner joined #nim |
| 15:43:13 | * | bozaloshtsh joined #nim |
| 15:43:13 | * | bozaloshtsh quit (Changing host) |
| 15:43:13 | * | bozaloshtsh joined #nim |
| 15:43:14 | * | MonsterAbyss joined #nim |
| 15:43:50 | * | Xe joined #nim |
| 15:46:15 | * | yglukhov quit (Remote host closed the connection) |
| 15:49:44 | * | natrys joined #nim |
| 15:50:58 | * | MJCaley joined #nim |
| 15:53:22 | * | Vladar joined #nim |
| 15:57:36 | FromGitter | <RedBeard0531> Dom96 out of curiosity, what are you building with your libclang/nim mashup? |
| 16:04:40 | * | vlad1777d quit (Remote host closed the connection) |
| 16:07:26 | * | MJCaley quit (Quit: MJCaley) |
| 16:09:19 | * | endragor joined #nim |
| 16:10:07 | dom96 | RedBeard0531: An obfuscator for Uni. |
| 16:12:35 | FromGitter | <RedBeard0531> Ahh, I was hoping it would be something to do with indexing or searching C++ codebases, since I've been meaning to build that for a while for work |
| 16:13:18 | * | endragor quit (Remote host closed the connection) |
| 16:14:15 | FromGitter | <RedBeard0531> Any chance anyone has a nim heterogeneous hash table? Specifically I'd like to store keys as strings, but support lookup by cstring without having to allocate a new string. |
| 16:15:09 | FromGitter | <Quelklef> write a second `[]` proc? |
| 16:16:05 | FromGitter | <Quelklef> `\`[]\`string, V (table: Table[string, V], key: string) = <loop thru keys and check if eq to \`key\` then return> ` |
| 16:16:54 | FromGitter | <RedBeard0531> The point of a hash table is O(1) lookup. Making it O(N) won't be faster than allocating a string. |
| 16:17:05 | FromGitter | <Quelklef> oh, shoot, that's right |
| 16:17:06 | FromGitter | <Quelklef> hold on |
| 16:25:36 | FromGitter | <RedBeard0531> The table has 5-10,000 entries and I think I'm shooting for ~1 million lookups with a time budget of about 100ms. If I'm reading the profiles right, I think I can hit that except for the time spent allocating and GCing all the temporary strings that get created. |
| 16:33:33 | * | earenndil joined #nim |
| 16:34:10 | FromGitter | <Quelklef> im in the Table implementation seeing if i can write a proc for this |
| 16:34:30 | FromGitter | <Quelklef> but there'd need to a a cstring hasher which guarantees the same key as the corresponding string for each input |
| 16:34:49 | FromGitter | <Quelklef> which maybe is by default how it works. I doubt it, but |
| 16:35:48 | FromGitter | <RedBeard0531> actually, it is https://github.com/nim-lang/Nim/blob/master/lib/pure/hashes.nim#L131-L150 |
| 16:40:17 | * | dandevelo joined #nim |
| 16:41:51 | FromGitter | <alehander42> I just realized I can directly do `[]`(a: varargs[..]) |
| 16:45:14 | * | dandevelo quit (Ping timeout: 276 seconds) |
| 16:48:09 | * | sz0 quit (Quit: Connection closed for inactivity) |
| 16:51:26 | FromGitter | <Quelklef> rather than what |
| 16:51:36 | FromGitter | <Quelklef> also, is there some way to access unexposed parts of a module? |
| 16:54:09 | FromGitter | <RedBeard0531> Quelklef I think I can just make the table keyed by cstring, assuming that strings tagged shallow keep the same cstring pointers when copied and not modified |
| 16:55:26 | FromGitter | <RedBeard0531> The value is an object that includes the key, so that should keep the cstring alive even if it feels a bit unsafe |
| 16:55:42 | FromGitter | <Quelklef> aaaaaaaaaa I'm in the middle of making your solution ;-; |
| 16:55:58 | FromGitter | <Quelklef> Whatever; you can do that and I'll holler when I've finished this alternative |
| 16:58:00 | * | MJCaley joined #nim |
| 17:00:21 | * | onionhammer1 quit (Ping timeout: 264 seconds) |
| 17:00:48 | * | onionhammer1 joined #nim |
| 17:01:13 | FromGitter | <RedBeard0531> Publish it on nimble! It is a super useful widget. We use something similar all the time at work to massive benefit. |
| 17:01:55 | FromGitter | <Quelklef> If I can get it working, lol |
| 17:02:12 | FromGitter | <Quelklef> Never published anything before, though; exciting! |
| 17:03:11 | dom96 | you should be able to just grab a cstring out of a string by doing addr(str[0]) |
| 17:08:44 | FromGitter | <RedBeard0531> Is that address guaranteed to be stable after copying a string if I call shallow on it? |
| 17:10:44 | FromGitter | <Quelklef> I'm not sure if doing it my way is possible. I don't think the tables module exposes enough for it to work : / |
| 17:13:38 | FromGitter | <RedBeard0531> I'm pretty sure it doesn't, which is why I came to ask if anyone had an impl that does support this |
| 17:14:26 | FromGitter | <Quelklef> shame |
| 17:14:54 | FromGitter | <Quelklef> one of the first things I loved about Nim was how you could define all the functionality you needed, wherever you needed |
| 17:15:05 | FromGitter | <Quelklef> procs didn't have to be defined with their respective data typed, like in many OOP langs |
| 17:16:43 | FromGitter | <Quelklef> I can understand allowing access to unexposed stuff would break modules as a black box and allow for really iffy code which won't work when things are updated |
| 17:17:02 | FromGitter | <Quelklef> but it *would* be cool, and useful if contained |
| 17:27:02 | FromGitter | <RedBeard0531> Quelklef: I'm not sure if this is officially sanctioned, but you can include tableimpl to get a head start like the stdlib: https://github.com/nim-lang/Nim/blob/master/lib/pure/collections/tables.nim#L119. Alternatively you could do something like including tables.nim in a helper module to get access to the internals. That feels kinda dirty though... |
| 17:27:02 | * | Yardanico[Phone] quit (Ping timeout: 268 seconds) |
| 17:28:08 | * | deathstar quit (Ping timeout: 252 seconds) |
| 17:34:55 | FromGitter | <Quelklef> Oh, is that what include does? |
| 17:35:03 | FromGitter | <Quelklef> I guess my whole lil rant there is dumb then |
| 17:35:14 | FromGitter | <Quelklef> I think that'd be the best way to do it actually |
| 17:35:18 | FromGitter | <Quelklef> I'll try again later |
| 17:38:16 | Yardanico | include just includes another nim file :) |
| 17:40:21 | * | surma joined #nim |
| 17:41:27 | * | endragor joined #nim |
| 17:48:08 | * | profkitkat joined #nim |
| 17:56:46 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 18:02:03 | * | yglukhov joined #nim |
| 18:06:57 | * | yglukhov quit (Ping timeout: 264 seconds) |
| 18:09:08 | * | vlad1777d joined #nim |
| 18:17:57 | * | craigger quit (Ping timeout: 256 seconds) |
| 18:20:11 | * | craigger joined #nim |
| 18:26:45 | * | Ven`` joined #nim |
| 18:27:17 | * | yglukhov joined #nim |
| 18:28:57 | * | dandevelo joined #nim |
| 18:32:27 | * | miran quit (Quit: Konversation terminated!) |
| 18:34:15 | * | dandevelo quit (Ping timeout: 268 seconds) |
| 18:37:29 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 18:40:26 | * | MJCaley quit (Quit: MJCaley) |
| 18:58:27 | * | profkitkat quit (Ping timeout: 240 seconds) |
| 18:58:33 | * | Ven`` joined #nim |
| 19:04:07 | * | MJCaley joined #nim |
| 19:09:23 | * | Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 19:12:33 | * | endragor quit (Remote host closed the connection) |
| 19:14:14 | * | endragor joined #nim |
| 19:17:25 | * | vlad1777d quit (Ping timeout: 268 seconds) |
| 19:17:32 | * | endragor quit (Remote host closed the connection) |
| 19:28:15 | FromGitter | <RedBeard0531> Well I changed the table to use cstring keys. It feels a bit dirty, but it shaved 30% off total program runtime so its probably worth it. |
| 19:56:05 | * | user0 quit (Quit: user0) |
| 19:58:45 | * | user0 joined #nim |
| 20:06:57 | * | BitPuffin|osx quit (Ping timeout: 264 seconds) |
| 20:11:54 | * | azur_kind joined #nim |
| 20:19:10 | * | yglukhov quit (Remote host closed the connection) |
| 20:21:11 | * | craigger quit (Ping timeout: 240 seconds) |
| 20:23:32 | * | vlad1777d joined #nim |
| 20:31:57 | * | vlad1777d quit (Ping timeout: 240 seconds) |
| 20:37:29 | Yardanico | happy new year everyone (23 minutes left!). where does nim search for dll's? |
| 20:37:41 | Yardanico | I have librouter.dll in the same directory as my .exe |
| 20:37:45 | Yardanico | and it can't load it |
| 20:37:57 | Yardanico | could not load: librouter.dll |
| 20:42:34 | * | Yardanico[Phone] joined #nim |
| 20:57:18 | * | yglukhov joined #nim |
| 20:57:48 | FromGitter | <Quelklef> : o I still have 8 hours till midnight |
| 20:58:16 | FromGitter | <Quelklef> I thought it worked in same directory |
| 20:58:19 | FromGitter | <Quelklef> try recompiling |
| 20:58:42 | FromGitter | <Quelklef> lib/nimrtl.dll is in the same dir as lib/nimrtl.nim |
| 20:58:44 | FromGitter | <Quelklef> so dik |
| 21:05:31 | Yardanico[Phone] | Happy New year everyone! |
| 21:11:33 | * | MJCaley quit (Quit: MJCaley) |
| 21:16:38 | * | MJCaley joined #nim |
| 21:20:45 | * | xet7 joined #nim |
| 21:39:08 | Yardanico | hmm, really strange |
| 21:39:15 | Yardanico | still doesn't work :) |
| 21:42:46 | dom96 | Still a little over 2 hours here |
| 21:42:56 | dom96 | new year's on IRC sure is fun heh |
| 21:51:38 | Yardanico | AHH |
| 21:51:39 | Yardanico | I forgot! |
| 21:51:49 | Yardanico | usually dlls depend on other dlls |
| 21:52:55 | * | arecacea1 quit (Remote host closed the connection) |
| 21:53:14 | * | arecacea1 joined #nim |
| 21:53:27 | Yardanico | hmm, that didn't help |
| 21:54:35 | dom96 | use dependency walker |
| 21:54:44 | dom96 | make sure the DLL is the correct arch |
| 21:55:53 | Yardanico | dom96, AAHHH! |
| 21:56:02 | Yardanico | nim compiles for x64 by default for x64 bit gcc |
| 21:58:54 | dom96 | it'd be nice to get some more detailed errors for this |
| 21:59:05 | dom96 | surely we can write a little procedure that detects the arch of a dll |
| 21:59:28 | * | yglukhov quit (Remote host closed the connection) |
| 22:00:33 | Yardanico | dom96, well on windows you can use GetLastError() to get the error code |
| 22:03:25 | * | yglukhov joined #nim |
| 22:03:56 | * | yglukhov quit (Remote host closed the connection) |
| 22:08:09 | * | yglukhov joined #nim |
| 22:11:00 | Yardanico | I'm just writing a wrapper to library written in pascal :D |
| 22:15:19 | dom96 | there is a pas2nim as well in case that helps :) |
| 22:15:23 | * | demi- joined #nim |
| 22:15:57 | * | yglukhov quit (Remote host closed the connection) |
| 22:18:15 | Yardanico | dom96, well it was very easy to translate pascal header file to nim file :) |
| 22:18:18 | Yardanico | *wrapper file |
| 22:23:52 | * | azur_kind quit (Ping timeout: 272 seconds) |
| 22:24:08 | * | MJCaley quit (Quit: MJCaley) |
| 22:36:08 | * | Vladar quit (Quit: Leaving) |
| 22:36:46 | * | user0 quit (Remote host closed the connection) |
| 22:37:09 | * | user0 joined #nim |
| 22:40:10 | Yardanico | hmm, can I write a proc which accepts any pointer type? |
| 22:40:18 | Yardanico | and how do I, for example, pass cstring to it? |
| 22:42:40 | dom96 | `pointer` |
| 22:43:26 | * | nsf joined #nim |
| 22:47:33 | Yardanico | dom96, thanks! |
| 22:49:32 | * | nsf quit (Quit: WeeChat 2.0.1) |
| 22:55:54 | Yardanico | Is there a way to convert array[15, char] to string ? :) |
| 22:56:51 | * | Jesin quit (Quit: Leaving) |
| 22:59:10 | Yardanico | ah |
| 22:59:14 | Yardanico | it's $cstring(unsafeAddr arr) |
| 23:00:27 | FromGitter | <RedBeard0531> Yardanico that only works if arr is null-terminated |
| 23:01:01 | Yardanico | RedBeard0531: it is null-terminated in my case, so that's OK |
| 23:01:09 | Yardanico | (well it's windows wide string actually) |
| 23:01:11 | Yardanico | but it works |
| 23:02:33 | Yardanico | well it doesn't really work :D |
| 23:03:34 | Yardanico | array contains this |
| 23:03:34 | Yardanico | ['\xFF', '\xFF', '\xFF', 'R', 'o', 'u', 't', 'e', 'r', 'S', 'c', 'a', 'n', '\x00', '\x00'] |
| 23:03:51 | Yardanico | (after calling procedure from a dll) |
| 23:08:37 | FromGitter | <RedBeard0531> This is probably not the best time to ask, but lets see. What is the nimmiest way to associate a proc with a type? Specifically, I want to create something like IndexedSet[T, KeyFunc] that stores a T but supports lookup as-if by KeyFunc(T). For example `proc keyFunc(o: MyRefObj): cstring = o.stringField.cstring`. Then all the lookup functions on IndexedSet[T] would take a cstring and return MyRefObj. I don't want |
| 23:08:37 | FromGitter | ... to just use a mixin proc (like hash for Table) because you may want to index a single type by multiple fields. |
| 23:12:48 | dom96 | Hrm, I'm not 100% sure what you're looking for. |
| 23:15:41 | FromGitter | <RedBeard0531> How should IndexedSet let consumers specify the KeyFunc? |
| 23:17:03 | * | xet7 quit (Quit: Leaving) |
| 23:17:41 | dom96 | You could use whatever `keyFunc` is available for T |
| 23:17:55 | dom96 | or store a keyFunc inside the IndexedSet object |
| 23:17:57 | FromGitter | <RedBeard0531> @Yardanico What do you want the string to be? '\xFF' isn't a valid utf8 char and that string doesn't look like utf16/ucs2 |
| 23:20:22 | * | onionhammer1 is now known as onionhammer |
| 23:22:07 | FromGitter | <RedBeard0531> @dom96 both of those have downsides. 1 can only support a single keyFunc per T (I think) and 2 requires a runtime call through a function pointer (I think). Given the choice, I think 1 is better, but I was hoping there would be a solution without either downsided |
| 23:22:41 | dom96 | how many keyFuncs do you want to support per T? |
| 23:25:33 | FromGitter | <RedBeard0531> Up to consumer. Consider something like `type Person = ref object[email, phoneNumber: string]`. You may want separate IndexedSet[Person] objects for both email and phone number that hold the same people. |
| 23:28:04 | FromGitter | <jaccarmac> But you want the types of those separate sets to be the same? |
| 23:28:39 | FromGitter | <RedBeard0531> But maybe I'm just overcomplicating it. For now I only need a single keyFunc. I'm trying to replace fs here since for every entry the key is value.name, and I often want to do lookups by cstrings: https://github.com/RedBeard0531/nimja/blob/master/nimja.nim#L26-L40 (this is what I was asking about earlier) |
| 23:29:45 | FromGitter | <RedBeard0531> @jaccarmac They don't need to be. I assumed it would be more efficient if they are separate types, but I'd be happy to be proven wrong. |
| 23:30:42 | FromGitter | <RedBeard0531> They should both have the same element type though: Person. They may but are not required to have the same virtual key type. |
| 23:32:00 | FromGitter | <jaccarmac> Seems to me the constructor could just take the key function then. |
| 23:32:41 | FromGitter | <jaccarmac> If you want to make the set generic over the function there will need to be some wizardry since functions can't fill type parameters. |
| 23:34:27 | Araq | happy new year! |
| 23:35:54 | FromGitter | <RedBeard0531> Are you in a half hour timezone? ☺ |
| 23:36:15 | Araq | no, I'm late |
| 23:36:54 | Araq | my neighbor set my garden on fire, had to watch |
| 23:37:57 | Araq | do we have a wrapper for unsqlite? |
| 23:47:14 | * | user0 quit (Quit: user0) |
| 23:49:20 | dom96 | lol what |