public static StringTable getStringTable() { // approximate size for capacity. int size = 0; for (final SerialNumberManager snm : values) { size += snm.size(); } int tableMaskBits = getMaskBits(); StringTable map = new StringTable(size, tableMaskBits); for (final SerialNumberManager snm : values) { final int mask = snm.getMask(tableMaskBits); for (Entry<Integer, String> entry : snm.entrySet()) { map.put(entry.getKey() | mask, entry.getValue()); } } return map; }
private void saveStringTableSection(FileSummary.Builder summary) throws IOException { OutputStream out = sectionOutputStream; SerialNumberManager.StringTable stringTable = SerialNumberManager.getStringTable(); StringTableSection.Builder b = StringTableSection.newBuilder() .setNumEntry(stringTable.size()) .setMaskBits(stringTable.getMaskBits()); b.build().writeDelimitedTo(out); for (Entry<Integer, String> e : stringTable) { StringTableSection.Entry.Builder eb = StringTableSection.Entry .newBuilder().setId(e.getKey()).setStr(e.getValue()); eb.build().writeDelimitedTo(out); } commitSection(summary, SectionName.STRING_TABLE); } }
static SerialNumberManager.StringTable loadStringTable(InputStream in) throws IOException { FsImageProto.StringTableSection s = FsImageProto.StringTableSection .parseDelimitedFrom(in); LOG.info("Loading " + s.getNumEntry() + " strings"); SerialNumberManager.StringTable stringTable = SerialNumberManager.newStringTable(s.getNumEntry(), s.getMaskBits()); for (int i = 0; i < s.getNumEntry(); ++i) { FsImageProto.StringTableSection.Entry e = FsImageProto .StringTableSection.Entry.parseDelimitedFrom(in); stringTable.put(e.getId(), e.getStr()); } return stringTable; }
public static StringTable newStringTable(int size, int bits) { if (bits > maskBits) { throw new IllegalArgumentException( "String table bits " + bits + " > " + maskBits); } return new StringTable(size, bits); }
private void loadStringTableSection(InputStream in) throws IOException { StringTableSection s = StringTableSection.parseDelimitedFrom(in); ctx.stringTable = SerialNumberManager.newStringTable(s.getNumEntry(), s.getMaskBits()); for (int i = 0; i < s.getNumEntry(); ++i) { StringTableSection.Entry e = StringTableSection.Entry .parseDelimitedFrom(in); ctx.stringTable.put(e.getId(), e.getStr()); } }