Minsky
schema3::Minsky Class Reference

#include <schema3.h>

Inheritance diagram for schema3::Minsky:
Inheritance graph
Collaboration diagram for schema3::Minsky:
Collaboration graph

Public Member Functions

 Minsky ()
 
 ~Minsky ()
 
 Minsky (const minsky::Group &g, bool packTensorData=true)
 
 Minsky (const minsky::Minsky &m, bool packTensorData=true)
 
void makeImpl ()
 
 Minsky (classdesc::xml_unpack_t &data)
 populate schema from XML data More...
 
 Minsky (const schema2::Minsky &m)
 
void populateSchemaPublicationTabs (const std::vector< minsky::PubTab > &)
 
void populatePublicationTabs (std::vector< minsky::PubTab > &) const
 
void populateMinsky (minsky::Minsky &) const
 create a Minsky model from this More...
 
void populateGroup (minsky::Group &g) const
 populate a group object from this. This mutates the ids in a consistent way into the free id space of the global minsky object More...
 

Public Attributes

int schemaVersion =Minsky::version
 
std::string minskyVersion ="unknown"
 
vector< Wirewires
 
vector< Itemitems
 
Optional< vector< int > > inVariables
 
Optional< vector< int > > outVariables
 
vector< Groupgroups
 
vector< LockGrouplockGroups
 
minsky::Simulation rungeKutta
 
double zoomFactor =1
 
vector< minsky::Bookmarkbookmarks
 
minsky::Dimensions dimensions
 
minsky::ConversionsMap conversions
 
PhillipsDiagram phillipsDiagram
 
std::vector< PublicationTabpublicationTabs
 
std::vector< ItempublicationItems
 

Static Public Attributes

static const int version =3
 

Private Member Functions

 CLASSDESC_ACCESS (Minsky)
 

Detailed Description

Definition at line 242 of file schema3.h.

Constructor & Destructor Documentation

◆ Minsky() [1/5]

schema3::Minsky::Minsky ( )
inline

Definition at line 263 of file schema3.h.

263 : schemaVersion(0) {makeImpl();} // schemaVersion defined on read in
int schemaVersion
Definition: schema3.h:247
void makeImpl()
Definition: schema3.cc:302

◆ ~Minsky()

schema3::Minsky::~Minsky ( )
default

◆ Minsky() [2/5]

schema3::Minsky::Minsky ( const minsky::Group g,
bool  packTensorData = true 
)

Definition at line 309 of file schema3.cc.

References minsky::GroupItems::groups, minsky::GroupItems::inVariables, minsky::GroupItems::items, minsky::GroupItems::outVariables, minsky::GroupItems::recursiveDo(), and minsky::GroupItems::wires.

310  {
311  makeImpl();
312  auto& itemMap=impl->itemMap;
313 
314  g.recursiveDo(&minsky::GroupItems::items,[&](const minsky::Items&,minsky::Items::const_iterator i) {
315  itemMap.emplaceIf<minsky::Ravel>(items, i->get()) ||
316  itemMap.emplaceIf<minsky::OperationBase>(items, i->get()) ||
317  itemMap.emplaceIf<minsky::VariableBase>(items, i->get()) ||
318  itemMap.emplaceIf<minsky::GodleyIcon>(items, i->get()) ||
319  itemMap.emplaceIf<minsky::PlotWidget>(items, i->get()) ||
320  itemMap.emplaceIf<minsky::SwitchIcon>(items, i->get()) ||
321  itemMap.emplaceIf<minsky::Sheet>(items, i->get()) ||
322  itemMap.emplaceIf<minsky::Item>(items, i->get());
323  if (packTensorData) //pack tensor data
324  if (auto* v=(*i)->variableCast())
325  if (!items.back().tensorData)
326  items.back().packTensorInit(*v);
327 
328  return false;
329  });
330 
331  // add any I/O variables
332  vector<int> inVars, outVars;
333  for (auto& i: g.inVariables)
334  inVars.push_back(itemMap[i.get()]);
335  for (auto& i: g.outVariables)
336  outVars.push_back(itemMap[i.get()]);
337  inVariables=inVars;
338  outVariables=outVars;
339 
340  // search for and link up integrals to their variables, and Godley table ports
341  g.recursiveDo(&minsky::GroupItems::items,[&](const minsky::Items&,minsky::Items::const_iterator i) {
342  if (auto* integ=dynamic_cast<minsky::IntOp*>(i->get()))
343  {
344  const int id=itemMap[i->get()];
345  for (auto& j: items)
346  if (j.id==id)
347  {
348  // nb conversion to Item* essential here, as
349  // conversion of derived class to void* may not be
350  // equivalent
351  assert(itemMap.count(static_cast<minsky::Item*>(integ->intVar.get())));
352  j.intVar.reset(new int(itemMap[static_cast<minsky::Item*>(integ->intVar.get())]));
353  break;
354  }
355  }
356  return false;
357  });
358 
360  [&](const minsky::Wires&,minsky::Wires::const_iterator i) {
361  wires.emplace_back(itemMap[i->get()], **i);
362  assert(itemMap.count((*i)->from().get()) && itemMap.count((*i)->to().get()));
363  wires.back().from=itemMap[(*i)->from().get()];
364  wires.back().to=itemMap[(*i)->to().get()];
365  return false;
366  });
367 
369  [&](const minsky::Groups&,minsky::Groups::const_iterator i) {
370  groups.emplace_back(itemMap[i->get()], **i);
371  for (auto& j: (*i)->items)
372  {
373  // some invisible items are excluded from the schema
374  assert(!j->visible() || itemMap.count(j.get()));
375  groups.back().items.push_back(itemMap[j.get()]);
376  if (j==(*i)->displayPlot)
377  groups.back().displayPlot=itemMap[j.get()];
378  }
379  for (auto& j: (*i)->groups)
380  groups.back().items.push_back(itemMap[j.get()]);
381  for (auto& v: (*i)->inVariables)
382  {
383  assert(itemMap.count(v.get()));
384  groups.back().inVariables->push_back(itemMap[v.get()]);
385  }
386  for (auto& v: (*i)->outVariables)
387  {
388  assert(itemMap.count(v.get()));
389  groups.back().outVariables->push_back(itemMap[v.get()]);
390  }
391  return false;
392  });
393 
394 
395 
396  // process lock groups
397  for (auto lg: itemMap.lockGroups)
398  {
399  lockGroups.emplace_back();
400  auto& slg=lockGroups.back();
401  for (auto& wr: lg->ravels())
402  if (auto r=wr.lock())
403  slg.ravels.push_back(itemMap.at(static_cast<minsky::Item*>(r.get())));
404  else
405  slg.ravels.push_back(-1); // indicate invalidity
406  for (auto& hli: lg->handleLockInfo)
407  slg.handleLockInfo.emplace_back(hli);
408  }
409  }
vector< LockGroup > lockGroups
Definition: schema3.h:253
std::vector< WirePtr > Wires
Definition: wire.h:103
std::vector< VariablePtr > inVariables
Definition: group.h:82
vector< Group > groups
Definition: schema3.h:252
vector< Item > items
Definition: schema3.h:250
bool recursiveDo(M GroupItems::*map, O op) const
Perform action heirarchically on elements of map map. If op returns true, the operation terminates...
Definition: group.h:111
std::vector< VariablePtr > outVariables
Definition: group.h:82
std::vector< ItemPtr > Items
Definition: item.h:366
Optional< vector< int > > outVariables
Definition: schema3.h:251
std::vector< GroupPtr > Groups
Definition: group.h:54
Groups groups
Definition: group.h:79
vector< Wire > wires
Definition: schema3.h:249
Optional< vector< int > > inVariables
Definition: schema3.h:251
a container item for a plot widget
Definition: plotWidget.h:46
void makeImpl()
Definition: schema3.cc:302
Here is the call graph for this function:

◆ Minsky() [3/5]

schema3::Minsky::Minsky ( const minsky::Minsky m,
bool  packTensorData = true 
)
inline

Definition at line 266 of file schema3.h.

References minsky::Minsky::conversions, minsky::Minsky::dimensions, minsky::Minsky::minskyVersion, minsky::Minsky::model, minsky::Minsky::phillipsDiagram, and minsky::Minsky::publicationTabs.

