Mercurial > hg4j
comparison src/com/tmate/hgkit/ll/Nodeid.java @ 9:d6d2a630f4a6
Access to underlaying file data wrapped into own Access object, implemented with FileChannel and ByteBuffer
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Sat, 25 Dec 2010 04:45:59 +0100 |
parents | dbd663faec1f |
children | df8c67f3006a |
comparison
equal
deleted
inserted
replaced
8:a78c980749e3 | 9:d6d2a630f4a6 |
---|---|
1 /** | 1 /** |
2 * Copyright (c) 2010 Artem Tikhomirov | 2 * Copyright (c) 2010 Artem Tikhomirov |
3 */ | 3 */ |
4 package com.tmate.hgkit.ll; | 4 package com.tmate.hgkit.ll; |
5 | 5 |
6 import java.math.BigInteger; | |
7 import java.util.Formatter; | |
8 | 6 |
9 /** | 7 /** |
10 * @see mercurial/node.py | 8 * @see mercurial/node.py |
11 * @author artem | 9 * @author artem |
12 * | 10 * |
22 this.binaryData = binaryRepresentation; | 20 this.binaryData = binaryRepresentation; |
23 } | 21 } |
24 | 22 |
25 @Override | 23 @Override |
26 public String toString() { | 24 public String toString() { |
27 // FIXME temp impl. | 25 return new DigestHelper().toHexString(binaryData, 0, 20); |
28 // BEWARE, if binaryData[0] > 0x80, BigInteger treats it as negative | |
29 return new BigInteger(binaryData).toString(); | |
30 } | 26 } |
31 | 27 |
32 // binascii.unhexlify() | 28 // binascii.unhexlify() |
33 public static Nodeid fromAscii(byte[] asciiRepresentation, int offset, int length) { | 29 public static Nodeid fromAscii(byte[] asciiRepresentation, int offset, int length) { |
34 assert length % 2 == 0; // Python's binascii.hexlify convert each byte into 2 digits | 30 assert length % 2 == 0; // Python's binascii.hexlify convert each byte into 2 digits |
35 byte[] data = new byte[length / 2]; // XXX use known size instead? nodeid is always 20 bytes | 31 byte[] data = new byte[length >>> 1]; // XXX use known size instead? nodeid is always 20 bytes |
36 for (int i = 0, j = offset; i < data.length; i++) { | 32 for (int i = 0, j = offset; i < data.length; i++) { |
37 int hiNibble = Character.digit(asciiRepresentation[j++], 16); | 33 int hiNibble = Character.digit(asciiRepresentation[j++], 16); |
38 int lowNibble = Character.digit(asciiRepresentation[j++], 16); | 34 int lowNibble = Character.digit(asciiRepresentation[j++], 16); |
39 data[i] = (byte) (((hiNibble << 4) | lowNibble) & 0xFF); | 35 data[i] = (byte) (((hiNibble << 4) | lowNibble) & 0xFF); |
40 } | 36 } |