package com.l7tech.server.util;

import java.util.concurrent.atomic.AtomicInteger;

public abstract class AbstractReferenceCounted<HT extends Handle> extends AbstractCloseable implements ReferenceCounted {
   private final AtomicInteger b = new AtomicInteger(0);

   protected abstract HT createHandle();

   public HT ref() {
      this.b.incrementAndGet();
      return this.createHandle();
   }

   @Override
   public void unref() {
      int var1 = this.b.decrementAndGet();
      if (var1 <= 0) {
         this.close();
      }
   }
}