266  :
267  Minsky(*m.model,packTensorData) {
269  rungeKutta=m;
270  zoomFactor=m.model->zoomFactor();
271  bookmarks.insert(bookmarks.end(), m.model->bookmarks.begin(), m.model->bookmarks.end());
274  phillipsDiagram=PhillipsDiagram(m.phillipsDiagram);
276  }
vector< minsky::Bookmark > bookmarks
Definition: schema3.h:256
minsky::Dimensions dimensions
Definition: schema3.h:257
double zoomFactor
Definition: schema3.h:255
PhillipsDiagram phillipsDiagram
Definition: schema3.h:259
void populateSchemaPublicationTabs(const std::vector< minsky::PubTab > &)
Definition: schema3.cc:428
std::vector< PubTab > publicationTabs
Definition: minsky.h:156
minsky::ConversionsMap conversions
Definition: schema3.h:258
minsky::Simulation rungeKutta
Definition: schema3.h:254
static const std::string minskyVersion
return the AEGIS assigned version number
Definition: minsky.h:337
std::string minskyVersion
Definition: schema3.h:248
PhillipsDiagram phillipsDiagram
Definition: minsky.h:155
GroupPtr model
Definition: minsky.h:255
Conversions conversions
Definition: minsky.h:202
Dimensions dimensions
Definition: minsky.h:201

◆ Minsky() [4/5]

schema3::Minsky::Minsky ( classdesc::xml_unpack_t &  data)
inline

populate schema from XML data

Definition at line 281 of file schema3.h.

281  : schemaVersion(0)
282  {makeImpl(); minsky::loadSchema<schema2::Minsky>(*this,data,"Minsky");}
int schemaVersion
Definition: schema3.h:247
void makeImpl()
Definition: schema3.cc:302

◆ Minsky() [5/5]

schema3::Minsky::Minsky ( const schema2::Minsky m)
inline

Definition at line 284 of file schema3.h.

284  :
286  wires(m.wires.begin(), m.wires.end()),
287  items(m.items.begin(), m.items.end()),
288  groups(m.groups.begin(), m.groups.end()), rungeKutta(m.rungeKutta),
vector< minsky::Bookmark > bookmarks
Definition: schema3.h:256
minsky::Dimensions dimensions
Definition: schema3.h:257
double zoomFactor
Definition: schema3.h:255
int schemaVersion
Definition: schema2.h:200
vector< Group > groups
Definition: schema3.h:252
vector< Group > groups
Definition: schema2.h:203
vector< Wire > wires
Definition: schema2.h:201
vector< Item > items
Definition: schema3.h:250
minsky::Dimensions dimensions
Definition: schema2.h:207
int schemaVersion
Definition: schema3.h:247
minsky::Simulation rungeKutta
Definition: schema2.h:204
minsky::ConversionsMap conversions
Definition: schema3.h:258
minsky::Simulation rungeKutta
Definition: schema3.h:254
vector< Item > items
Definition: schema2.h:202
vector< Wire > wires
Definition: schema3.h:249
void makeImpl()
Definition: schema3.cc:302
vector< minsky::Bookmark > bookmarks
Definition: schema2.h:206
double zoomFactor
Definition: schema2.h:205
minsky::ConversionsMap conversions
Definition: schema2.h:208

Member Function Documentation

◆ CLASSDESC_ACCESS()

schema3::Minsky::CLASSDESC_ACCESS ( Minsky  )
private

◆ makeImpl()

void schema3::Minsky::makeImpl ( )

Definition at line 302 of file schema3.cc.

303  {
304  impl=make_shared<MinskyImpl>();
305  }

◆ populateGroup()

void schema3::Minsky::populateGroup ( minsky::Group g) const

populate a group object from this. This mutates the ids in a consistent way into the free id space of the global minsky object

Definition at line 636 of file schema3.cc.

References minsky::GroupItems::addGroup(), minsky::Group::addItem(), minsky::GroupItems::addWire(), minsky::decode(), schema1::factory(), minsky::GroupItems::findItem(), minsky::VariableType::flow, minsky::VariableType::integral, minsky::GroupItems::inVariables, minsky::GroupItems::outVariables, schema3::populateItem(), schema3::populateNote(), schema3::populateWire(), minsky::GroupItems::removeItem(), minsky::VariableType::stock, and unpack().

Referenced by minsky::Minsky::insertGroupFromFile(), minsky::Minsky::paste(), and minsky::Minsky::undo().

