Utf8.java 3.93 KB
package com.google.common.base;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;

@Beta
@GwtCompatible
public final class Utf8
{
  public static int encodedLength(CharSequence paramCharSequence)
  {
    int k = 0;
    int n = paramCharSequence.length();
    int j = 0;
    while ((j < n) && (paramCharSequence.charAt(j) < '€')) {
      j += 1;
    }
    for (;;)
    {
      int i;
      if (j < n)
      {
        int m = paramCharSequence.charAt(j);
        if (m < 2048)
        {
          i += (127 - m >>> 31);
          j += 1;
        }
        else
        {
          int i2 = paramCharSequence.length();
          if (j < i2)
          {
            int i3 = paramCharSequence.charAt(j);
            if (i3 < 2048)
            {
              k += (127 - i3 >>> 31);
              m = j;
            }
            for (;;)
            {
              j = m + 1;
              break;
              int i1 = k + 2;
              k = i1;
              m = j;
              if (55296 <= i3)
              {
                k = i1;
                m = j;
                if (i3 <= 57343)
                {
                  if (Character.codePointAt(paramCharSequence, j) < 65536) {
                    throw new IllegalArgumentException(39 + "Unpaired surrogate at index " + j);
                  }
                  m = j + 1;
                  k = i1;
                }
              }
            }
          }
          i = k + i;
        }
      }
      else
      {
        for (;;)
        {
          if (i < n)
          {
            long l = i;
            throw new IllegalArgumentException(54 + "UTF-8 length does not fit in int: " + (l + 4294967296L));
          }
          return i;
        }
        i = n;
      }
    }
  }
  
  public static boolean isWellFormed(byte[] paramArrayOfByte)
  {
    return isWellFormed(paramArrayOfByte, 0, paramArrayOfByte.length);
  }
  
  public static boolean isWellFormed(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
  {
    int i = paramInt1 + paramInt2;
    Preconditions.checkPositionIndexes(paramInt1, i, paramArrayOfByte.length);
    if (paramInt1 < i) {
      if (paramArrayOfByte[paramInt1] >= 0) {}
    }
    for (;;)
    {
      if (paramInt1 >= i) {
        return true;
      }
      paramInt2 = paramInt1 + 1;
      paramInt1 = paramArrayOfByte[paramInt1];
      if (paramInt1 < 0)
      {
        if (paramInt1 < -32)
        {
          if (paramInt2 == i) {
            return false;
          }
          if (paramInt1 >= -62)
          {
            paramInt1 = paramInt2 + 1;
            if (paramArrayOfByte[paramInt2] <= -65) {
              continue;
            }
          }
          return false;
        }
        if (paramInt1 < -16)
        {
          if (paramInt2 + 1 >= i) {
            return false;
          }
          j = paramInt2 + 1;
          paramInt2 = paramArrayOfByte[paramInt2];
          if ((paramInt2 <= -65) && ((paramInt1 != -32) || (paramInt2 >= -96)) && ((paramInt1 != -19) || (-96 > paramInt2)))
          {
            paramInt1 = j + 1;
            if (paramArrayOfByte[j] <= -65) {
              continue;
            }
          }
          return false;
        }
        if (paramInt2 + 2 >= i) {
          return false;
        }
        int j = paramInt2 + 1;
        paramInt2 = paramArrayOfByte[paramInt2];
        if ((paramInt2 <= -65) && ((paramInt1 << 28) + (paramInt2 + 112) >> 30 == 0))
        {
          paramInt2 = j + 1;
          if (paramArrayOfByte[j] <= -65)
          {
            paramInt1 = paramInt2 + 1;
            if (paramArrayOfByte[paramInt2] <= -65) {
              continue;
            }
          }
        }
        return false;
        paramInt1 += 1;
        break;
        return true;
      }
      paramInt1 = paramInt2;
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/base/Utf8.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */