DictionaryDatum Node::get_status_base() { DictionaryDatum dict = get_status_dict_(); assert( dict.valid() ); // add information available for all nodes ( *dict )[ names::local ] = is_local(); ( *dict )[ names::model ] = LiteralDatum( get_name() ); // add information available only for local nodes if ( is_local() ) { ( *dict )[ names::global_id ] = get_gid(); ( *dict )[ names::frozen ] = is_frozen(); ( *dict )[ names::node_uses_wfr ] = node_uses_wfr(); ( *dict )[ names::thread ] = get_thread(); ( *dict )[ names::vp ] = get_vp(); if ( parent_ ) { ( *dict )[ names::parent ] = parent_->get_gid(); // LIDs are only sensible for nodes with parents. // Add 1 as we count lids internally from 0, but from // 1 in the user interface. ( *dict )[ names::local_id ] = get_lid() + 1; } } ( *dict )[ names::thread_local_id ] = get_thread_lid(); ( *dict )[ names::supports_precise_spikes ] = is_off_grid(); // This is overwritten with a corresponding value in the // base classes for stimulating and recording devices, and // in other special node classes ( *dict )[ names::element_type ] = LiteralDatum( names::neuron ); // now call the child class' hook get_status( dict ); assert( dict.valid() ); return dict; }
void Node::set_status_base( const DictionaryDatum& dict ) { assert( dict.valid() ); try { set_status( dict ); } catch ( BadProperty& e ) { throw BadProperty( String::compose( "Setting status of a '%1' with GID %2: %3", get_name(), get_gid(), e.message() ) ); } updateValue< bool >( dict, names::frozen, frozen_ ); }
void Node::set_status_base(const DictionaryDatum &dict) { assert(dict.valid()); // We call the child's set_status first, so that the Node remains // unchanged if the child should throw an exception. set_status(dict); if(dict->known(names::frozen)) { bool frozen_val=(*dict)[names::frozen]; if( frozen_val == true ) set(frozen); else unset(frozen); } }