Libraryless. Click here for Pure Java version (4294L/25K).
1 | sclass RegisteredReference<A> implements IRef<A> {
|
2 | Meta owner; // all we require is a meta field |
3 | A value; |
4 | |
5 | *() {
|
6 | //if (!dynamicObjectIsLoading()) registerRef(); |
7 | } |
8 | |
9 | /*void registerRef {
|
10 | vmBus_send registeringReference(this); |
11 | }*/ |
12 | |
13 | // Note that the single-argument constructor takes an owner, not a value |
14 | *(Meta owner) {
|
15 | this(owner, null); |
16 | } |
17 | |
18 | *(Meta *owner, A *value) {
|
19 | index(); |
20 | //registerRef(); |
21 | } |
22 | |
23 | // get owning object (source) |
24 | Meta owner() { ret owner; }
|
25 | |
26 | // get target |
27 | public A get() { ret value; }
|
28 | public bool has() { ret value != null; }
|
29 | |
30 | public bool set_trueIfChanged(A a) {
|
31 | if (eq(a, value)) false; |
32 | unindex(); |
33 | value = a; |
34 | index(); |
35 | true; |
36 | } |
37 | |
38 | public void set(A a) {
|
39 | set_trueIfChanged(a); |
40 | } |
41 | |
42 | void setIfEmpty(A a) {
|
43 | if (!has()) set(a); |
44 | } |
45 | |
46 | public void set(IRef<A> ref) { set(ref == null ?: ref.get()); }
|
47 | public void clear() { set((A) null); }
|
48 | |
49 | // can override |
50 | bool validRef() { true; }
|
51 | |
52 | // TODO: sync all the indexing and unindexing!? |
53 | void index() {
|
54 | if (!validRef()) ret; |
55 | var br = lookupInterface IHasBackRefs(get()); |
56 | br?._registerBackRef(this); |
57 | } |
58 | |
59 | void unindex() {
|
60 | if (!validRef()) ret; |
61 | var br = lookupInterface IHasBackRefs(get()); |
62 | br?._unregisterBackRef(this); |
63 | } |
64 | |
65 | // not used yet |
66 | void change {}
|
67 | |
68 | toString {
|
69 | ret |
70 | ifdef RegisteredReference_markInToString |
71 | "RegisteringReference " + |
72 | endifdef |
73 | str(value); |
74 | } |
75 | } |
download show line numbers debug dex old transpilations
Travelled to 5 computer(s): bhatertpkbcr, ekrmjmnbrukm, mowyntqkapby, mqqgnosmbjvj, pyentgdyhuwx
No comments. add comment
| Snippet ID: | #1031954 |
| Snippet name: | RegisteredReference - Refs (like Concept.Ref) for (almost) any object as owner/value [dev.] |
| Eternal ID of this version: | #1031954/17 |
| Text MD5: | ba1be4d57202e63055fe8fb423a85d52 |
| Transpilation MD5: | c23e7fcdd0a287c028ae9594b468ab03 |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2021-10-06 07:11:56 |
| Source code size: | 1575 bytes / 75 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 433 / 913 |
| Version history: | 16 change(s) |
| Referenced in: | [show references] |