Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

30
LINES

< > BotCompany Repo | #1035367 // EphemeralObjectIDs - gives objects a temporary ID to reference them (using a weak reference)

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (10231L/57K).

1  
// ID 0 represents a null reference
2  
// From there we count upwards. IDs are not reused when an object is GCed
3  
sclass EphemeralObjectIDs {
4  
  long idCounter;
5  
  new WeakValueMap<Long, O> idToObject;
6  
  Map<O, Long> objectToID = weakIdentityMap();
7  
  
8  
  selfType runnablesReferenceQueue(RunnablesReferenceQueue queue)  {
9  
    idToObject.queue(queue);
10  
    this;
11  
  }
12  
  
13  
  synchronized long remember(O o) {
14  
    if (o == null) ret 0;
15  
    try object objectToID.get(o);
16  
    long id = ++idCounter;
17  
    idToObject.put(id, o);
18  
    objectToID.put(o, id);
19  
    ret id;
20  
  }
21  
  
22  
  synchronized O get(long id) {
23  
    if (id == 0) null;
24  
    ret idToObject.get(id);
25  
  }
26  
  
27  
  synchronized bool wasGarbageCollected(long id) {
28  
    ret id > 0 && id <= idCounter && get(id) == null;
29  
  }
30  
}

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: 69 / 130
Version history: 4 change(s)
Referenced in: [show references]