@Override public byte getType() { return (byte) (IndexType.ALPHABETS_COUNT + (numberOfStrokes * converter.getType())); } }
/** * Returns the types bits corresponding to this index type. * * @return types bits corresponding to this index type. */ public byte getType() { return converter.getType(); }
@Override public byte getType() { return innerConverter.getType(); }
/** * Creates {@link IndexSymbolConverter} for subscripted symbols from specified converter. * * @param converter converter to be extended with symbols with strokes * @param numberOfStrokes number of strokes to be appended after symbol */ public IndexWithStrokeConverter(IndexSymbolConverter converter, byte numberOfStrokes) { if (numberOfStrokes + converter.getType() > Byte.MAX_VALUE) throw new IllegalArgumentException("Too much strokes."); this.converter = converter; this.numberOfStrokes = numberOfStrokes; StringBuilder sb = new StringBuilder(); while (numberOfStrokes-- > 0) sb.append('\''); strokesString = sb.toString(); }
/** * Returns string representation from specified integer representation of single * index in the specified {@code outputFormat}. * * @param code integer representation of single index * @param outputFormat output format to be used to produce string representation * @return string representation of specified integer index * @throws IllegalArgumentException if rule for specified code */ public String getSymbol(int code, OutputFormat outputFormat) { byte typeId = (byte) ((code >>> 24) & 0x7F); int number = code & 0xFFFF; try { for (IndexSymbolConverter converter : converters) if (converter.getType() == typeId) { return converter.getSymbol(number, outputFormat);//symbol.length() == 1 ? symbol : symbol + " "; } throw new IllegalArgumentException("No appropriate converter for typeId 0x" + Integer.toHexString(typeId)); } catch (IndexConverterException e) { throw new IllegalArgumentException("Index 0x" + Integer.toHexString(code) + " conversion error"); } }
/** * Creates index converted manager for specified index converters. * * @param converters index converters * @throws IllegalArgumentException if several converters have the same index type */ public IndexConverterManager(IndexSymbolConverter[] converters) { TByteHashSet types = new TByteHashSet(converters.length); for (IndexSymbolConverter converter : converters) { if (types.contains(converter.getType())) throw new IllegalArgumentException("Several converters for same type."); types.add(converter.getType()); } this.converters = converters; }
/** * Returns integer representation from specified string representation of single * index. * * @param index string representation of single index * @return integer representation of specified index * @throws IllegalArgumentException if rule for specified string */ public int getCode(String index) { try { for (IndexSymbolConverter converter : converters) if (converter.applicableToSymbol(index)) return (converter.getCode(index) & 0xFFFF) | ((converter.getType() & 0x7F) << 24); throw new IllegalArgumentException("No available converters for such symbol : " + index); } catch (IndexConverterException e) { throw new IllegalArgumentException("No available converters for such symbol : " + index); } } }