package love.distributedrebirth.bassboonyd; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; @BãßBȍőnAuthorInfoʸᴰ(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天") public interface BãßBȍőnCoffinOpenʸᴰ extends BãßBȍőnCoffinʸᴰ { void LOCK_COFFIN(); Object PUT_OBJ(T key, Object value); default void PUT_MAP(T key) { PUT_OBJ(key, new HashMap<>()); } default void PUT_LIST(T key) { PUT_OBJ(key, new ArrayList<>()); } static void lockCoffin(DefaultEnumBaseʸᴰ store, Consumer logHandler) { logHandler.accept("Lock: "+store.BãßClassNaam()+" since: "+store.BãßAuthorCopyright()); for (Object o:store.BãßInstances()) { BãßBȍőnCoffinStoreʸᴰ coffin = BãßBȍőnCoffinStoreʸᴰ.class.cast(o); BãßBȍőnCoffinOpenʸᴰ coffinOpen = BãßBȍőnCoffinOpenʸᴰ.class.cast(coffin.GET_BBC()); coffinOpen.LOCK_COFFIN(); } } static class BãßBȍőnFamilyGrave implements BãßBȍőnCoffinGhostʸᴰ { final Map ghosts = new HashMap<>(); volatile boolean deathLock = false; public void LOCK_GHOST() { deathLock = true; } @Override public Object PUT_GHOST(String key, Object value) { if (deathLock) { throw new IllegalStateException("Can't restore body of family ghost."); } return ghosts.put(key, value); } @Override public Object GHOST_OBJ(String key) { return ghosts.get(key); } } static BãßBȍőnCoffinOpenʸᴰ newInstance() { return new BãßBȍőnCoffinOpenʸᴰ() { final Map initMap = new HashMap<>(); final Map,BãßBȍőnFamilyGrave> familyGrave = new HashMap<>(); volatile boolean deathLock = false; @Override public void LOCK_COFFIN() { deathLock = true; for (BãßBȍőnFamilyGrave grave:familyGrave.values()) { grave.LOCK_GHOST(); } } @Override public Object GET_OBJ(Y key) { return initMap.get(key); } @Override public Object PUT_OBJ(Y key, Object value) { if (deathLock) { throw new IllegalStateException("Can't cheat death in closed coffin."); } return initMap.put(key, value); } @Override public BãßBȍőnCoffinGhostʸᴰ UNHOLY(Class familyName) { BãßBȍőnFamilyGrave familyGhosts = familyGrave.get(familyName); if (familyGhosts == null) { familyGhosts = new BãßBȍőnFamilyGrave(); familyGrave.put(familyName, familyGhosts); } return familyGhosts; } }; } }