17dd252788645e940eada959bdde927426e2531c9Paul Duffin/*
27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2011 The Guava Authors
37dd252788645e940eada959bdde927426e2531c9Paul Duffin *
47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
57dd252788645e940eada959bdde927426e2531c9Paul Duffin * in compliance with the License. You may obtain a copy of the License at
67dd252788645e940eada959bdde927426e2531c9Paul Duffin *
77dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
87dd252788645e940eada959bdde927426e2531c9Paul Duffin *
97dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software distributed under the
107dd252788645e940eada959bdde927426e2531c9Paul Duffin * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
117dd252788645e940eada959bdde927426e2531c9Paul Duffin * express or implied. See the License for the specific language governing permissions and
127dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License.
137dd252788645e940eada959bdde927426e2531c9Paul Duffin */
147dd252788645e940eada959bdde927426e2531c9Paul Duffin
157dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.primitives;
167dd252788645e940eada959bdde927426e2531c9Paul Duffin
177dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtCompatible;
187dd252788645e940eada959bdde927426e2531c9Paul Duffin
197dd252788645e940eada959bdde927426e2531c9Paul Duffin/**
207dd252788645e940eada959bdde927426e2531c9Paul Duffin * A string to be parsed as a number and the radix to interpret it in.
217dd252788645e940eada959bdde927426e2531c9Paul Duffin */
227dd252788645e940eada959bdde927426e2531c9Paul Duffin@GwtCompatible
237dd252788645e940eada959bdde927426e2531c9Paul Duffinfinal class ParseRequest {
247dd252788645e940eada959bdde927426e2531c9Paul Duffin  final String rawValue;
257dd252788645e940eada959bdde927426e2531c9Paul Duffin  final int radix;
267dd252788645e940eada959bdde927426e2531c9Paul Duffin
277dd252788645e940eada959bdde927426e2531c9Paul Duffin  private ParseRequest(String rawValue, int radix) {
287dd252788645e940eada959bdde927426e2531c9Paul Duffin    this.rawValue = rawValue;
297dd252788645e940eada959bdde927426e2531c9Paul Duffin    this.radix = radix;
307dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
317dd252788645e940eada959bdde927426e2531c9Paul Duffin
327dd252788645e940eada959bdde927426e2531c9Paul Duffin  static ParseRequest fromString(String stringValue) {
337dd252788645e940eada959bdde927426e2531c9Paul Duffin    if (stringValue.length() == 0) {
347dd252788645e940eada959bdde927426e2531c9Paul Duffin      throw new NumberFormatException("empty string");
357dd252788645e940eada959bdde927426e2531c9Paul Duffin    }
367dd252788645e940eada959bdde927426e2531c9Paul Duffin
377dd252788645e940eada959bdde927426e2531c9Paul Duffin    // Handle radix specifier if present
387dd252788645e940eada959bdde927426e2531c9Paul Duffin    String rawValue;
397dd252788645e940eada959bdde927426e2531c9Paul Duffin    int radix;
407dd252788645e940eada959bdde927426e2531c9Paul Duffin    char firstChar = stringValue.charAt(0);
417dd252788645e940eada959bdde927426e2531c9Paul Duffin    if (stringValue.startsWith("0x") || stringValue.startsWith("0X")) {
427dd252788645e940eada959bdde927426e2531c9Paul Duffin      rawValue = stringValue.substring(2);
437dd252788645e940eada959bdde927426e2531c9Paul Duffin      radix = 16;
447dd252788645e940eada959bdde927426e2531c9Paul Duffin    } else if (firstChar == '#') {
457dd252788645e940eada959bdde927426e2531c9Paul Duffin      rawValue = stringValue.substring(1);
467dd252788645e940eada959bdde927426e2531c9Paul Duffin      radix = 16;
477dd252788645e940eada959bdde927426e2531c9Paul Duffin    } else if (firstChar == '0' && stringValue.length() > 1) {
487dd252788645e940eada959bdde927426e2531c9Paul Duffin      rawValue = stringValue.substring(1);
497dd252788645e940eada959bdde927426e2531c9Paul Duffin      radix = 8;
507dd252788645e940eada959bdde927426e2531c9Paul Duffin    } else {
517dd252788645e940eada959bdde927426e2531c9Paul Duffin      rawValue = stringValue;
527dd252788645e940eada959bdde927426e2531c9Paul Duffin      radix = 10;
537dd252788645e940eada959bdde927426e2531c9Paul Duffin    }
547dd252788645e940eada959bdde927426e2531c9Paul Duffin
557dd252788645e940eada959bdde927426e2531c9Paul Duffin    return new ParseRequest(rawValue, radix);
567dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
577dd252788645e940eada959bdde927426e2531c9Paul Duffin}
58