--- Ice-3.0.1/src/slice2java/Gen.cpp.orig 2006-06-30 17:35:45.000000000 +0100 +++ Ice-3.0.1/src/slice2java/Gen.cpp 2006-06-30 17:49:37.000000000 +0100 @@ -2585,40 +2585,31 @@ Output& out = output(); - out << sp << nl << "public final class " << name; + out << sp << nl << "public enum " << name; out << sb; - out << nl << "private static " << name << "[] __values = new " << name << "[" << sz << "];"; - out << nl << "private int __value;"; - out << sp; - int n; - for(en = enumerators.begin(), n = 0; en != enumerators.end(); ++en, ++n) + + en = enumerators.begin(); + while(en != enumerators.end()) { - string member = fixKwd((*en)->name()); - out << nl << "public static final int _" << member << " = " << n << ';'; - out << nl << "public static final " << name << ' ' << fixKwd(member) - << " = new " << name << "(_" << member << ");"; + out << nl << (*en)->name(); + if(++en != enumerators.end()) + { + out << ','; + } } + out << ';'; + + out << nl << "private static " << name << "[] __values = values();"; out << sp << nl << "public static " << name << nl << "convert(int val)"; out << sb; - out << nl << "assert val < " << sz << ';'; + out << nl << "assert val >= 0 && val < " << sz << ';'; out << nl << "return __values[val];"; out << eb; out << sp << nl << "public int" << nl << "value()"; out << sb; - out << nl << "return __value;"; - out << eb; - - out << sp << nl << "public String" << nl << "toString()"; - out << sb; - out << nl << "return __T[__value];"; - out << eb; - - out << sp << nl << "private" << nl << name << "(int val)"; - out << sb; - out << nl << "__value = val;"; - out << nl << "__values[val] = this;"; + out << nl << "return ordinal();"; out << eb; if(!p->isLocal()) @@ -2627,15 +2618,15 @@ out << sb; if(sz <= 0x7f) { - out << nl << "__os.writeByte((byte)__value);"; + out << nl << "__os.writeByte((byte)ordinal());"; } else if(sz <= 0x7fff) { - out << nl << "__os.writeShort((short)__value);"; + out << nl << "__os.writeShort((short)ordinal());"; } else { - out << nl << "__os.writeInt(__value);"; + out << nl << "__os.writeInt(ordinal());"; } out << eb; @@ -2666,15 +2657,15 @@ out << sb; if(sz <= 0x7f) { - out << nl << "__outS.writeByte((byte)__value);"; + out << nl << "__outS.writeByte((byte)ordinal());"; } else if(sz <= 0x7fff) { - out << nl << "__outS.writeShort((short)__value);"; + out << nl << "__outS.writeShort((short)ordinal());"; } else { - out << nl << "__outS.writeInt(__value);"; + out << nl << "__outS.writeInt(ordinal());"; } out << eb; @@ -2701,19 +2692,6 @@ } } - out << sp << nl << "final static private String[] __T ="; - out << sb; - en = enumerators.begin(); - while(en != enumerators.end()) - { - out << nl << "\"" << (*en)->name() << "\""; - if(++en != enumerators.end()) - { - out << ','; - } - } - out << eb << ';'; - out << eb; close(); }