CYCLUS
res_manip.cc
Go to the documentation of this file.
1 #include "res_manip.h"
2 #include "comp_math.h"
3 
4 namespace cyclus {
5 namespace toolkit {
6 
7 Product::Ptr Squash(std::vector<Product::Ptr> ps) {
8  if (ps.size() == 0) {
9  throw Error("cannot squash zero resources together");
10  }
11 
12  Product::Ptr p = ps[0];
13  for (int i = 1; i < ps.size(); ++i) {
14  p->Absorb(ps[i]);
15  }
16  return p;
17 }
18 
19 Material::Ptr Squash(std::vector<Material::Ptr> ms) {
20  if (ms.size() == 0) {
21  throw Error("cannot squash zero resources together");
22  }
23 
24  Material::Ptr m = ms[0];
25  for (int i = 1; i < ms.size(); ++i) {
26  m->Absorb(ms[i]);
27  }
28  return m;
29 }
30 
31 Resource::Ptr Squash(std::vector<Resource::Ptr> rs) {
32  if (rs.size() == 0) {
33  throw Error("cannot squash zero resources together");
34  }
35 
36  std::vector<Material::Ptr> mats = ::cyclus::ResCast<Material>(rs);
37  if (mats[0] != NULL) {
38  return Squash(mats);
39  }
40  std::vector<Product::Ptr> prods = ::cyclus::ResCast<Product>(rs);
41  if (prods[0] != NULL) {
42  return Squash(prods);
43  }
44 
45  throw Error("cannot squash resource type " + rs[0]->type());
46 }
47 
48 std::vector<Resource::Ptr> ResCast(std::vector<Material::Ptr> rs) {
49  std::vector<Resource::Ptr> casted;
50  for (int i = 0; i < rs.size(); ++i) {
51  casted.push_back(boost::dynamic_pointer_cast<Resource>(rs[i]));
52  }
53  return casted;
54 }
55 
56 std::vector<Resource::Ptr> ResCast(std::vector<Product::Ptr> rs) {
57  std::vector<Resource::Ptr> casted;
58  for (int i = 0; i < rs.size(); ++i) {
59  casted.push_back(boost::dynamic_pointer_cast<Resource>(rs[i]));
60  }
61  return casted;
62 }
63 
64 std::vector<Resource::Ptr> ResCast(std::vector<Resource::Ptr> rs) {
65  return rs;
66 }
67 
68 } // namespace toolkit
69 } // namespace cyclus
70 
A generic mechanism to manually manage exceptions.
Definition: error.h:12
boost::shared_ptr< Material > Ptr
Definition: material.h:75
Product::Ptr Squash(std::vector< Product::Ptr > ps)
Squash combines all products in ps and returns the resulting single product.
Definition: res_manip.cc:7
boost::shared_ptr< Product > Ptr
Definition: product.h:24
boost::shared_ptr< Resource > Ptr
Definition: resource.h:24
taken directly from OsiSolverInterface.cpp on 2/17/14 from https://projects.coin-or.org/Osi/browser/trunk.
Definition: agent.cc:14
std::vector< Resource::Ptr > ResCast(std::vector< Material::Ptr > rs)
Casts a vector of Materials into a vector of Resources.
Definition: res_manip.cc:48