freenode/#shirakumo - IRC Chatlog
Search
11:21:56
Shinmera
In the flowchart library you have nodes that represent the basic building blocks. Each node can have several ports, over which it can be connected to other nodes.
11:22:34
Shinmera
Now, what ports a node has and what kind of attributes a port has seems to very clearly be part of a definition, meaning the ports would be defined along with the class definition.
11:22:46
Shinmera
However, the port's value (the connections it has) very clearly are an instance thing.
11:23:10
Shinmera
This together lead me to the idea of modelling ports as slots of a particular class.
11:23:48
Shinmera
More concretely put, you'd do something like (defclass condition () ((in :port-type n-port) (true :port-type 1-port) (false :port-type 1-port))
11:24:21
Shinmera
Meaning you define a "condition" node with an "in" port that allows arbitrarily many connections, and "true" and "false" ports which each can have only one.
11:25:10
Shinmera
I'd like to be able to do something like (connect (port node 'foo) (port other-node 'bar)) or pass around nodes and look at them on their own
11:25:27
Shinmera
However, in order to be able to do that, the port would have to have knowledge of the particular instance it's "coming from".
11:25:46
Shinmera
Slots on the other hand are very clearly tied to the class, so I can't use them for that.
11:26:41
Shinmera
1. Require most port access functions to also include the node instance the port is in relation to
11:27:33
Shinmera
2. Materialise the ports as shim instances upon instante initialisation, meaning you have a separate "port" class entirely that gets automatically instantiated when a node class is instantiated.
11:28:20
Shinmera
Now, 1. is not really appealing because it means you need to keep track of two objects a lot of times and need to call with seemingly irrelevant information too
11:29:19
Shinmera
2. is not really appealing either because you either make the "port" a shim and have the actual values still exist as a slot and thus duplicate information, or you make the port instance keep the value as well, getting rid of the slots again, creating an entirely separate, but mostly analogous, slots system entirely
11:47:32
Shinmera
What if I keep the slots, but the slots are populated with the port instances, which then hold the value.
11:52:12
mood_btf
Yup, version 3 seems most sensible. Though I don't really understand what you were thinking with #2, since you'll always need to store the port instances somewhere
11:58:29
Shinmera
Hrm, making this all work with class redefinition and reinitialisation is going to be a bit tricky
11:58:57
Shinmera
since you probably want the ports in the slots retain their identity, but change class in accordance with the slot definition's requirements.
12:05:23
Shinmera
"Any slots indicated by slot-names that are still unbound at this point are initialized according to their :initform forms. For any such slot that has an :initform form, that form is evaluated in the lexical environment of its defining defclass form and the result is stored into the slot."
12:05:39
Shinmera
How in the world are you supposed to be able to do that if you're not the implementation?
12:10:28
Shinmera
I mean, I guess you could capture the environment by wrapping the defclass and then use it, but I don't know if doing that is even allowed
12:23:22
gingerale
Is there a preferred syntax for constants made with defconstant? Like how defvar often has *asterisks*
12:24:30
mood_btf
I use +plus+ for things that should be treated as constant, but I normally use defparameter to actually define them
12:24:35
gingerale
I see no other way for defining a CL side of #define BGFX_PCI_ID_NONE UINT16_C(0x0000) //!< Autoselect adapter.
12:25:27
gingerale
But how would someone using this binding know what variable to pass the bgfx_init?
12:26:34
gingerale
The default value of bgfx_init is BGFX_PCI_ID_NONE on C++ API. And I want to make the lisp side bgfx-init function to reflect this.
12:28:23
mood_btf
Shinmera: As for that "...evaluated in the lexical environment...", I think DEFCLASS could do it without implementation-specifics by just wrapping the form in a lambda. couldn't it? Though I'm not sure what kind of access the MOP offers to the initform
12:30:54
Shinmera
There's also slot-definition-initfunction, but the mop is weird on its definition:
12:31:00
Shinmera
"Returns the initialization function of slot. This value is either a function of no arguments, or nil, indicating that the slot has no initialization function. This is the defaulted value of the :initfunction initialization argument that was associated with the slot definition metaobject during initialization."
12:31:19
Shinmera
"Returns the initialization form of slot. This can be any form. This is the defaulted value of the :initform initialization argument that was associated with the slot definition metaobject during initialization. When slot has no initialization form, the value returned is unspecified (however, slot-definition-initfunction is guaranteed to return nil)."
12:31:37
Shinmera
which seems to imply that slot-definition-initfunction does have something to do with initform, contrary to how I parse the initfunction's own definition
13:05:00
Shinmera
the way this is currently done now with port instances sitting in the class slots, which then have a connections' slot
13:05:24
Shinmera
when you use an accessor or slot-value on the node you get the port back rather than the connections inside the port
13:06:35
Shinmera
But that would have to distinguish whether I want the port or the port's connections.
14:31:25
gingerale
Alright, looks like the issue was with the renderer type. If I switch from opengl to noop it works fine.
14:42:08
Shinmera
Well, probably because context creation is highly platform dependent and pretty much forces you to use a library to do it for you
15:14:56
Shinmera
if it expects the struct by value then, yeah, you need (:struct foo) and cffi-libffi.
15:19:25
gingerale
It looked like something I could learn CFFI with and I want to get it to actually work so I can forget about it.
15:20:36
Shinmera
If you're looking for GUI stuff, https://github.com/vurtun/nuklear might have been another possibility.
15:20:37
Colleen
https://github.com/vurtun/n... Website (HTML), Title: GitHub - vurtun/nuklear: A single-header ANSI C gui library
15:20:39
gingerale
By the way, how do I define a struct field to be a function? Thus far I've just set it as :pointer but I'm not sure if that's correct.
15:30:37
gingerale
By the way, how do I go back and forth a to a word break? Like how ctrl + left/right usually works
15:34:08
mood
C-M-f and C-M-b for moving back and forth between s-expressions, which is also very useful
15:34:57
mood
Heh, I always configure window managers not to use the alt key, because so many applications use it instead
16:25:43
Shinmera
mood: I can't reach the super key without breaking my fingers, so alt is the only way to go
16:37:07
Shinmera
I'm on a deadline after all; need to get this, the sound system, and the Radiance cleanup done within three weeks.
16:47:49
Shinmera
because here's the thing: the gods want you to get to work on my software projects right away
16:52:20
Shinmera
Actually instead of fucking around here you could add some more features to Maiden's silly module.
17:34:03
darthmatch
shinmera: i pushed the missing changes. however I had no compilations problems with my previous commit so please double check that it works now
17:50:18
Shinmera
I've been confused about the proper naming of a Qt method a couple times in the past. I always extracted it myself from the *qmethods* internal storage, like a dumbass.