1c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean/*
2c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * Copyright (C) 2014 The Android Open Source Project
3c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean *
4c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * Licensed under the Apache License, Version 2.0 (the "License");
5c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * you may not use this file except in compliance with the License.
6c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * You may obtain a copy of the License at
7c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean *
8c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean *      http://www.apache.org/licenses/LICENSE-2.0
9c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean *
10c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * Unless required by applicable law or agreed to in writing, software
11c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * distributed under the License is distributed on an "AS IS" BASIS,
12c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * See the License for the specific language governing permissions and
14c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * limitations under the License.
15c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean */
16464c655871f4c1dd280474723e4b33f55044baa5Mike Lockwoodpackage com.android.internal.alsa;
17c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean
18c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean/**
19c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * @hide
20c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * Breaks lines in an ALSA "cards" or "devices" file into tokens.
21c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean * TODO(pmclean) Look into replacing this with String.split().
22c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean */
23c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLeanpublic class LineTokenizer {
24c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    public static final int kTokenNotFound = -1;
25c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean
26c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    private String mDelimiters = "";
27c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean
28c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    public LineTokenizer(String delimiters) {
29c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        mDelimiters = delimiters;
30c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    }
31c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean
32c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    int nextToken(String line, int startIndex) {
33c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        int len = line.length();
34c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        int offset = startIndex;
35c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        for (; offset < len; offset++) {
36c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean            if (mDelimiters.indexOf(line.charAt(offset)) == -1) {
37c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean                // past a delimiter
38c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean                break;
39c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean            }
40c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean      }
41c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean
42c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean      return offset < len ? offset : kTokenNotFound;
43c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    }
44c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean
45c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    int nextDelimiter(String line, int startIndex) {
46c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        int len = line.length();
47c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        int offset = startIndex;
48c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        for (; offset < len; offset++) {
49c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean            if (mDelimiters.indexOf(line.charAt(offset)) != -1) {
50c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean                // past a delimiter
51c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean                break;
52c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean            }
53c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean        }
54c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean
55c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean      return offset < len ? offset : kTokenNotFound;
56c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean    }
57c837a451946b64d70ed7c642fbde03c182c28b6fPaul McLean}
58