SEP Solver Library  1.0
 All Classes Namespaces Files Functions Variables Typedefs Macros
Space.cpp
Go to the documentation of this file.
1 #include "Space.h"
2 #include "dataContainer.h"
3 
4 void SEP::MultiSpace::scale(float a, dataContainer * x, dataContainer * ax) const{
9  sp1->scale(a,x2->getData1(),ax2->getData1());
10  sp2->scale(a,x2->getData2(),ax2->getData2());
11 }
12 
13 void SEP::MultiSpace::scale(float a, dataContainer * x) const{
17  sp1->scale(a,x2->getData1());
18  sp2->scale(a,x2->getData2());
19 }
20 
21 // DN use dynamic_cast for RTTI checking?
25  SEP::MultiDataContainer *x2= dynamic_cast<SEP::MultiDataContainer*>( x );
26 
27  sp1->addInv(x2->getData1());
28  sp2->addInv(x2->getData2());
29 
30 }
31 
37  sp1->addInv(x2->getData1(),xNeg2->getData1());
38  sp2->addInv(x2->getData2(),xNeg2->getData2());
39 }
40 
41 /* void SEP::MultiSpace::norm(int p, dataContainer * x) const{
42  SEP::MultiDataContainer *x2=(SEP::MultiDataContainer*) x;
43  sp1->norm(p,x2->getData1());
44  sp2->norm(p,x2->getData2());
45 } */
46 
47 bool SEP::MultiSpace::isCompatible(SEP::Space *otherSpace, bool makeSame) const{
53  SEP::MultiSpace *s2=(SEP::MultiSpace*) otherSpace;
54  if(sp1->isCompatible(s2->getSpace1()) && sp2->isCompatible(s2->getSpace2())){
55  if(makeSame) s2->set_key(get_key());
56  return true;
57  }
58  return false;
59 }
60 
65 
66  if(sp1->isCompatible(x2->getData1())&&
67  sp2->isCompatible(x2->getData2())) return true;
68 
69  return false;
70 }
71 
72 
78  double sum=0.;
79  sum += sp1->innerProd(x2->getData1(),y2->getData1());
80  sum += sp2->innerProd(x2->getData2(),y2->getData2());
81 
82  return sum;
83 }
84 
85 void SEP::MultiSpace::linearCombo(float a, dataContainer * x, float b, dataContainer * y) const{
90  sp1->linearCombo(a,x2->getData1(),b,y2->getData1());
91  sp2->linearCombo(a,x2->getData2(),b,y2->getData2());
92 }
93 
94 
99  sp1->zeroElement(x2->getData1());
100  sp2->zeroElement(x2->getData2());
101 }
102 
103 /*SEP::MultiSpace SEP::MultiSpace::clone_space()const{
104  MultiSpace x;
105  x.sp1=sp1;
106  x.sp2=sp2;
107  return x;
108 }*/
109 
113  dataContainer *d1=sp1->buildDataContainer();
114  dataContainer *d2=sp2->buildDataContainer();
116  return mdc;
117 }
118 
122  sp1=s1;
123  sp2=s2;
124 }
125 
129  long long n1 = sp1->get_n123();
130  long long n2 = sp2->get_n123();
131  return n1+n2;
132 }
133 
138  sp1->random(x2->getData1());
139  sp2->random(x2->getData2());
140 }
141