001: /*
002: * @(#)HexUtil.java
003: *
004: * Copyright (C) 2004 Matt Albrecht
005: * groboclown@users.sourceforge.net
006: * http://groboutils.sourceforge.net
007: *
008: * Permission is hereby granted, free of charge, to any person obtaining a
009: * copy of this software and associated documentation files (the "Software"),
010: * to deal in the Software without restriction, including without limitation
011: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
012: * and/or sell copies of the Software, and to permit persons to whom the
013: * Software is furnished to do so, subject to the following conditions:
014: *
015: * The above copyright notice and this permission notice shall be included in
016: * all copies or substantial portions of the Software.
017: *
018: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
019: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
020: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
021: * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
022: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
023: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
024: * DEALINGS IN THE SOFTWARE.
025: */
026:
027: package net.sourceforge.groboutils.codecoverage.v2.util;
028:
029: import java.util.Comparator;
030: import java.util.zip.CRC32;
031: import java.util.zip.Checksum;
032:
033: /**
034: * A simple utility to provide the Hexidecimal conversions for the log files.
035: * This contains the string-length checking and other verification steps
036: * that might be left out of some implementations.
037: *
038: * @author Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
039: * @version $Date: 2004/07/08 05:29:20 $
040: * @since July 7, 2004
041: */
042: public class HexUtil {
043: protected static HexUtil s_instance = new HexUtil();
044:
045: public static class TwoShorts {
046: public short a;
047: public short b;
048:
049: public TwoShorts() {
050: }
051:
052: public TwoShorts(short a, short b) {
053: this .a = a;
054: this .b = b;
055: }
056: }
057:
058: /**
059: * Creates a new finder using the default (system) classpath.
060: */
061: protected HexUtil() {
062: // do nothing
063: }
064:
065: public static final HexUtil getInstance() {
066: return s_instance;
067: }
068:
069: /**
070: * Parses two hex strings separated by a character. The string should
071: * not start with the separator char after the startPos.
072: *
073: * @return <code>true</code> if <code>ts</code> was populated correctly,
074: * or <code>false</code> if there was an error parsing the string.
075: */
076: public boolean parseTwoHex(String text, final TwoShorts ts,
077: final char sep, final int startPos) {
078: if (text == null || ts == null || startPos < 0) {
079: return false;
080: }
081:
082: int sepPos = text.indexOf(sep, startPos);
083: if (sepPos <= 0 || sepPos >= text.length()) {
084: return false;
085: }
086:
087: try {
088: ts.a = (short) Integer.parseInt(text.substring(startPos,
089: sepPos), 16);
090: ts.b = (short) Integer.parseInt(text.substring(sepPos + 1)
091: .trim(), 16);
092: } catch (NumberFormatException e) {
093: return false;
094: }
095:
096: return true;
097: }
098:
099: /* This logic for creating the HEX string will be contained only in the
100: DirectoryChannelLogger class.
101:
102: * Make static final so that the invocation time is minimized.
103: * <p>
104: * This now returns a character array, for performance reasons. The
105: * array's format is in hexidecimal.
106: public static final char[] createCoverString(
107: short methodIndex, short markIndex )
108: {
109: char c[] = new char[10];
110: c[9] = '\n';
111:
112: // unroll the loop
113: c[8] = HEX[ methodIndex & 0xf ]; methodIndex >>= 4;
114: c[7] = HEX[ methodIndex & 0xf ]; methodIndex >>= 4;
115: c[6] = HEX[ methodIndex & 0xf ]; methodIndex >>= 4;
116: c[5] = HEX[ methodIndex & 0xf ];
117:
118: c[4] = ' ';
119:
120: c[3] = HEX[ markIndex & 0xf ]; markIndex >>= 4;
121: c[2] = HEX[ markIndex & 0xf ]; markIndex >>= 4;
122: c[1] = HEX[ markIndex & 0xf ]; markIndex >>= 4;
123: c[0] = HEX[ markIndex & 0xf ];
124:
125: return c;
126: }
127: */
128: }
|