Libraryless. Click here for Pure Java version (10231L/57K).
// ID 0 represents a null reference // From there we count upwards. IDs are not reused when an object is GCed sclass EphemeralObjectIDs { long idCounter; new WeakValueMap<Long, O> idToObject; Map<O, Long> objectToID = weakIdentityMap(); selfType runnablesReferenceQueue(RunnablesReferenceQueue queue) { idToObject.queue(queue); this; } synchronized long remember(O o) { if (o == null) ret 0; try object objectToID.get(o); long id = ++idCounter; idToObject.put(id, o); objectToID.put(o, id); ret id; } synchronized O get(long id) { if (id == 0) null; ret idToObject.get(id); } synchronized bool wasGarbageCollected(long id) { ret id > 0 && id <= idCounter && get(id) == null; } }
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): ekrmjmnbrukm, mowyntqkapby, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1035367 |
| Snippet name: | EphemeralObjectIDs - gives objects a temporary ID to reference them (using a weak reference) |
| Eternal ID of this version: | #1035367/5 |
| Text MD5: | 6d1359e692c0b15d83888401622da04a |
| Transpilation MD5: | d456038002644810c653d74f877bd2b0 |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2022-05-02 18:20:18 |
| Source code size: | 786 bytes / 30 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 616 / 733 |
| Version history: | 4 change(s) |
| Referenced in: | [show references] |