comparison src/com/tmate/hgkit/ll/Nodeid.java @ 34:51bc56c0addd

Static Nodeid creation methods to reuse NULL id
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 13 Jan 2011 04:03:13 +0100
parents 346b66add79d
children 858d1b2458cb
comparison
equal deleted inserted replaced
33:565ce0835674 34:51bc56c0addd
53 return Arrays.equals(this.binaryData, buf); 53 return Arrays.equals(this.binaryData, buf);
54 } 54 }
55 55
56 @Override 56 @Override
57 public String toString() { 57 public String toString() {
58 // XXX may want to output just single 0 for the NULL id?
58 return toHexString(binaryData, 0, binaryData.length); 59 return toHexString(binaryData, 0, binaryData.length);
59 } 60 }
60 61
61 public String shortNotation() { 62 public String shortNotation() {
62 return toHexString(binaryData, 0, 6); 63 return toHexString(binaryData, 0, 6);
64 }
65
66 public boolean isNull() {
67 if (this == NULL) {
68 return true;
69 }
70 for (int i = 0; i < 20; i++) {
71 if (this.binaryData[i] != 0) {
72 return false;
73 }
74 }
75 return true;
76 }
77
78 // primary difference with cons is handling of NULL id (this method returns constant)
79 // always makes a copy of an array passed
80 public static Nodeid fromBinary(byte[] binaryRepresentation, int offset) {
81 if (binaryRepresentation == null || binaryRepresentation.length - offset < 20) {
82 throw new IllegalArgumentException();
83 }
84 int i = 0;
85 while (i < 20 && binaryRepresentation[offset+i] == 0) i++;
86 if (i == 20) {
87 return NULL;
88 }
89 if (offset == 0 && binaryRepresentation.length == 20) {
90 return new Nodeid(binaryRepresentation, true);
91 }
92 byte[] b = new byte[20]; // create new instance if no other reasonable guesses possible
93 System.arraycopy(binaryRepresentation, offset, b, 0, 20);
94 return new Nodeid(b, false);
63 } 95 }
64 96
65 // binascii.unhexlify() 97 // binascii.unhexlify()
66 public static Nodeid fromAscii(byte[] asciiRepresentation, int offset, int length) { 98 public static Nodeid fromAscii(byte[] asciiRepresentation, int offset, int length) {
67 if (length != 40) { 99 if (length != 40) {