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

41
LINES

< > BotCompany Repo | #1032349 // Borrowable

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

Libraryless. Click here for Pure Java version (4439L/24K).

sclass Borrowable<A> implements AutoCloseable {
  A object;
  bool borrowed;
  
  *(A *object) {}
  *() {}

  synchronized void set(A object) {
    this.object = object;
    borrowed = false;
  }
  
  synchronized bool canBorrow() { ret object != null && !borrowed; }
  
  synchronized bool isBorrowed() { ret borrowed; }
  
  // returns null if object is borrowed
  synchronized IAutoCloseableF0<A> tempBorrow() {
    bool canBorrow = canBorrow();
    A o = canBorrow ? object : null;
    if (canBorrow) borrowed = true;
    
    ret new IAutoCloseableF0<A> {
      public A get() { ret o; }
      public void close { unborrow(o); }
    };
  }
  
  synchronized void unborrow(A o) {
    if (o == object) borrowed = false;
  }
  
  public void close() {
    O o;
    synchronized(this) {
      o = object;
      object = null;
    }
    dispose o;
  }
}

download  show line numbers  debug dex  old transpilations   

Travelled to 4 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj, pyentgdyhuwx

No comments. add comment

Snippet ID: #1032349
Snippet name: Borrowable
Eternal ID of this version: #1032349/7
Text MD5: c810dce629b89e498390413454488c3e
Transpilation MD5: 9206b2856386b3c3cae79e977809eb9d
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-08-30 04:26:43
Source code size: 893 bytes / 41 lines
Pitched / IR pitched: No / No
Views / Downloads: 106 / 223
Version history: 6 change(s)
Referenced in: [show references]