More small changes CharjArray
authorJonathan Lifflander <jliffl2@illinois.edu>
Mon, 7 Jun 2010 20:52:45 +0000 (15:52 -0500)
committerJonathan Lifflander <jliffl2@illinois.edu>
Mon, 7 Jun 2010 20:52:45 +0000 (15:52 -0500)
src/langs/charj/src/charj/libs/Array.cpp [new file with mode: 0644]
src/langs/charj/src/charj/libs/Array.h [new file with mode: 0644]
src/langs/charj/src/charj/libs/Makefile [new file with mode: 0644]
src/langs/charj/tests/unit/ArrayTest.cj [new file with mode: 0644]

diff --git a/src/langs/charj/src/charj/libs/Array.cpp b/src/langs/charj/src/charj/libs/Array.cpp
new file mode 100644 (file)
index 0000000..3ed7df7
--- /dev/null
@@ -0,0 +1,65 @@
+#include "Array.h"
+#include <iostream>
+
+using namespace std;
+using namespace CharjArray;
+
+class Test {
+public: Array<int> aaa;
+  
+  Test() {
+    aaa.init(Domain<1>(Range(3)));
+  }
+
+};
+
+class ArrayTest2 {
+public: 
+  Array<int> test;
+
+  void test1() {
+    test[0] = 0;
+    int i;
+    for (i = 0; i < 10; i++) {
+      test[i] = 110;
+    }
+  }
+
+  ArrayTest2() {
+    test.init(Domain<1>(Range(10)));
+  }
+};
+
+int main(void) {
+  Range ranges[1];
+  ranges[0] = 10;
+
+  Domain<1> domain(ranges);
+
+  Array<int> arr;
+
+  arr.init(domain);
+
+  //arr[0] = 10;
+  arr[Point<1>(0)] = 10000;
+  arr[Point<1>(1)] = 20;
+  arr[Point<1>(8)] = 200;
+
+  //Array<int> aaa;
+  //aaa(Domain<1>(Range(3));
+
+  for (int i = 0; i < arr.size(); i++) {
+    cout << i << " -> " << arr[i] << endl;
+  }
+
+  cout << endl;
+
+  ArrayTest2 at;
+  at.test1();
+
+  for (int i = 0; i < at.test.size(); i++) {
+    cout << i << " -> " << at.test[i] << endl;
+  }
+
+  return 0;
+}
diff --git a/src/langs/charj/src/charj/libs/Array.h b/src/langs/charj/src/charj/libs/Array.h
new file mode 100644 (file)
index 0000000..ed3cfc9
--- /dev/null
@@ -0,0 +1,85 @@
+#ifndef ARRAY_H
+#define ARRAY_H
+
+namespace CharjArray {
+  class Range {
+  public:
+    int size, offset;
+    Range() {}
+    Range(int size_) : size(size_) {}
+  };
+
+  template<int dims>
+  class Domain {
+  public:
+    Range ranges[dims];
+    
+    Domain() {}
+
+    Domain(Range ranges_[]) {
+      for (int i = 0; i < dims; i++) 
+       ranges[i] = ranges_[i];      
+    }
+
+    Domain(Range range) {
+      ranges[0] = range;
+    }
+
+    int size() {
+      int total = 0;
+      for (int i = 0; i < dims; i++)
+       if (total == 0)
+         total = ranges[i].size;
+       else
+         total *= ranges[i].size;
+    }
+  };
+
+  template<int dims>
+  class Point : public Domain<dims> {
+  public:
+    Point(int dim) : Domain<dims>() {
+      this->ranges[0].size = dim;
+    }
+  };
+
+  enum ArrayType { RECT, JAGGED, ROW_MAJOR, COL_MAJOR };
+  template<class type, int dims = 1, int atype = RECT>
+  class Array {
+  private:
+    Domain<dims> domain;
+    type *block;
+    bool initialized;
+
+  public:
+    Array() : initialized(false) {}
+
+    void init(Domain<dims> domain_) {
+      domain = domain_;
+      if (atype == RECT)
+       block = new type[domain.size()];
+      initialized = true;
+    }
+
+    ~Array() {
+      delete block;
+    }
+    
+    type& operator[] (const Point<dims> &point) {
+      return block[point.ranges[0].size];
+      //return block[index];
+    }
+    
+    /*Array<type, dims, atype>& operator[] (const Domain<dims> &domain) {
+      
+      }*/
+
+    int size() {
+      return domain.size();
+    }
+
+  };
+}
+
+#endif
diff --git a/src/langs/charj/src/charj/libs/Makefile b/src/langs/charj/src/charj/libs/Makefile
new file mode 100644 (file)
index 0000000..c3affe0
--- /dev/null
@@ -0,0 +1,20 @@
+CPP=g++
+COPTS=-ansi -pedantic -g
+ALL=Array
+
+all: $(ALL)
+
+clobber:
+       rm -rf \#*\# *~ *.o $(ALL)
+
+Array: Array.o
+       $(CPP) $(COPTS) $^ -o $@
+
+Test: Array.o Test.o
+       $(CPP) $(COPTS) $^ -o $@
+
+Array.o: Array.cpp Array.h
+Test.o: Array.o Test.cpp
+
+.cpp.o:
+       $(CPP) $(COPTS) -c $< -o $@
diff --git a/src/langs/charj/tests/unit/ArrayTest.cj b/src/langs/charj/tests/unit/ArrayTest.cj
new file mode 100644 (file)
index 0000000..623c81c
--- /dev/null
@@ -0,0 +1,14 @@
+
+class ArrayTest {
+      Array<int> test[10];
+
+      void test() {
+           test[0] = 0;
+
+          int i;
+
+          for (i = 0; i < 10; i++) {
+               test[i] = 0;
+           }
+      }
+}