Mercurial > hg4j
diff src/org/tmatesoft/hg/internal/Patch.java @ 534:243202f1bda5
Commit: refactor revision creation code from clone command to work separately, fit into existing library structure
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 04 Feb 2013 18:00:55 +0100 |
parents | e6f72c9829a6 |
children | 47dfa0ec7e35 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/Patch.java Wed Jan 30 15:48:36 2013 +0100 +++ b/src/org/tmatesoft/hg/internal/Patch.java Mon Feb 04 18:00:55 2013 +0100 @@ -154,7 +154,29 @@ ends.add(e); data.add(src); } - + + /** + * @return how many bytes the patch would take if written down using BundleFormat structure (start, end, length, data) + */ + public int serializedLength() { + int totalDataLen = 0; + for (byte[] d : data) { + totalDataLen += d.length; + } + int prefix = 3 * 4 * count(); // 3 integer fields per entry * sizeof(int) * number of entries + return prefix + totalDataLen; + } + + /*package-local*/ void serialize(DataSerializer out) throws IOException { + for (int i = 0, x = data.size(); i < x; i++) { + final int start = starts.get(i); + final int end = ends.get(i); + byte[] d = data.get(i); + out.writeInt(start, end, d.length); + out.write(d, 0, d.length); + } + } + private void add(Patch p, int i) { add(p.starts.get(i), p.ends.get(i), p.data.get(i)); } @@ -363,4 +385,15 @@ }; return r; } + + public class PatchDataSource implements DataSerializer.DataSource { + + public void serialize(DataSerializer out) throws IOException { + Patch.this.serialize(out); + } + + public int serializeLength() { + return Patch.this.serializedLength(); + } + } } \ No newline at end of file