636  {
637  assert(impl.get());
638  auto& itemMap=impl->reverseItemMap;
639  map<int, weak_ptr<minsky::Port>> portMap;
640  map<int, schema3::Item> schema3VarMap;
641  const MinskyItemFactory factory;
642  map<int,LockGroupFactory> lockGroups;
643 
644  for (const auto& i: items)
645  if (auto newItem=itemMap[i.id]=g.addItem(factory.create(i.type)))
646  {
647  populateItem(*newItem,i);
648  for (size_t j=0; j<min(newItem->portsSize(), i.ports.size()); ++j)
649  portMap[i.ports[j]]=newItem->ports(j);
650  if (newItem->variableCast())
651  schema3VarMap[i.id]=i;
652  }
653 
654  if (inVariables)
655  for (auto i: *inVariables)
656  g.inVariables.push_back(itemMap[i]);
657  if (outVariables)
658  for (auto i: *outVariables)
659  g.outVariables.push_back(itemMap[i]);
660 
661  // second loop over items to wire up integrals, and populate Godley table variables
662  for (const auto& i: items)
663  {
664  if ((i.type=="IntOp" || i.type=="Operation:integrate") && i.intVar)
665  {
666  assert(itemMap.count(i.id));
667  assert(dynamic_pointer_cast<minsky::IntOp>(itemMap[i.id]));
668  if (auto* integ=dynamic_cast<minsky::IntOp*>(itemMap[i.id].get()))
669  {
670  assert(integ->intVar);
671  assert(integ->intVar->type()==minsky::VariableType::integral);
672  if (itemMap.contains(*i.intVar))
673  {
674  if (integ->coupled()) integ->toggleCoupled();
675  g.removeItem(*integ->intVar);
676  integ->intVar=itemMap[*i.intVar];
677  if (!integ->intVar || integ->intVar->type()!=minsky::VariableType::integral)
678  // input mky file is corrupted at this point
679  integ->description(integ->description());
680  }
681  auto iv=schema3VarMap.find(*i.intVar);
682  if (iv!=schema3VarMap.end())
683  if ((!i.ports.empty() && !iv->second.ports.empty() && i.ports[0]==iv->second.ports[0]) != integ->coupled())
684  integ->toggleCoupled();
685  // ensure that the correct port is inserted (may have been the deleted intVar)
686  if (!i.ports.empty())
687  portMap[i.ports[0]]=integ->coupled()? integ->intVar->ports(0): integ->ports(0);
688  }
689  }
690  if (i.type=="GodleyIcon")
691  {
692  assert(itemMap.count(i.id));
693  if (auto* godley=dynamic_cast<minsky::GodleyIcon*>(itemMap[i.id].get()))
694  {
695  minsky::GodleyIcon::Variables flowVars, stockVars;
696  for (auto p: i.ports)
697  {
698  auto newP=portMap.find(p);
699  if (newP!=portMap.end())
700  if (auto ip=g.findItem(newP->second.lock()->item()))
701  if (auto v=dynamic_pointer_cast<minsky::VariableBase>(ip))
702  switch (v->type())
703  {
705  stockVars.push_back(v);
706  break;
708  flowVars.push_back(v);
709  break;
710  default:
711  break;
712  }
713  }
714  SchemaHelper::setStockAndFlow(*godley, flowVars, stockVars);
715  try
716  {
717  godley->update();
718  }
719  catch (...) {} //ignore exceptions: ticket #1045
720  }
721  }
722  if (i.type=="Ravel" && i.lockGroup)
723  if (auto r=dynamic_pointer_cast<minsky::Ravel>(itemMap[i.id]))
724  {
725  // note: legacy lock group format handling
726  r->lockGroup=lockGroups[*i.lockGroup];
727  r->lockGroup->addRavel(r);
728  if (i.lockGroupHandles)
729  r->lockGroup->setLockHandles({i.lockGroupHandles->begin(), i.lockGroupHandles->end()});
730  }
731  }
732 
733  // add in new lockGroup info
734  for (auto& lgi: this->lockGroups)
735  {
736  auto lockGroup=make_shared<minsky::RavelLockGroup>();
737  for (auto i: lgi.ravels)
738  if (auto r=dynamic_pointer_cast<minsky::Ravel>(itemMap[i]))
739  {
740  lockGroup->addRavel(r);
741  r->lockGroup=lockGroup;
742  }
743  else
744  lockGroup->addRavel({});
745  lockGroup->handleLockInfo=lgi.handleLockInfo;
746  }
747 
748  for (const auto& w: wires)
749  if (portMap.contains(w.to) && portMap.contains(w.from))
750  {
752  (*g.addWire(new minsky::Wire(portMap[w.from],portMap[w.to])),w);
753  }
754 
755  for (const auto& i: groups)
756  populateItem(*(itemMap[i.id]=g.addGroup(new minsky::Group)),i);
757 
758  // second loop over groups, because groups can contain other groups
759  for (const auto& i: groups)
760  {
761  assert(itemMap.count(i.id));
762  auto newG=dynamic_pointer_cast<minsky::Group>(itemMap[i.id]);
763  if (newG)
764  {
765  for (auto j: i.items)
766  {
767  auto it=itemMap.find(j);
768  if (it!=itemMap.end())
769  {
770  newG->addItem(it->second, true/*inSchema*/);
771  }
772  }
773  if (i.displayPlot>=0)
774  {
775  auto it=itemMap.find(i.displayPlot);
776  if (it!=itemMap.end())
777  newG->displayPlot=dynamic_pointer_cast<minsky::PlotWidget>(it->second);
778  }
779  if (i.inVariables)
780  for (auto j: *i.inVariables)
781  {
782  auto it=itemMap.find(j);
783  if (it!=itemMap.end())
784  if (auto v=dynamic_pointer_cast<minsky::VariableBase>(it->second))
785  {
786  newG->addItem(it->second);
787  newG->inVariables.push_back(v);
788  v->controller=newG;
789  }
790  }
791  if (i.outVariables)
792  for (auto j: *i.outVariables)
793  {
794  auto it=itemMap.find(j);
795  if (it!=itemMap.end())
796  if (auto v=dynamic_pointer_cast<minsky::VariableBase>(it->second))
797  {
798  newG->addItem(it->second);
799  newG->outVariables.push_back(v);
800  v->controller=newG;
801  }
802  }
803  }
804  }
805  // now that variables have been homed in their groups, set the variableValue stuff
806  for (auto& i: schema3VarMap)
807  {
808  auto it=itemMap.find(i.first);
809  if (!it->second) continue;
810  if (auto* v=it->second->variableCast())
811  {
812  if (i.second.init)
813  v->init(*i.second.init);
814  if (i.second.units)
815  v->setUnits(*i.second.units);
816  populateNote(*v,i.second);
817  if (auto val=v->vValue())
818  {
819  if (i.second.csvDataSpec)
820  val->csvDialog.spec=*i.second.csvDataSpec;
821  if (i.second.url)
822  val->csvDialog.url=*i.second.url;
823  if (i.second.tensorData)
824  {
825  auto buf=minsky::decode(*i.second.tensorData);
826  try
827  {
828  civita::TensorVal tmp;
829  unpack(buf, tmp);
830  *val=tmp;
831  val->tensorInit=std::move(tmp);
832  assert(val->idxInRange());
833  }
834  catch (const std::exception& ex) {
835  val->tensorInit.hypercube({});
836 #if !defined(NDEBUG) || !defined(_WIN32)
837  cout<<ex.what()<<endl;
838 #endif
839  }
840  catch (...) {
841  val->tensorInit.hypercube({});
842  assert(val->idxInRange());
843  } // absorb for now - maybe log later
844  }
845  }
846  }
847  }
848  }
vector< LockGroup > lockGroups
Definition: schema3.h:253
std::vector< VariablePtr > inVariables
Definition: group.h:82
void populateWire(minsky::Wire &x, const Wire &y)
Definition: schema3.cc:598
classdesc::pack_t decode(const classdesc::CDATA &data)
decode ascii-encoded representation to binary data
Definition: schemaHelper.cc:34
ItemPtr addItem(const std::shared_ptr< Item > &it, bool inSchema=false) override
Definition: group.h:262
vector< Group > groups
Definition: schema3.h:252
void populateNote(minsky::NoteBase &x, const Note &y)
Definition: schema3.cc:467
vector< Item > items
Definition: schema3.h:250
std::vector< VariablePtr > outVariables
Definition: group.h:82
ItemPtr findItem(const Item &it) const
finds item within this group or subgroups. Returns null if not found
Definition: group.cc:291
GroupPtr addGroup(const std::shared_ptr< Group > &)
Definition: group.cc:659
void unpack(classdesc::pack_t &b, civita::XVector &a)
Definition: schema3.cc:47
Optional< vector< int > > outVariables
Definition: schema3.h:251
static void setStockAndFlow(minsky::GodleyIcon &g, const minsky::GodleyIcon::Variables &flowVars, const minsky::GodleyIcon::Variables &stockVars)
Definition: schemaHelper.h:85
std::unique_ptr< T > factory(const std::string &)
std::vector< VariablePtr > Variables
Definition: godleyIcon.h:111
vector< Wire > wires
Definition: schema3.h:249
WirePtr addWire(const Item &from, const Item &to, unsigned toPortIdx, const std::vector< float > &coords)
add a wire from item from, to item to, connecting to the toIdx port of to, with coordinates ...
Definition: group.h:63
void populateItem(minsky::Item &x, const Item &y)
Definition: schema3.cc:475
Optional< vector< int > > inVariables
Definition: schema3.h:251
ItemPtr removeItem(const Item &)
Definition: group.cc:212
Here is the call graph for this function:
Here is the caller graph for this function:

