QoreString* QoreValue::getAsString(bool& del, int format_offset, ExceptionSink* xsink) const { if (isNothing()) { del = false; return format_offset == FMT_YAML_SHORT ? &YamlNullString : &NothingTypeString; } switch (type) { case QV_Int: del = true; return new QoreStringMaker(QLLD, v.i); case QV_Bool: del = false; return v.b ? &TrueString : &FalseString; case QV_Float: del = true; return new QoreStringMaker("%.9g", v.f); case QV_Node: return v.n->getAsString(del, format_offset, xsink); default: assert(false); // no break; } return 0; }
int QoreValue::getAsString(QoreString& str, int format_offset, ExceptionSink *xsink) const { if (isNothing()) { str.concat(format_offset == FMT_YAML_SHORT ? &YamlNullString : &NothingTypeString); return 0; } switch (type) { case QV_Int: str.sprintf(QLLD, v.i); break; case QV_Bool: str.concat(v.b ? &TrueString : &FalseString); break; case QV_Float: str.sprintf("%.9g", v.f); break; case QV_Node: return v.n->getAsString(str, format_offset, xsink); default: assert(false); // no break; } return 0; }
void Scheduler::_runLocal() { while ( !_terminate.load( std::memory_order::memory_order_relaxed ) ) { auto maybeUpdate = _stateUpdateIn.timeoutDequeue( _heartbeat.threshold() / 10 ); if ( !maybeUpdate.isNothing() ) { auto update = maybeUpdate.value(); _globalState.update( update.state ); std::cerr << "state update: { id = " << update.state.id << ", timestamp = " << update.state.timestamp << ", changeType = " << showChange( update.changeType ) << ", changeFloor = " << update.changeFloor << ", stopped = " << update.state.stopped << ", direction = " << int( update.state.direction ) << " }" << std::endl; if ( update.state.id == _localElevId ) { _stateUpdateOut.enqueue( update ); // propagate update } // each elevator is responsible for scheduling commnads from its hardware switch ( update.changeType ) { case ChangeType::None: case ChangeType::KeepAlive: case ChangeType::OtherChange: continue; case ChangeType::ButtonUpPressed: _handleButtonPress( update.state.id, ButtonType::CallUp, update.changeFloor ); break; case ChangeType::ButtonDownPressed: _handleButtonPress( update.state.id, ButtonType::CallDown, update.changeFloor ); break; case ChangeType::ServedDown: _forwardToTargets( Command{ CommandType::TurnOffLightDown, _localElevId, update.changeFloor } ); break; case ChangeType::ServedUp: _forwardToTargets( Command{ CommandType::TurnOffLightUp, _localElevId, update.changeFloor } ); break; } } _heartbeat.beat(); } }