
#line 180 "matrix.w"

#line 200 "matrix.w"
#include <vector>
#include <iostream.h>
using namespace std;
#pragma warning (disable : 4786)
#include <omniORB2/CORBA.h>
#include "omnithread.h"
#line 180 "matrix.w"


#line 213 "matrix.w"
#include "matrix.h"
#line 181 "matrix.w"


#line 490 "matrix.w"
#include "namebind.cpp"

#line 182 "matrix.w"


#line 253 "matrix.w"
typedef vector<vector<double> > vecrep;


#line 300 "matrix.w"
double inner_product(const Row& r, const Column& c) {
  double result = 0;
  for (int i = 0; i < r.length(); ++i)
    result += r[i] * c[i];
  return result;
}
#line 255 "matrix.w"


class Matrix_impl : virtual public _sk_Matrix {
    rep mr;
    int _calls;
public:
    
#line 269 "matrix.w"
    Matrix_impl (const vecrep& m0)
    {
      _calls = 0;
      mr.length(m0.size());
      for (int i = 0; i < m0.size(); ++i) {
        mr[i].length(m0[i].size());
        for (int j = 0; j < m0[i].size(); ++j)
          mr[i][j] = m0[i][j];
      }
    }
#line 261 "matrix.w"

    
#line 281 "matrix.w"
    Column* block_product(CORBA::ULong first, 
                          CORBA::ULong last, const Column& c )
    {
      cout << "block_product(" << first << ", " << last << ", c) start" 
           << endl;
      Column* z = new Column;
      z->length(last - first);
      int k = 0;
      for (int i = first; i != last; ++i, ++k) 
        (*z)[k] = inner_product(mr[i], c);
      cout << "block_product(" << first << ", " << last << ", c) end" 
           << endl;
      return z;
    }
#line 262 "matrix.w"

};
#line 183 "matrix.w"


int main(int argc, char *argv[])
{
  assert(argc == 2);
  const int N = 20;
  
#line 219 "matrix.w"
  vector<double> r;
  vecrep m0;
  
  for (int i = 0; i < N; ++i) {
    r.erase(r.begin(), r.end());
    for (int j = 0; j < N; ++j)
      r.push_back(i*N + j);
    m0.push_back(r);
  }
#line 189 "matrix.w"

  
#line 232 "matrix.w"
  cout << "Initializing..." << endl;
  CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "omniORB2");
  CORBA::BOA_var boa = orb->BOA_init(argc, argv, "omniORB2_BOA");
#line 190 "matrix.w"

  
#line 243 "matrix.w"
  Matrix_impl matrix1(m0);
  matrix1._obj_is_ready(boa);
#line 191 "matrix.w"

  
#line 247 "matrix.w"
  Matrix_var myobjRef = matrix1._this();
  if (!bindObjectToName(orb, myobjRef, "test", argv[1])) {
    return 1;
  }
#line 192 "matrix.w"

  boa->impl_is_ready();
  return 0;
}