◆ populateMinsky()

void schema3::Minsky::populateMinsky ( minsky::Minsky m) const

create a Minsky model from this

Definition at line 448 of file schema3.cc.

References minsky::Minsky::canvas, minsky::Minsky::conversions, minsky::Minsky::dimensions, minsky::Minsky::fileVersion, minsky::Canvas::model, minsky::Minsky::model, minsky::Minsky::phillipsDiagram, and minsky::Minsky::publicationTabs.

Referenced by minsky::Minsky::load().

449  {
450  const minsky::LocalMinsky lm(m);
451  m.model->clear();
452  populateGroup(*m.model);
453  m.canvas.model=m.model;
454 
455  m.model->setZoom(zoomFactor);
456  m.model->bookmarks.insert(bookmarks.begin(), bookmarks.end());
460 
461  static_cast<minsky::Simulation&>(m)=rungeKutta;
462 
465  }
vector< minsky::Bookmark > bookmarks
Definition: schema3.h:256
void populatePublicationTabs(std::vector< minsky::PubTab > &) const
Definition: schema3.cc:610
minsky::Dimensions dimensions
Definition: schema3.h:257
double zoomFactor
Definition: schema3.h:255
void populatePhillipsDiagram(minsky::PhillipsDiagram &) const
populate a Phillips Diagram from this
Definition: schema3.cc:850
void populateGroup(minsky::Group &g) const
populate a group object from this. This mutates the ids in a consistent way into the free id space of...
Definition: schema3.cc:636
PhillipsDiagram phillipsDiagram
Definition: schema3.h:259
Model model
Definition: canvas.h:103
std::vector< PubTab > publicationTabs
Definition: minsky.h:156
Canvas canvas
Definition: minsky.h:256
minsky::ConversionsMap conversions
Definition: schema3.h:258
minsky::Simulation rungeKutta
Definition: schema3.h:254
std::string minskyVersion
Definition: schema3.h:248
PhillipsDiagram phillipsDiagram
Definition: minsky.h:155
RAII set the minsky object to a different one for the current scope.
Definition: minsky.h:551
GroupPtr model
Definition: minsky.h:255
Conversions conversions
Definition: minsky.h:202
Dimensions dimensions
Definition: minsky.h:201
std::string fileVersion
Minsky version file was saved under.
Definition: minsky.h:351
Here is the caller graph for this function:

