Stream Helper Methods in C-Sharp
The stream classes provide all of the low-level methods necessary for encoding and decoding Ice types. However, it would be tedious and error-prone to manually encode complex Ice types such as classes, structs, and dictionaries using these low-level functions. For this reason, the Slice compiler optionally generates helper methods for streaming complex Ice types.
We will use the following Slice definitions to demonstrate the language mapping:
module M
{
sequence<...> Seq;
dictionary<...> Dict;
struct S
{
...
}
enum E { ... }
class C
{
...
}
interface I
{
...
}
}
The Slice compiler generates the corresponding helper methods shown below:
namespace M
{
public sealed class SeqHelper
{
public static ...[] read(Ice.InputStream istr);
public static void write(Ice.OutputStream ostr, ...[] v);
}
public sealed class DictHelper
{
public static Dictionary<...> read(Ice.InputStream istr);
public static void write(Ice.OutputStream ostr, Dictionary<...> v);
}
public partial struct S
{
public static S ice_read(Ice.InputStream istr);
public static void ice_write(Ice.OutputStream ostr, S v);
...
// Instance methods
public void ice_read(Ice.InputStream istr);
public void ice_write(Ice.OutputStream ostr);
}
public sealed class EHelper
{
public static E read(Ice.InputStream istr);
public static void write(Ice.OutputStream ostr, E v);
}
public sealed class IPrxHelper : ...
{
public static IPrx read(Ice.InputStream istr);
public static void write(Ice.OutputStream ostr, IPrx v);
...
}
}
The IPrxHelper class provides read and write methods for extracting and inserting proxies, respectively. Note that the read method returns a proxy of type IPrx but does not perform the equivalent of a checkedCast to verify that the remote object supports interface I.
No additional code is generated for marshaling instances of class types, such as type C that we defined above. Applications should use OutputStream.writeValue and InputStream.readValue to insert and extract class instances, respectively.