1 package org.apache.maven.surefire.util.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.PrintStream;
23
24
25
26
27 public class ByteBuffer
28 {
29 private final byte[] data;
30
31 private int position;
32
33 public ByteBuffer( int length )
34 {
35 this.data = new byte[length];
36 }
37
38 public ByteBuffer( byte[] buf, int off, int len )
39 {
40 this.data = new byte[len];
41 append( buf, off, len );
42 }
43
44
45 public void append( char chararcter )
46 {
47 data[position++] = (byte) chararcter;
48 }
49
50 public void append( byte chararcter )
51 {
52 data[position++] = chararcter;
53 }
54
55 static final byte comma = (byte) ',';
56
57 public void comma()
58 {
59 data[position++] = comma;
60 }
61
62
63 public void advance( int i )
64 {
65 position += i;
66 }
67
68 public void append( Integer integer )
69 {
70 toHex( integer.intValue() );
71 }
72
73
74
75
76 private void toHex( int i )
77 {
78 byte[] buf = new byte[32];
79 int charPos = 32;
80 int radix = 1 << 4;
81 int mask = radix - 1;
82 do
83 {
84 buf[--charPos] = (byte) digits[i & mask];
85 i >>>= 4;
86 }
87 while ( i != 0 );
88
89 append( buf, charPos, ( 32 - charPos ) );
90 }
91
92 final static char[] digits =
93 { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
94 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
95
96
97 public byte[] getData()
98 {
99 return data;
100 }
101
102 public int getlength()
103 {
104 return position;
105 }
106
107 public String toString()
108 {
109 return new String( data, 0, position );
110 }
111
112 public void append( ByteBuffer other )
113 {
114 byte[] src = other.getData();
115 final int length = src.length;
116 for ( int i = 0; i < length; i++ )
117 {
118 data[position++] = src[i];
119 }
120 }
121
122 public static byte[] copy( byte[] src1, int off1, int len1 )
123 {
124 byte[] combined = new byte[len1];
125 int pos = 0;
126 for ( int i = off1; i < off1 + len1; i++ )
127 {
128 combined[pos++] = src1[i];
129 }
130 return combined;
131 }
132
133 public void append( byte[] src1, int off1, int len1 )
134 {
135 for ( int i = off1; i < off1 + len1; i++ )
136 {
137 data[position++] = src1[i];
138 }
139 }
140
141 public static byte[] join( byte[] src1, int off1, int len1, byte[] src2, int off2, int len2 )
142 {
143 byte[] combined = new byte[len1 + len2];
144 int pos = 0;
145 for ( int i = off1; i < off1 + len1; i++ )
146 {
147 combined[pos++] = src1[i];
148 }
149 for ( int i = off2; i < off2 + len2; i++ )
150 {
151 combined[pos++] = src2[i];
152 }
153 return combined;
154 }
155
156 public void print( PrintStream printStream )
157 {
158 printStream.write( data, 0, position );
159 }
160
161 public static char[] toChar( byte[] b, int off, int len )
162 {
163 char[] result = new char[len];
164 int pos = 0;
165 for ( int i = off; i < off + len; i++ )
166 {
167 result[pos++] = (char) b[i];
168 }
169 return result;
170 }
171 }