Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mgiza.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mgizapp/src/Array2.h')
-rw-r--r--mgizapp/src/Array2.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/mgizapp/src/Array2.h b/mgizapp/src/Array2.h
new file mode 100644
index 0000000..8ea2d9e
--- /dev/null
+++ b/mgizapp/src/Array2.h
@@ -0,0 +1,126 @@
+/*
+
+ EGYPT Toolkit for Statistical Machine Translation
+ Written by Yaser Al-Onaizan, Jan Curin, Michael Jahr, Kevin Knight, John Lafferty, Dan Melamed, David Purdy, Franz Och, Noah Smith, and David Yarowsky.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA.
+
+ */
+/*--
+ Array2: Implementation of a twodimensional checked array allowing for
+ a specified underlieing one-dimensional data-structure.
+
+ Franz Josef Och (30/07/99)
+ --*/
+#ifndef CLASS_Array2_DEFINED
+#define CLASS_Array2_DEFINED
+
+#include "mystl.h"
+#include <string>
+#include <vector>
+
+template<class T, class Y=vector<T> > class Array2 {
+public:
+ Y p;
+ // short h1, h2;
+ unsigned int h1, h2;
+public:
+ Array2(unsigned int _h1, unsigned int _h2) :
+ p(_h1*_h2), h1(_h1), h2(_h2) {
+ }
+ Array2(unsigned int _h1, unsigned int _h2, const T&_init) :
+ p(_h1*_h2, _init), h1(_h1), h2(_h2) {
+ }
+ Array2() :
+ h1(0), h2(0) {
+ }
+ inline T &operator()(unsigned int i, unsigned int j) {
+ assert(i<h1);
+ assert(j<h2);
+ return p[i*h2+j];
+ }
+ inline const T&operator()(unsigned int i, unsigned int j) const {
+ assert(i<h1);
+ assert(j<h2);
+ return p[i*h2+j];
+ }
+ inline T get(unsigned int i, unsigned int j) {
+ assert(i<h1);
+ assert(j<h2);
+ return p[i*h2+j];
+ }
+ inline void set(unsigned int i, unsigned int j, T x) {
+ assert(i<h1);
+ assert(j<h2);
+ p[i*h2+j]=x;
+ }
+ inline const T get(unsigned int i, unsigned int j) const {
+ assert(i<h1);
+ assert(j<h2);
+ return p[i*h2+j];
+ }
+ inline unsigned int getLen1() const {
+ return h1;
+ }
+ inline unsigned int getLen2() const {
+ return h2;
+ }
+
+ inline T*begin() {
+ if (h1==0||h2==0)
+ return 0;
+ return &(p[0]);
+ }
+ inline T*end() {
+ if (h1==0||h2==0)
+ return 0;
+ return &(p[0])+p.size();
+ }
+
+ inline const T*begin() const {
+ return p.begin();
+ }
+ inline const T*end() const {
+ return p.end();
+ }
+
+ friend ostream&operator<<(ostream&out, const Array2<T, Y>&ar) {
+ for (unsigned int i=0; i<ar.getLen1(); i++) {
+ //out << i << ": ";
+ for (unsigned int j=0; j<ar.getLen2(); j++)
+ out << ar(i, j) << ' ';
+ out << '\n';
+ }
+ return out << endl;
+ }
+ inline void resize(unsigned int a, unsigned int b) {
+ if ( !(a==h1&&b==h2)) {
+ h1=a;
+ h2=b;
+ p.resize(h1*h2);
+ }
+ }
+ inline void resize(unsigned int a, unsigned int b, const T&t) {
+ if ( !(a==h1&&b==h2)) {
+ h1=a;
+ h2=b;
+ p.resize(h1*h2);
+ fill(p.begin(), p.end(), t);
+ }
+ }
+};
+
+#endif