| /* GiopIo.java -- Generates GIOP input/output statements. |
| Copyright (C) 2006 Free Software Foundation |
| |
| This file is part of GNU Classpath. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. |
| */ |
| |
| package gnu.classpath.tools.giop.grmic; |
| |
| import java.rmi.Remote; |
| |
| import org.omg.CORBA.portable.ObjectImpl; |
| |
| /** |
| * Generates the code for reading and writing data over GIOP stream. |
| * |
| * @author Audrius Meskauskas, Lithuania (audriusa@Bioinformatics.org) |
| */ |
| public class GiopIo |
| { |
| /** |
| * Get the statement for writing the variable of the given type to the GIOP ({@link org.omg.CORBA_2_3.portable.OutputStream) stream. The |
| * stream is always named "out". |
| * |
| * @param c |
| * the class of the object being written |
| * @param variable |
| * the variable, where the object value is stored |
| * @param r |
| * the parent generator, used to name the class |
| * @return the write statement. |
| */ |
| public static String getWriteStatement(Class c, String variable, GiopRmicCompiler r) |
| { |
| if (c.equals(boolean.class)) |
| return "out.write_boolean(" + variable + ");"; |
| if (c.equals(byte.class)) |
| return "out.write_octet(" + variable + ");"; |
| else if (c.equals(short.class)) |
| return "out.write_int(" + variable + ");"; |
| else if (c.equals(int.class)) |
| return "out.write_long(" + variable + ");"; |
| else if (c.equals(long.class)) |
| return "out.write_long_long(" + variable + ");"; |
| else if (c.equals(double.class)) |
| return "out.write_double(" + variable + ");"; |
| else if (c.equals(float.class)) |
| return "out.write_float(" + variable + ");"; |
| else if (c.equals(char.class)) |
| return "out.write_char(" + variable + ");"; |
| else if (Remote.class.isAssignableFrom(c)) |
| return "Util.writeRemoteObject(out, " + variable + ");"; |
| else if (ObjectImpl.class.isAssignableFrom(c)) |
| return "out.write_Object(" + variable + ");"; |
| else |
| return "out.write_value(" + variable + ", " + r.name(c) + ".class);"; |
| } |
| |
| /** |
| * Get the statement for reading the value of the given type from to the GIOP ({@link org.omg.CORBA_2_3.portable.InputStream) stream. The |
| * stream is always named "in". |
| * |
| * @param c |
| * the class of the object being written |
| * @param r |
| * the parent generator, used to name the class |
| * @return the right side of the read statement. |
| */ |
| public static String getReadStatement(Class c, GiopRmicCompiler r) |
| { |
| if (c.equals(boolean.class)) |
| return "in.read_boolean();"; |
| else if (c.equals(byte.class)) |
| return "in.read_octet();"; |
| else if (c.equals(short.class)) |
| return "in.read_int();"; |
| else if (c.equals(int.class)) |
| return "in.read_long();"; |
| else if (c.equals(long.class)) |
| return "in.read_long_long();"; |
| else if (c.equals(double.class)) |
| return "in.read_double();"; |
| else if (c.equals(float.class)) |
| return "in.read_float();"; |
| else if (c.equals(char.class)) |
| return "in.read_char();"; |
| else if (Remote.class.isAssignableFrom(c)) |
| return "(" + r.name(c) |
| + ") PortableRemoteObject.narrow(in.read_Object()," + r.name(c) |
| + ".class);"; |
| else if (ObjectImpl.class.isAssignableFrom(c)) |
| return "in.read_Object();"; |
| else |
| return "(" + r.name(c) |
| + ") in.read_value(" + r.name(c) + ".class);"; |
| } |
| |
| } |