Next: Evaluation of Ease Up: C++-with-Ease language definition Previous: Data Marshalling

An example program

xxx Need more intro and description of program

#include <String.h>

// Instantiate template declareCtx(@share @reply<double _ecAND int>); declareCtx(@share @bag<String>);

declareCtxType(int); declareCtxType(double); declareCtxType(String);

// Can typedef ctx types in C++ typedef @share @reply<double, int> rep;

// Declare marshalls useCtxMarshal(rep); useCtxMarshal(@share @bag<String>);

useDefaultMarshal(double); useDefaultMarshal(int); useCustomMarshal(String);

// Define marshalling operators mStream& operator << (mStream& s, String const& v) { s << (int) v.length(); s.add((const char *) v, v.length()); return s; }

umStream& operator >> (umStream& s, String &v) { int len; char *tmp; s >> len; tmp = new char[len]; s.remove(tmp, len); v = tmp; delete tmp; return s; }

@process server(rep r, @share @bag<String> s) { double f; int i; String *tmp; char buf[100]; while (1) { @resource (r, f) { i = (int)(1000.0 * sin(f)); sprintf(buf, "Resource got %f, writing %d
n", f, i); tmp = new String(buf); @put!(s, tmp); } @reply (r, i); } }

@process client(int i, rep r, @share<String> s) {/* @share @bag is equivalent to @share */ String str; char buf[100]; double v = i / 3.0; @call(r, v, i); sprintf(buf, "Call sent %f, got %d
n", v, i); str = buf; @write(s, str); }

eMain() { rep r; @share @bag<String> print;

@subordinate (i @for 3) server(r, print); @cooperate (j @for 10) client(j, r, print); while (1) { String *str; /* Remove everything from the print context */ @select { @get!(print, str) { printf("%s", (const char *)*str); delete str; } @else { /* Only when the context is empty */ break; } } } }

Portability Issues

xxx Discuss what's required to make a program portable over multiple architectures.

Next: Evaluation of Ease Up: C++-with-Ease language definition Previous: Data Marshalling




Tim MacKenzie <tym@cs.monash.edu.au>
Mon Apr 1 00:27:29 EST 1996