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 }