Example #1
0
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;
}
Example #2
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;
}
Example #3
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();
    }
}