00001 /* 00002 File: SubVec.cc 00003 00004 Function: Implements SubVec.h 00005 00006 Author(s): Andrew Willmott 00007 00008 Copyright: (c) 1995-2000, Andrew Willmott 00009 00010 Notes: 00011 00012 */ 00013 00014 #include "vl/SubVec.h" 00015 #include "vl/Vec.h" 00016 00017 00018 // --- Vector Memory Management ----------------------------------------------- 00019 00020 00021 TSubVec::TSubVec(Int n, Int span, TVReal data[]) : elts(n), span(span), 00022 data(data) 00023 { 00024 } 00025 00026 TSubVec::TSubVec(const TSubVec &v) : elts(v.elts), span(v.span), data(v.data) 00027 { 00028 } 00029 00030 TSubVec::TSubVec(const TVec &v) : elts(v.Elts()), span(1), data(v.Ref()) 00031 { 00032 } 00033 00034 TSubVec &TSubVec::operator = (const TSubVec &v) 00035 { 00036 Assert(Elts() == v.Elts(), "(SubVec::=) Vector sizes don't match"); 00037 Int i; 00038 00039 for (i = 0; i < Elts(); i++) 00040 SELF[i] = v[i]; 00041 00042 return(SELF); 00043 } 00044 00045 TSubVec &TSubVec::operator = (const TVec &v) 00046 { 00047 Assert(Elts() == v.Elts(), "(SubVec::=) Vector sizes don't match"); 00048 Int i; 00049 00050 for (i = 0; i < Elts(); i++) 00051 SELF[i] = v[i]; 00052 00053 return(SELF); 00054 } 00055 00056 00057 // --- SubVec In-Place operators ---------------------------------------------- 00058 00059 00060 TSubVec &operator += (TSubVec &a, const TSubVec &b) 00061 { 00062 Assert(a.Elts() == b.Elts(), "(Vec::+=) vector sizes don't match"); 00063 00064 Int i; 00065 00066 for (i = 0; i < a.Elts(); i++) 00067 a[i] += b[i]; 00068 00069 return(a); 00070 } 00071 00072 TSubVec &operator -= (TSubVec &a, const TSubVec &b) 00073 { 00074 Assert(a.Elts() == b.Elts(), "(Vec::-=) vector sizes don't match"); 00075 00076 Int i; 00077 00078 for (i = 0; i < a.Elts(); i++) 00079 a[i] -= b[i]; 00080 00081 return(a); 00082 } 00083 00084 TSubVec &operator *= (TSubVec &a, const TSubVec &b) 00085 { 00086 Assert(a.Elts() == b.Elts(), "(Vec::*=) Vec sizes don't match"); 00087 00088 Int i; 00089 00090 for (i = 0; i < a.Elts(); i++) 00091 a[i] *= b[i]; 00092 00093 return(a); 00094 } 00095 00096 TSubVec &operator *= (TSubVec &v, TVReal s) 00097 { 00098 Int i; 00099 00100 for (i = 0; i < v.Elts(); i++) 00101 v[i] *= s; 00102 00103 return(v); 00104 } 00105 00106 TSubVec &operator /= (TSubVec &a, const TSubVec &b) 00107 { 00108 Assert(a.Elts() == b.Elts(), "(Vec::/=) Vec sizes don't match"); 00109 00110 Int i; 00111 00112 for (i = 0; i < a.Elts(); i++) 00113 a[i] /= b[i]; 00114 00115 return(a); 00116 } 00117 00118 TSubVec &operator /= (TSubVec &v, TVReal s) 00119 { 00120 Int i; 00121 00122 for (i = 0; i < v.Elts(); i++) 00123 v[i] /= s; 00124 00125 return(v); 00126 }