/** * Add a new key-id pair. * * @param key is the key for which an id is required * @return the new id or 0 if the key is already mapped or the operation fails */ public int addPair(long key) { if (validKey(key) || (ids.firstOut() == 0)) return 0; int id = ids.firstOut(); if (!ht.insert(key, id)) return 0; ids.swap(id); cnt++; return id; }
/** * Remove a pair from the mapping. This operation removes a (key,id) pair from the mapping. * * @param key is the key whose id is to be released */ public void dropPair(long key) { int id = ht.lookup(key); if (id == 0) return; ht.remove(key); ids.swap(id); cnt--; }
/** * Add a new key-id pair. * * @param key is the key for which an id is required * @param id is the requested id that the key is to be mapped to * @return the new id or 0 if the key is already mapped or the id is already in use or the * operation fails */ public int addPair(long key, int id) { if (validKey(key) || validId(id)) return 0; if (!ht.insert(key, id)) return 0; ids.swap(id); cnt++; return id; }
/** * Determine if a given identifier has been assigned to a key. * * @param id is the identifier to be checked * @return true if the key has been mapped, else false */ public boolean validId(int id) { return (1 <= id && id <= n && ids.isIn(id)); }
/** * Get the next assigned identifier, in some arbitrary order. * * @param id is an identifer in the set * @return number of the next identfier */ public int nextId(int id) { return ids.nextIn(id); }
/** * Get the last assigned identifier, in some arbitrary order. * * @return number of the last identfier */ public int lastId() { return ids.lastIn(); }
/** * Get the first assigned identifier, in some arbitrary order. * * @return number of the first identfier */ public int firstId() { return ids.firstIn(); }
/** Clear the IdMap. */ public void clear() { for (int i = firstId(); i != 0; i = firstId()) ids.swap(i); }