// 
// Decompiled by Procyon v0.6.0
// 

package ch.randelshofer.fastdoubleparser;

import java.util.Set;
import ch.randelshofer.fastdoubleparser.chr.CharSet;
import ch.randelshofer.fastdoubleparser.chr.FormatCharSet;
import java.util.Iterator;
import java.util.Collection;

class NumberFormatSymbolsInfo
{
    static boolean isAscii(final NumberFormatSymbols symbols) {
        return isAsciiCharCollection(symbols.decimalSeparator()) && isAsciiCharCollection(symbols.groupingSeparator()) && isAsciiStringCollection(symbols.exponentSeparator()) && isAsciiCharCollection(symbols.minusSign()) && isAsciiCharCollection(symbols.plusSign()) && isAsciiStringCollection(symbols.infinity()) && isAsciiStringCollection(symbols.nan()) && isAsciiCharCollection(symbols.digits());
    }
    
    static boolean isMostlyAscii(final NumberFormatSymbols symbols) {
        return isAsciiCharCollection(symbols.decimalSeparator()) && isAsciiCharCollection(symbols.groupingSeparator()) && isAsciiCharCollection(symbols.minusSign()) && isAsciiCharCollection(symbols.plusSign()) && isAsciiCharCollection(symbols.digits());
    }
    
    static boolean isDigitsTokensAscii(final NumberFormatSymbols symbols) {
        return isAsciiCharCollection(symbols.digits());
    }
    
    static boolean isAsciiStringCollection(final Collection<String> collection) {
        for (final String str : collection) {
            for (int i = 0; i < str.length(); ++i) {
                final char ch = str.charAt(i);
                if (ch > '\u007f') {
                    return false;
                }
            }
        }
        return true;
    }
    
    static boolean isAsciiCharCollection(final Collection<Character> collection) {
        for (final char ch : collection) {
            if (ch > '\u007f') {
                return false;
            }
        }
        return true;
    }
    
    static boolean containsFormatChars(final NumberFormatSymbols symbols) {
        final FormatCharSet formatCharSet = new FormatCharSet();
        return containsChars(symbols.decimalSeparator(), formatCharSet) || containsChars(symbols.groupingSeparator(), formatCharSet) || containsChars(symbols.exponentSeparator(), formatCharSet) || containsChars(symbols.minusSign(), formatCharSet) || containsChars(symbols.plusSign(), formatCharSet) || containsChars(symbols.infinity(), formatCharSet) || containsChars(symbols.nan(), formatCharSet) || containsChars(symbols.digits(), formatCharSet);
    }
    
    private static boolean containsChars(final Set<String> strings, final FormatCharSet set) {
        for (final String str : strings) {
            for (int i = 0, n = str.length(); i < n; ++i) {
                if (set.containsKey(str.charAt(i))) {
                    return true;
                }
            }
        }
        return false;
    }
    
    private static boolean containsChars(final Collection<Character> characters, final CharSet set) {
        for (final char ch : characters) {
            if (set.containsKey(ch)) {
                return true;
            }
        }
        return false;
    }
}
