final void updateRecord(Version shared, Session session, byte[] uid, long currentRecord, long newRecord, int id) { if (Debug.ENABLED) Debug.assertion(newRecord != currentRecord); int index = _updatedVersions.add(shared); if (index == _updatedVersionsRecords.length) _updatedVersionsRecords = Utils.extend(_updatedVersionsRecords); _updatedVersionsRecords[index] = newRecord; // Sessions int sessionIndex = _updatedSessions.indexOf(session); long records = sessionIndex >= 0 ? _updatedSessionsRecords[sessionIndex] : session.getRecords(); final long initialRecords = records; if (records == Record.NOT_STORED) records = _sessions.fetch(uid); if (records != Record.NOT_STORED) { byte[] data = getRecordManager().fetch(records); if (Debug.ENABLED) { Debug.assertion(data.length == Session.TOTAL_LENGTH * 8); Debug.assertion(Utils.readLong(data, id * 8) == currentRecord); } Utils.writeLong(data, id * 8, newRecord); getRecordManager().update(records, data, 0, data.length); } else { byte[] data = new byte[Session.TOTAL_LENGTH * 8]; Utils.writeLong(data, id * 8, newRecord); records = getRecordManager().insert(data, 0, data.length); _sessions.put(uid, records); } if (records != initialRecords) { index = _updatedSessions.add(session); if (index == _updatedSessionsRecords.length) _updatedSessionsRecords = Utils.extend(_updatedSessionsRecords); _updatedSessionsRecords[index] = records; } }
/** * *********************************************************************** test client * *********************************************************************** */ public static void main(String[] args) { BTree<String, String> st = new BTree<String, String>(); // st.put("www.cs.princeton.edu", "128.112.136.12"); st.put("www.cs.princeton.edu", "128.112.136.11"); st.put("www.princeton.edu", "128.112.128.15"); st.put("www.yale.edu", "130.132.143.21"); st.put("www.simpsons.com", "209.052.165.60"); st.put("www.apple.com", "17.112.152.32"); st.put("www.amazon.com", "207.171.182.16"); st.put("www.ebay.com", "66.135.192.87"); st.put("www.cnn.com", "64.236.16.20"); st.put("www.google.com", "216.239.41.99"); st.put("www.nytimes.com", "199.239.136.200"); st.put("www.microsoft.com", "207.126.99.140"); st.put("www.dell.com", "143.166.224.230"); st.put("www.slashdot.org", "66.35.250.151"); st.put("www.espn.com", "199.181.135.201"); st.put("www.weather.com", "63.111.66.11"); st.put("www.yahoo.com", "216.109.118.65"); StdOut.println("cs.princeton.edu: " + st.get("www.cs.princeton.edu")); StdOut.println("hardvardsucks.com: " + st.get("www.harvardsucks.com")); StdOut.println("simpsons.com: " + st.get("www.simpsons.com")); StdOut.println("apple.com: " + st.get("www.apple.com")); StdOut.println("ebay.com: " + st.get("www.ebay.com")); StdOut.println("dell.com: " + st.get("www.dell.com")); StdOut.println(); StdOut.println("size: " + st.size()); StdOut.println("height: " + st.height()); StdOut.println(st); StdOut.println(); }