| /* |
| ******************************************************************************* |
| * Copyright (C) 1996-2000, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| * |
| * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/normalizer/Attic/CPPWriter.java,v $ |
| * $Date: 2000/03/10 04:17:56 $ |
| * $Revision: 1.2 $ |
| * |
| ***************************************************************************************** |
| */ |
| package com.ibm.tools.normalizer; |
| |
| import com.ibm.text.*; |
| import com.ibm.util.*; |
| import com.ibm.util.CompactByteArray; |
| import com.ibm.util.CompactCharArray; |
| import java.io.*; |
| |
| /** |
| * CPPWriter knows how to write data structures out to C++ source and header files |
| */ |
| class CPPWriter extends SourceWriter { |
| PrintStream source; |
| PrintStream header; |
| |
| String className; |
| |
| public CPPWriter(String fileName, String cName) throws FileNotFoundException { |
| className = cName; |
| |
| // Find the class name |
| header = new PrintStream(new FileOutputStream(fileName + ".h")); |
| header.println(kHeader); |
| header.println("#include \"ptypes.h\""); |
| header.println("#include \"cmpbytea.h\""); |
| header.println("#include \"cmpchara.h\""); |
| header.println(""); |
| header.println("struct " + className + " {"); // "struct" makes everything public |
| |
| source = new PrintStream(new FileOutputStream(fileName + ".cpp")); |
| source.println(kHeader); |
| source.println("#include \"" + fileName + ".h\" "); |
| source.println("\n"); |
| } |
| |
| public void close() { |
| header.println("};"); |
| header.close(); |
| source.close(); |
| header = null; |
| source = null; |
| } |
| |
| public void write(String name, short value) { |
| header.println(" enum { " + name + " = " + value + " };"); |
| } |
| |
| public void write(String name, int value) { |
| header.println(" enum { " + name + " = " + value + " };"); |
| } |
| |
| public void writeHex(String name, char value) { |
| header.println(" enum { " + name + " = 0x" + UInfo.hex(value) + " };"); |
| } |
| |
| public void writeHex(String name, int value) { |
| header.println(" enum { " + name + " = 0x" + Integer.toString(value,16) + " };"); |
| } |
| |
| public void write(String name, CompactCharArray array) { |
| array.compact(false); |
| |
| String indexName = name + "_index"; |
| String valueName = name + "_values"; |
| |
| write(indexName, array.getIndexArray()); |
| write(valueName, array.getValueArray()); |
| |
| header.println(""); |
| header.println(" static const CompactCharArray " + name + ";"); |
| |
| source.println(""); |
| source.println("const CompactCharArray " + className + "::" + name + "(" |
| + indexName + "," + valueName |
| + ", " + array.getValueArray().length + ");" ); |
| } |
| |
| public void write(String name, CompactByteArray array) { |
| array.compact(false); |
| |
| String indexName = name + "_index"; |
| String valueName = name + "_values"; |
| |
| write(indexName, array.getIndexArray()); |
| write(valueName, array.getValueArray()); |
| |
| header.println(""); |
| header.println(" static CompactByteArray " + name + ";"); |
| |
| source.println(""); |
| // TODO: add "const" here when CompactByteArray::get is made const |
| source.println("CompactByteArray " + className + "::" + name + "(" |
| + "(UniChar*)" + indexName + ", (t_int8*)" + valueName |
| + ", " + array.getValueArray().length + ");" ); |
| } |
| |
| public void write(String name, StringBuffer str) { |
| write(name, str.toString().toCharArray()); |
| } |
| |
| public void write(String name, char[] array) { |
| header.println(""); |
| header.println(" static const UniChar " + name + "[];"); |
| |
| source.println(""); |
| source.println("const UniChar " + className + "::" + name + "[] = {"); |
| |
| source.print(" "); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0 && i % 8 == 0) { |
| source.print("\n "); |
| } |
| source.print("0x" + UInfo.hex(array[i]) + ", "); |
| } |
| source.println("};"); |
| } |
| |
| public void write(String name, short[] array) { |
| header.println(""); |
| header.println(" static const t_uint16 " + name + "[];"); |
| |
| source.println(""); |
| source.println("const t_uint16 " + className + "::" + name + "[] = {"); |
| |
| source.print(" "); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0 && i % 8 == 0) { |
| source.print("\n "); |
| } |
| source.print("0x" + UInfo.hex((char)array[i]) + ", "); |
| } |
| source.println("};"); |
| } |
| |
| public void write(String name, int[] array) { |
| header.println(""); |
| header.println(" static const t_int32 " + name + "[];"); |
| |
| source.println(""); |
| source.println("const t_int32 " + className + "::" + name + "[] = {"); |
| |
| source.print(" "); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0 && i % 8 == 0) { |
| source.print("\n "); |
| } |
| source.print("0x" + Integer.toString(array[i],16) + ", "); |
| } |
| source.println("};"); |
| } |
| |
| public void write(String name, byte[] array) { |
| header.println(""); |
| header.println(" static const t_int8 " + name + "[];"); |
| |
| source.println(""); |
| source.println("const t_int8 " + className + "::" + name + "[] = {"); |
| |
| source.print(" "); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0 && i % 8 == 0) { |
| source.print("\n "); |
| } |
| int value = array[i]; |
| if (value < 0) value += 256; |
| source.print("(t_int8)0x" + Integer.toString(value,16) + ", "); |
| } |
| source.println("};"); |
| } |
| |
| static final String kHeader = |
| "/*\n" |
| +" * @(#)$RCSFile$ $Revision: 1.2 $ $Date: 2000/03/10 04:17:56 $\n" |
| +" *\n" |
| +" * (C) Copyright IBM Corp. 1997-1998 - All Rights Reserved\n" |
| +" *\n" |
| +" * The program is provided 'as is' without any warranty express or\n" |
| +" * implied, including the warranty of non-infringement and the implied\n" |
| +" * warranties of merchantibility and fitness for a particular purpose.\n" |
| +" * IBM will not be liable for any damages suffered by you as a result\n" |
| +" * of using the Program. In no event will IBM be liable for any\n" |
| +" * special, indirect or consequential damages or lost profits even if\n" |
| +" * IBM has been advised of the possibility of their occurrence. IBM\n" |
| +" * will not be liable for any third party claims against you.\n" |
| +" *\n" |
| +" * This class is MACHINE GENERATED. Run NormalizerBuilder to regenerate.\n" |
| +" */\n" |
| +"\n"; |
| } |