◆ populatePublicationTabs()

void schema3::Minsky::populatePublicationTabs ( std::vector< minsky::PubTab > &  pubTabs) const

Definition at line 610 of file schema3.cc.

References schema1::factory(), and schema3::populateItem().

Referenced by minsky::Minsky::undo().

611  {
612  assert(impl.get());
613  auto& itemMap=impl->reverseItemMap;
614 
615  // add in publication tab only items
616  const MinskyItemFactory factory;
617  for (auto& i: publicationItems)
618  if (auto newItem=itemMap[i.id]=minsky::ItemPtr(factory.create(i.type)))
619  populateItem(*newItem,i);
620 
621  pubTabs.clear();
622  for (auto& pub: publicationTabs)
623  {
624  pubTabs.emplace_back(pub.name);
625  pubTabs.back().offsx=pub.x;
626  pubTabs.back().offsy=pub.y;
627  pubTabs.back().m_zoomFactor=pub.zoomFactor;
628 
629  for (auto& item: pub.items)
630  if (itemMap.contains(item.item))
631  pubTabs.back().items.emplace_back(itemMap[item.item], item);
632  }
633  if (pubTabs.empty()) pubTabs.emplace_back("Publication");
634  }
std::shared_ptr< Item > ItemPtr
Definition: item.h:57
std::unique_ptr< T > factory(const std::string &)
void populateItem(minsky::Item &x, const Item &y)
Definition: schema3.cc:475
std::vector< Item > publicationItems
Definition: schema3.h:261
std::vector< PublicationTab > publicationTabs
Definition: schema3.h:260
Here is the call graph for this function:
Here is the caller graph for this function:

