00001
00002
00003
00004
00005
00006
00007
00008 #include "BinaryOp.h"
00009
00010
00011 BinaryOp::BinaryOp() :
00012 Implicit()
00013 {
00014 m_f = NULL;
00015 m_g = NULL;
00016 }
00017
00018
00019
00020
00021
00022
00023 BinaryOp::BinaryOp(Implicit *f, Implicit *g) :
00024 Implicit()
00025 {
00026 m_f = f;
00027 m_g = g;
00028 }
00029
00030
00031
00032
00033
00034
00035 int BinaryOp::qlen()
00036 {
00037 return ((m_f ? m_f->qlen() : 0) +
00038 (m_g ? m_g->qlen() : 0));
00039 }
00040
00041
00042
00043
00044
00045
00046 void BinaryOp::_setq(double *q)
00047 {
00048 if (m_f) m_f->_setq(q);
00049 if (m_g) m_g->_setq(&q[(m_f ? m_f->qlen() : 0)]);
00050 }
00051
00052
00053
00054
00055
00056
00057 void BinaryOp::getq(double *q)
00058 {
00059 if (m_f) m_f->getq(q);
00060 if (m_g) m_g->getq(&q[(m_f ? m_f->qlen() : 0)]);
00061 }
00062
00063
00064
00065
00066
00067
00068 void BinaryOp::procq(gmVector3 x, double *q)
00069 {
00070 if (m_f) m_f->procq(x, q);
00071 if (m_g) m_g->procq(x, &q[(m_f ? m_f->qlen() : 0)]);
00072 }
00073
00074
00075
00076
00077
00078
00079
00080 bool BinaryOp::setChild(int index, Implicit* child)
00081 {
00082 bool retval = false;
00083
00084 if (index == 0)
00085 {
00086 m_f = child;
00087 retval = true;
00088 }
00089 else if (index == 1)
00090 {
00091 m_g = child;
00092 retval = true;
00093 }
00094
00095 return retval;
00096 }
00097
00098
00099
00100
00101
00102
00103 Implicit* BinaryOp::getChild(int index)
00104 {
00105 if (index == 0)
00106 return m_f;
00107 else if (index == 1)
00108 return m_g;
00109
00110 return NULL;
00111 }
00112
00113 int BinaryOp::numChildren()
00114 {
00115 int numchild = 0;
00116 if (m_f != NULL)
00117 numchild++;
00118 if (m_g != NULL)
00119 numchild++;
00120
00121 return numchild;
00122 }
00123
00124
00125
00126
00127
00128
00129
00130
00131 void BinaryOp::getqname(char **qn)
00132 {
00133 std::string name;
00134 int fqlen = m_f ? m_f->qlen() : 0;
00135 int gqlen = m_g ? m_g->qlen() : 0;
00136 int myqlen = qlen() - fqlen - gqlen;
00137
00138 if (m_f) m_f->getqname(&qn[myqlen]);
00139 if (m_g) m_g->getqname(&qn[myqlen + fqlen]);
00140
00141 #ifdef USENAMES
00142
00143 for (i = myqlen; i < myqlen + fqlen; i++)
00144 {
00145 name = m_f->getObjectName() + ":" + qn[i];
00146 qn[i] = (char *)malloc(name.length()*sizeof(char) + 1);
00147 strcpy(qn[i],name.c_str());
00148 }
00149
00150 for (i = myqlen + fqlen; i < myqlen + fqlen + gqlen; i++)
00151 {
00152 name = m_g->getObjectName() + ":" + qn[i];
00153 qn[i] = (char *)malloc(name.length()*sizeof(char) + 1);
00154 strcpy(qn[i],name.c_str());
00155 }
00156 #endif
00157 }
00158