00001 /* 00002 * $Id$ 00003 * 00004 * Author: David Fournier 00005 * Copyright (c) 2008-2012 Regents of the University of California 00006 */ 00011 #include "fvar.hpp" 00012 00017 struct dvec_ptr_ptr 00018 { 00019 void ** m; 00020 }; 00021 00026 dmatrix& dmatrix::operator=(const dmatrix& m1) 00027 { 00028 if (allocated(*this)) 00029 { 00030 if (rowmin() != m1.rowmin() || rowmax() != m1.rowmax() || 00031 colmin() != m1.colmin() || colmax() != m1.colmax() ) 00032 { 00033 cerr << " Incompatible array bounds in " 00034 "dmatrix& operator = (const dmatrix&)\n"; 00035 ad_exit(21); 00036 } 00037 00038 if (m != m1.m) // check for condition that both matrices 00039 { // point to the same object 00040 for (int i=rowmin();i<=rowmax();i++) 00041 { 00042 *(m+i) = m1[i]; 00043 } 00044 } 00045 } 00046 else 00047 { 00048 index_min=m1.index_min; 00049 index_max=m1.index_max; 00050 shape=m1.shape; 00051 if (shape) 00052 { 00053 (shape->ncopies)++; 00054 } 00055 m = m1.m; 00056 } 00057 return(*this); 00058 } 00059 00064 dmatrix& dmatrix::operator+=(const dmatrix& m1) 00065 { 00066 if (rowmin() != m1.rowmin() || rowmax() != m1.rowmax() ) 00067 { 00068 cerr << " Incompatible array bounds in " 00069 "dmatrix& operator += (const dmatrix&)\n"; 00070 ad_exit(21); 00071 } 00072 00073 for (int i=rowmin();i<=rowmax();i++) 00074 { 00075 elem(i) += m1.elem(i); 00076 } 00077 return(*this); 00078 } 00079 00084 dmatrix& dmatrix::operator-=(const dmatrix& m1) 00085 { 00086 if (rowmin() != m1.rowmin() || rowmax() != m1.rowmax() ) 00087 { 00088 cerr << " Incompatible array bounds in " 00089 "dmatrix& operator -= (const dmatrix&)\n"; 00090 ad_exit(21); 00091 } 00092 00093 for (int i=rowmin();i<=rowmax();i++) 00094 { 00095 elem(i) -= m1.elem(i); 00096 } 00097 return(*this); 00098 }
Generated on Tue Mar 8 2016 19:51:32 for ADMB Documentation by 1.8.0 |