You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RawCharSequence.java 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. }