◆ populateSchemaPublicationTabs()

void schema3::Minsky::populateSchemaPublicationTabs ( const std::vector< minsky::PubTab > &  pubTabs)

Definition at line 428 of file schema3.cc.

References schema3::IdMap::emplaceIf().

429  {
430  assert(impl.get());
431  auto& itemMap=impl->itemMap;
432  publicationTabs.clear();
433  if (pubTabs.size()==1 && pubTabs.front().items.empty()) return; // don't bother adding a single empty pub tab
434  for (auto& i: pubTabs)
435  {
436  publicationTabs.emplace_back();
437  publicationTabs.back().name=i.name;
438  for (auto& j: i.items)
439  {
440  // add locally added notes on publication tab to items list in schema
441  if (!itemMap.count(j.itemRef.get()))
442  itemMap.emplaceIf<minsky::Item>(publicationItems,j.itemRef.get());
443  publicationTabs.back().items.emplace_back(itemMap[j.itemRef.get()], j);
444  }
445  }
446  }
std::vector< Item > publicationItems
Definition: schema3.h:261
std::vector< PublicationTab > publicationTabs
Definition: schema3.h:260
Here is the call graph for this function:

Member Data Documentation

◆ bookmarks

vector<minsky::Bookmark> schema3::Minsky::bookmarks

Definition at line 256 of file schema3.h.

◆ conversions

minsky::ConversionsMap schema3::Minsky::conversions

Definition at line 258 of file schema3.h.

◆ dimensions

minsky::Dimensions schema3::Minsky::dimensions

Definition at line 257 of file schema3.h.

◆ groups

vector<Group> schema3::Minsky::groups

Definition at line 252 of file schema3.h.

◆ inVariables

Optional<vector<int> > schema3::Minsky::inVariables

Definition at line 251 of file schema3.h.

◆ items

vector<Item> schema3::Minsky::items

Definition at line 250 of file schema3.h.

◆ lockGroups

vector<LockGroup> schema3::Minsky::lockGroups

Definition at line 253 of file schema3.h.

◆ minskyVersion

std::string schema3::Minsky::minskyVersion ="unknown"

Definition at line 248 of file schema3.h.

◆ outVariables

Optional<vector<int> > schema3::Minsky::outVariables

Definition at line 251 of file schema3.h.

◆ phillipsDiagram

PhillipsDiagram schema3::Minsky::phillipsDiagram

Definition at line 259 of file schema3.h.

Referenced by minsky::Minsky::undo().

◆ publicationItems

std::vector<Item> schema3::Minsky::publicationItems

Definition at line 261 of file schema3.h.

◆ publicationTabs

std::vector<PublicationTab> schema3::Minsky::publicationTabs

Definition at line 260 of file schema3.h.

◆ rungeKutta

minsky::Simulation schema3::Minsky::rungeKutta

Definition at line 254 of file schema3.h.

◆ schemaVersion

int schema3::Minsky::schemaVersion =Minsky::version

Definition at line 247 of file schema3.h.

Referenced by minsky::Minsky::load().

◆ version

const int schema3::Minsky::version =3
static

Definition at line 246 of file schema3.h.

Referenced by minsky::Minsky::load().

◆ wires

vector<Wire> schema3::Minsky::wires

Definition at line 249 of file schema3.h.

◆ zoomFactor

double schema3::Minsky::zoomFactor =1

Definition at line 255 of file schema3.h.

Referenced by minsky::Minsky::undo().


The documentation for this class was generated from the following files: