RawCharSequence.java

  1. /*
  2.  * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others
  3.  *
  4.  * This program and the accompanying materials are made available under the
  5.  * terms of the Eclipse Distribution License v. 1.0 which is available at
  6.  * https://www.eclipse.org/org/documents/edl-v10.php.
  7.  *
  8.  * SPDX-License-Identifier: BSD-3-Clause
  9.  */

  10. package org.eclipse.jgit.util;

  11. /**
  12.  * A rough character sequence around a raw byte buffer.
  13.  * <p>
  14.  * Characters are assumed to be 8-bit US-ASCII.
  15.  */
  16. public final class RawCharSequence implements CharSequence {
  17.     /** A zero-length character sequence. */
  18.     public static final RawCharSequence EMPTY = new RawCharSequence(null, 0, 0);

  19.     final byte[] buffer;

  20.     final int startPtr;

  21.     final int endPtr;

  22.     /**
  23.      * Create a rough character sequence around the raw byte buffer.
  24.      *
  25.      * @param buf
  26.      *            buffer to scan.
  27.      * @param start
  28.      *            starting position for the sequence.
  29.      * @param end
  30.      *            ending position for the sequence.
  31.      */
  32.     public RawCharSequence(byte[] buf, int start, int end) {
  33.         buffer = buf;
  34.         startPtr = start;
  35.         endPtr = end;
  36.     }

  37.     /** {@inheritDoc} */
  38.     @Override
  39.     public char charAt(int index) {
  40.         return (char) (buffer[startPtr + index] & 0xff);
  41.     }

  42.     /** {@inheritDoc} */
  43.     @Override
  44.     public int length() {
  45.         return endPtr - startPtr;
  46.     }

  47.     /** {@inheritDoc} */
  48.     @Override
  49.     public CharSequence subSequence(int start, int end) {
  50.         return new RawCharSequence(buffer, startPtr + start, startPtr + end);
  51.     }

  52.     /** {@inheritDoc} */
  53.     @Override
  54.     public String toString() {
  55.         final int n = length();
  56.         final StringBuilder b = new StringBuilder(n);
  57.         for (int i = 0; i < n; i++)
  58.             b.append(charAt(i));
  59.         return b.toString();
  60.     }
  61. }