| author | Nicolas Brodu <nicolas.brodu@numerimoire.net> | 2011-06-14 09:58:13 (GMT) |
|---|---|---|
| committer | Nicolas Brodu <nicolas.brodu@numerimoire.net> | 2011-06-14 09:58:13 (GMT) |
| commit | c5b7e126268997c7427a043e91f4ca79501d96ab (patch) | |
| tree | d974d2d827a7b405687f960a83d9740bae490f51 | |
| parent | 53793a68e53ed0a5e117a0ebef3fcf5c82b1b6fe (diff) | |
| download | decisional_states-master.tar.gz | |
small bugs corrected
| -rw-r--r-- | include/decisional_states.hpp | 12 | ||||
| -rw-r--r-- | include/decisional_states_joint_data_manager.hpp | 6 |
2 files changed, 13 insertions, 5 deletions
diff --git a/include/decisional_states.hpp b/include/decisional_states.hpp index 60db02f..8162002 100644 --- a/include/decisional_states.hpp +++ b/include/decisional_states.hpp @@ -665,6 +665,7 @@ public: result->count = 1; if (info && store) { info->causalState = result; + result->members = boost::shared_ptr<std::vector<StateInfo*> >(new std::vector<StateInfo*>); result->members->push_back(info); } return result; @@ -747,6 +748,7 @@ public: result->count = 1; if (info && store) { info->isoUtilityState = result; + result->members = boost::shared_ptr<std::vector<StateInfo*> >(new std::vector<StateInfo*>); result->members->push_back(info); // so user can access distribution, etc. } return result; @@ -825,6 +827,7 @@ public: result->count = 1; if (info && store) { info->isoPredictionState = result; + result->members = boost::shared_ptr<std::vector<StateInfo*> >(new std::vector<StateInfo*>); result->members->push_back(info); // so user can access distribution, etc. } return result; @@ -980,11 +983,16 @@ public: do { for (int ci=0; ci<(int)states.size(); ++ci) { if (states[ci]->flags<0) continue; // ignore previous roots, seek new ones + int ntrans = 0; for (typename TransitionSet::iterator it = states[ci]->transitions->begin(); it != states[ci]->transitions->end(); ++it) { // do not count self-refs - if (it->state!=states[ci].get()) ++it->state->flags; - + if (it->state!=states[ci].get()) { + ++it->state->flags; + ++ntrans; + } } + // terminal nodes are always recurrent + if (ntrans==0) states[ci]->flags = 1; } // roots are the nodes with no parent newRootsFound = false; diff --git a/include/decisional_states_joint_data_manager.hpp b/include/decisional_states_joint_data_manager.hpp index ac5c536..62c8fc6 100644 --- a/include/decisional_states_joint_data_manager.hpp +++ b/include/decisional_states_joint_data_manager.hpp @@ -444,7 +444,7 @@ struct DistDataSet { it->distribution.aggregate(icv); } - std::vector<DataType> missingData; + std::vector<boost::shared_ptr<DataType> > missingData; void prepareSequence(int seqsize) { dataSequence.resize(seqsize); @@ -456,8 +456,8 @@ struct DistDataSet { if (seqnum==-1) {seqnum = dataSequence.size(); dataSequence.resize(seqnum+1);} // missing data are kept in seq, but the null distribution is not added if (helpers::IsMissingHelper<typename TypeTraits::JointType,DataType>::isMissing(x) || d.get()==0 || d->sumContribs==0) { - missingData.push_back(x); - dataSequence[seqnum] = &missingData.back(); + missingData.push_back(boost::shared_ptr<DataType>(new DataType(x))); + dataSequence[seqnum] = missingData.back().get(); return; } typename DistMap::iterator it = distmap.find(x); |
