void TemplightProtobufReader::loadBeginEntry(llvm::StringRef aSubBuffer) { // Set default values: LastBeginEntry.InstantiationKind = 0; LastBeginEntry.Name = ""; LastBeginEntry.TimeStamp = 0.0; LastBeginEntry.MemoryUsage = 0; while ( aSubBuffer.size() ) { unsigned int cur_wire = llvm::protobuf::loadVarInt(aSubBuffer); switch( cur_wire ) { case llvm::protobuf::getVarIntWire<1>::value: LastBeginEntry.InstantiationKind = llvm::protobuf::loadVarInt(aSubBuffer); break; case llvm::protobuf::getStringWire<2>::value: { std::uint64_t cur_size = llvm::protobuf::loadVarInt(aSubBuffer); loadTemplateName(aSubBuffer.slice(0, cur_size)); aSubBuffer = aSubBuffer.drop_front(cur_size); break; } case llvm::protobuf::getStringWire<3>::value: { std::uint64_t cur_size = llvm::protobuf::loadVarInt(aSubBuffer); loadLocation(aSubBuffer.slice(0, cur_size), fileNameMap, LastBeginEntry.FileName, LastBeginEntry.Line, LastBeginEntry.Column); aSubBuffer = aSubBuffer.drop_front(cur_size); break; } case llvm::protobuf::getDoubleWire<4>::value: LastBeginEntry.TimeStamp = llvm::protobuf::loadDouble(aSubBuffer); break; case llvm::protobuf::getVarIntWire<5>::value: LastBeginEntry.MemoryUsage = llvm::protobuf::loadVarInt(aSubBuffer); break; case llvm::protobuf::getStringWire<6>::value: { std::uint64_t cur_size = llvm::protobuf::loadVarInt(aSubBuffer); loadLocation(aSubBuffer.slice(0, cur_size), fileNameMap, LastBeginEntry.TempOri_FileName, LastBeginEntry.TempOri_Line, LastBeginEntry.TempOri_Column); aSubBuffer = aSubBuffer.drop_front(cur_size); break; } default: llvm::protobuf::skipData(aSubBuffer, cur_wire); break; } } LastChunk = TemplightProtobufReader::BeginEntry; }
void NIImporter_SUMO::myStartElement(int element, const SUMOSAXAttributes& attrs) { /* our goal is to reproduce the input net faithfully * there are different types of objects in the netfile: * 1) those which must be loaded into NBNetBuilder-Containers for processing * 2) those which can be ignored because they are recomputed based on group 1 * 3) those which are of no concern to NBNetBuilder but should be exposed to * NETEDIT. We will probably have to patch NBNetBuilder to contain them * and hand them over to NETEDIT * alternative idea: those shouldn't really be contained within the * network but rather in separate files. teach NETEDIT how to open those * (POI?) * 4) those which are of concern neither to NBNetBuilder nor NETEDIT and * must be copied over - need to patch NBNetBuilder for this. * copy unknown by default */ switch (element) { case SUMO_TAG_NET: { bool ok; myAmLefthand = attrs.getOpt<bool>(SUMO_ATTR_LEFTHAND, 0, ok, false); myCornerDetail = attrs.getOpt<int>(SUMO_ATTR_CORNERDETAIL, 0, ok, 0); myLinkDetail = attrs.getOpt<int>(SUMO_ATTR_LINKDETAIL, 0, ok, -1); break; } case SUMO_TAG_EDGE: addEdge(attrs); break; case SUMO_TAG_LANE: addLane(attrs); break; case SUMO_TAG_JUNCTION: addJunction(attrs); break; case SUMO_TAG_REQUEST: addRequest(attrs); break; case SUMO_TAG_CONNECTION: addConnection(attrs); break; case SUMO_TAG_TLLOGIC: myCurrentTL = initTrafficLightLogic(attrs, myCurrentTL); break; case SUMO_TAG_PHASE: addPhase(attrs, myCurrentTL); break; case SUMO_TAG_LOCATION: myLocation = loadLocation(attrs); break; case SUMO_TAG_PROHIBITION: addProhibition(attrs); break; case SUMO_TAG_ROUNDABOUT: addRoundabout(attrs); break; default: break; } }
void NIImporter_SUMO::myStartElement(int element, const SUMOSAXAttributes& attrs) { /* our goal is to reproduce the input net faithfully * there are different types of objects in the netfile: * 1) those which must be loaded into NBNetBuilder-Containers for processing * 2) those which can be ignored because they are recomputed based on group 1 * 3) those which are of no concern to NBNetBuilder but should be exposed to * NETEDIT. We will probably have to patch NBNetBuilder to contain them * and hand them over to NETEDIT * alternative idea: those shouldn't really be contained within the * network but rather in separate files. teach NETEDIT how to open those * (POI?) * 4) those which are of concern neither to NBNetBuilder nor NETEDIT and * must be copied over - need to patch NBNetBuilder for this. * copy unknown by default */ switch (element) { case SUMO_TAG_EDGE: addEdge(attrs); break; case SUMO_TAG_LANE: addLane(attrs); break; case SUMO_TAG_JUNCTION: addJunction(attrs); break; case SUMO_TAG_SUCC: addSuccEdge(attrs); break; case SUMO_TAG_SUCCLANE: addSuccLane(attrs); break; case SUMO_TAG_CONNECTION: addConnection(attrs); break; case SUMO_TAG_TLLOGIC__DEPRECATED: case SUMO_TAG_TLLOGIC: myCurrentTL = initTrafficLightLogic(attrs, myCurrentTL); break; case SUMO_TAG_PHASE: addPhase(attrs, myCurrentTL); break; case SUMO_TAG_LOCATION: myLocation = loadLocation(attrs); break; case SUMO_TAG_PROHIBITION: addProhibition(attrs); break; default: break; } }
void RMGfxEngine::loadState(CORO_PARAM, const Common::String &fn) { // PROBLEM: You should change the location in a separate process to do the OnEnter CORO_BEGIN_CONTEXT; Common::InSaveFile *f; byte *state, *statecmp; uint32 size, sizecmp; char buf[4]; RMPoint tp; int loc; int ver; int i; CORO_END_CONTEXT(_ctx); CORO_BEGIN_CODE(_ctx); _ctx->f = g_system->getSavefileManager()->openForLoading(fn); if (_ctx->f == NULL) return; _ctx->f->read(_ctx->buf, 4); if (_ctx->buf[0] != 'R' || _ctx->buf[1] != 'M' || _ctx->buf[2] != 'S') { delete _ctx->f; return; } _ctx->ver = _ctx->buf[3]; if (_ctx->ver == 0 || _ctx->ver > TONY_SAVEGAME_VERSION) { delete _ctx->f; return; } if (_ctx->ver >= 0x3) { // There is a thumbnail. If the version is between 5 and 7, it's compressed if ((_ctx->ver >= 0x5) && (_ctx->ver <= 0x7)) { _ctx->i = 0; _ctx->i = _ctx->f->readUint32LE(); _ctx->f->seek(_ctx->i); } else { if (_ctx->ver >= 8) // Skip thumbnail size _ctx->f->skip(4); _ctx->f->seek(160 * 120 * 2, SEEK_CUR); } } if (_ctx->ver >= 0x5) { // Skip the difficulty level _ctx->f->seek(1, SEEK_CUR); } if (_ctx->ver >= 0x4) { // Skip the savegame name, which serves no purpose _ctx->i = _ctx->f->readByte(); _ctx->f->seek(_ctx->i, SEEK_CUR); } _ctx->loc = _ctx->f->readUint32LE(); _ctx->tp._x = _ctx->f->readUint32LE(); _ctx->tp._y = _ctx->f->readUint32LE(); _ctx->size = _ctx->f->readUint32LE(); if ((_ctx->ver >= 0x5) && (_ctx->ver <= 7)) { // MPAL was packed! _ctx->sizecmp = _ctx->f->readUint32LE(); _ctx->state = new byte[_ctx->size]; _ctx->statecmp = new byte[_ctx->sizecmp]; _ctx->f->read(_ctx->statecmp, _ctx->sizecmp); lzo1x_decompress(_ctx->statecmp, _ctx->sizecmp, _ctx->state, &_ctx->size); delete[] _ctx->statecmp; } else { // Read uncompressed MPAL data _ctx->state = new byte[_ctx->size]; _ctx->f->read(_ctx->state, _ctx->size); } mpalLoadState(_ctx->state); delete[] _ctx->state; // Inventory _ctx->size = _ctx->f->readUint32LE(); _ctx->state = new byte[_ctx->size]; _ctx->f->read(_ctx->state, _ctx->size); _inv.loadState(_ctx->state); delete[] _ctx->state; if (_ctx->ver >= 0x2) { // Version 2: box please _ctx->size = _ctx->f->readUint32LE(); _ctx->state = new byte[_ctx->size]; _ctx->f->read(_ctx->state, _ctx->size); g_vm->_theBoxes.loadState(_ctx->state); delete[] _ctx->state; } if (_ctx->ver >= 5) { // Version 5 bool bStat = false; bStat = _ctx->f->readByte(); _tony.setShepherdess(bStat); bStat = _ctx->f->readByte(); _inter.setPerorate(bStat); charsLoadAll(_ctx->f); } if (_ctx->ver >= 6) { // Load options GLOBALS._bCfgInvLocked = _ctx->f->readByte(); GLOBALS._bCfgInvNoScroll = _ctx->f->readByte(); GLOBALS._bCfgTimerizedText = _ctx->f->readByte(); GLOBALS._bCfgInvUp = _ctx->f->readByte(); GLOBALS._bCfgAnni30 = _ctx->f->readByte(); GLOBALS._bCfgAntiAlias = _ctx->f->readByte(); GLOBALS._bShowSubtitles = _ctx->f->readByte(); GLOBALS._bCfgTransparence = _ctx->f->readByte(); GLOBALS._bCfgInterTips = _ctx->f->readByte(); GLOBALS._bCfgDubbing = _ctx->f->readByte(); GLOBALS._bCfgMusic = _ctx->f->readByte(); GLOBALS._bCfgSFX = _ctx->f->readByte(); GLOBALS._nCfgTonySpeed = _ctx->f->readByte(); GLOBALS._nCfgTextSpeed = _ctx->f->readByte(); GLOBALS._nCfgDubbingVolume = _ctx->f->readByte(); GLOBALS._nCfgMusicVolume = _ctx->f->readByte(); GLOBALS._nCfgSFXVolume = _ctx->f->readByte(); // Load hotspots loadChangedHotspot(_ctx->f); } if (_ctx->ver >= 7) { loadMusic(_ctx->f); } delete _ctx->f; CORO_INVOKE_2(unloadLocation, false, NULL); loadLocation(_ctx->loc, _ctx->tp, RMPoint(-1, -1)); _tony.setPattern(RMTony::PAT_STANDRIGHT); // On older versions, need to an enter action if (_ctx->ver < 5) mpalQueryDoAction(0, _ctx->loc, 0); else { // In the new ones, we just reset the mcode mCharResetCodes(); } if (_ctx->ver >= 6) reapplyChangedHotspot(); CORO_INVOKE_0(restoreMusic); _bGUIInterface = true; _bGUIInventory = true; _bGUIOption = true; CORO_END_CODE; }