void drs ( nod r ) { if ( r ) { drs ( r->d ); crlis ( r->n ); drs ( r->s ); } }
/*---------------------------------------------------------------------------------------------- Read an ITsTextProps from the stream and return it. ----------------------------------------------------------------------------------------------*/ STDMETHODIMP TsPropsFact::DeserializeProps(IStream * pstrm, ITsTextProps ** ppttp) { BEGIN_COM_METHOD; ChkComArgPtr(pstrm); ChkComOutPtr(ppttp); DataReaderStrm drs(pstrm); TsTextProps::DeserializeDataReader(&drs, ppttp); END_COM_METHOD(g_factPropsFact, IID_ITsPropsFactory); }
// ------------------------------------------------------------------------------------------------ // CNSmlDataModBase::StripL // Strips data that is to be transmitted to the sync partner. // ------------------------------------------------------------------------------------------------ void CNSmlDataModBase::StripL( TDes8& aItem ) { _DBG_FILE("CNSmlDataModBase::StripL(): begin"); if ( !NeedsMerge() ) { if ( iUsedRemoteMimeType == -1 ) { User::Leave( KErrNotFound ); } return; } TBool modified( EFalse ); CVersitParser* parser = ChildCreateParserLC(); RDesReadStream drs( aItem ); CleanupClosePushL( drs ); parser->InternalizeL( drs ); // Now we're ready to start analysis CArrayPtr<CVersitParser>* entities = parser->ArrayOfEntities( EFalse ); if( entities ) { for( TInt i = 0; i < entities->Count(); i++ ) { StripEntityL( entities->At( i ), modified ); } } else { StripEntityL( parser, modified ); } // Only update if anything was modified in process if( modified ) { aItem.Zero(); RDesWriteStream dws( aItem ); CleanupClosePushL( dws ); parser->ExternalizeL( dws ); dws.CommitL(); CleanupStack::PopAndDestroy(); // dws } CleanupStack::PopAndDestroy( 2 ); // drs, parser _DBG_FILE("CNSmlDataModBase::StripL(): end"); }
int main ( ) { cout<<"dati valori pt. arbore, la sf. CTRL+Z "; cin>>m; id=0; while ( cin.good ( ) ) { crarb ( r, m ); cout<<"Dati o noua valoare "; cin>>m; } id=0; crarb ( r, m ); if ( id ) { cap=NULL; ant=cap; drs ( r ); cout<<"Valorile din arbore ordonate descrescator "; afisare ( cap ); } else cout<<"Lista nu s-a creat. Noua valoare exista deja"; getch ( ); return 0; }
bool MREA::ExtractLayerDeps(PAKEntryReadStream& rs, PAKBridge::Level::Area& areaOut) { /* Do extract */ Header head; head.read(rs); rs.seekAlign32(); /* MREA decompression stream */ StreamReader drs(rs, head.compressedBlockCount, head.secIndexCount); for (const std::pair<DNAFourCC, atUint32>& idx : drs.m_secIdxs) { if (idx.first == FOURCC('DEPS')) { drs.seek(head.getSecOffset(idx.second), athena::Begin); DEPS deps; deps.read(drs); unsigned r=0; for (unsigned l=1 ; l<deps.depLayerCount ; ++l) { if (l > areaOut.layers.size()) break; PAKBridge::Level::Area::Layer& layer = areaOut.layers.at(l-1); layer.resources.reserve(deps.depLayers[l] - r); for (; r<deps.depLayers[l] ; ++r) layer.resources.emplace(deps.deps[r].id); } areaOut.resources.reserve(deps.depCount - r + 2); for (; r<deps.depCount ; ++r) areaOut.resources.emplace(deps.deps[r].id); return true; } } return false; }
bool MREA::Extract(const SpecBase& dataSpec, PAKEntryReadStream& rs, const hecl::ProjectPath& outPath, PAKRouter<PAKBridge>& pakRouter, const PAK::Entry& entry, bool force, std::function<void(const hecl::SystemChar*)>) { using RigPair = std::pair<CSKR*, CINF*>; RigPair dummy(nullptr, nullptr); hecl::ProjectPath mreaPath; if (pakRouter.isShared()) /* Rename MREA for consistency */ mreaPath = hecl::ProjectPath(outPath.getParentPath(), _S("!area.blend")); else /* We're not in a world pak, so lets keep the original name */ mreaPath = outPath; if (!force && mreaPath.getPathType() == hecl::ProjectPath::Type::File) return true; /* Do extract */ Header head; head.read(rs); rs.seekAlign32(); /* MREA decompression stream */ StreamReader drs(rs, head.compressedBlockCount, head.secIndexCount); athena::io::FileWriter mreaDecompOut(pakRouter.getCooked(&entry).getWithExtension(_S(".decomp")).getAbsolutePath()); head.write(mreaDecompOut); mreaDecompOut.seekAlign32(); drs.writeDecompInfos(mreaDecompOut); mreaDecompOut.seekAlign32(); drs.writeSecIdxs(mreaDecompOut); mreaDecompOut.seekAlign32(); atUint64 decompLen = drs.length(); mreaDecompOut.writeBytes(drs.readBytes(decompLen).get(), decompLen); mreaDecompOut.close(); drs.seek(0, athena::Begin); /* Start up blender connection */ hecl::BlenderConnection& conn = hecl::BlenderConnection::SharedConnection(); if (!conn.createBlend(mreaPath, hecl::BlenderConnection::BlendType::Area)) return false; /* Open Py Stream and read sections */ hecl::BlenderConnection::PyOutStream os = conn.beginPythonOut(true); os.format("import bpy\n" "import bmesh\n" "from mathutils import Vector\n" "\n" "bpy.context.scene.name = '%s'\n", pakRouter.getBestEntryName(entry).c_str()); DNACMDL::InitGeomBlenderContext(os, dataSpec.getMasterShaderPath()); MaterialSet::RegisterMaterialProps(os); os << "# Clear Scene\n" "for ob in bpy.data.objects:\n" " bpy.context.scene.objects.unlink(ob)\n" " bpy.data.objects.remove(ob)\n" "bpy.types.Lamp.retro_layer = bpy.props.IntProperty(name='Retro: Light Layer')\n" "bpy.types.Lamp.retro_origtype = bpy.props.IntProperty(name='Retro: Original Type')\n" "\n"; /* One shared material set for all meshes */ os << "# Materials\n" "materials = []\n" "\n"; MaterialSet matSet; atUint64 secStart = drs.position(); matSet.read(drs); matSet.readToBlender(os, pakRouter, entry, 0); drs.seek(secStart + head.secSizes[0], athena::Begin); std::vector<DNACMDL::VertexAttributes> vertAttribs; DNACMDL::GetVertexAttributes(matSet, vertAttribs); /* Read mesh info */ atUint32 curSec = 1; std::vector<atUint32> surfaceCounts; surfaceCounts.reserve(head.meshCount); for (atUint32 m=0 ; m<head.meshCount ; ++m) { /* Mesh header */ MeshHeader mHeader; secStart = drs.position(); mHeader.read(drs); drs.seek(secStart + head.secSizes[curSec++], athena::Begin); /* Surface count from here */ secStart = drs.position(); surfaceCounts.push_back(drs.readUint32Big()); drs.seek(secStart + head.secSizes[curSec++], athena::Begin); /* Seek through AROT-relation sections */ drs.seek(head.secSizes[curSec++], athena::Current); drs.seek(head.secSizes[curSec++], athena::Current); } /* Skip though WOBJs */ auto secIdxIt = drs.beginSecIdxs(); while (secIdxIt->first == FOURCC('WOBJ')) ++secIdxIt; /* Skip AROT */ if (secIdxIt->first == FOURCC('ROCT')) { drs.seek(head.secSizes[curSec++], athena::Current); ++secIdxIt; } /* Skip AABB */ if (secIdxIt->first == FOURCC('AABB')) { drs.seek(head.secSizes[curSec++], athena::Current); ++secIdxIt; } /* Now the meshes themselves */ if (secIdxIt->first == FOURCC('GPUD')) { for (atUint32 m=0 ; m<head.meshCount ; ++m) { curSec += DNACMDL::ReadGeomSectionsToBlender<PAKRouter<PAKBridge>, MaterialSet, RigPair, DNACMDL::SurfaceHeader_3> (os, drs, pakRouter, entry, dummy, true, false, vertAttribs, m, head.secCount, 0, &head.secSizes[curSec], surfaceCounts[m]); } ++secIdxIt; } /* Skip DEPS */ if (secIdxIt->first == FOURCC('DEPS')) { drs.seek(head.secSizes[curSec++], athena::Current); ++secIdxIt; } /* Skip SOBJ (SCLY) */ if (secIdxIt->first == FOURCC('SOBJ')) { for (atUint32 l=0 ; l<head.sclyLayerCount ; ++l) drs.seek(head.secSizes[curSec++], athena::Current); ++secIdxIt; } /* Skip SGEN */ if (secIdxIt->first == FOURCC('SGEN')) { drs.seek(head.secSizes[curSec++], athena::Current); ++secIdxIt; } /* Read Collision Meshes */ if (secIdxIt->first == FOURCC('COLI')) { DNAMP2::DeafBabe collision; secStart = drs.position(); collision.read(drs); DNAMP2::DeafBabe::BlenderInit(os); collision.sendToBlender(os); drs.seek(secStart + head.secSizes[curSec++], athena::Begin); ++secIdxIt; } /* Read BABEDEAD Lights as Cycles emissives */ if (secIdxIt->first == FOURCC('LITE')) { secStart = drs.position(); ReadBabeDeadToBlender_3(os, drs); drs.seek(secStart + head.secSizes[curSec++], athena::Begin); ++secIdxIt; } /* Origins to center of mass */ os << "bpy.context.scene.layers[1] = True\n" "bpy.ops.object.select_by_type(type='MESH')\n" "bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS')\n" "bpy.ops.object.select_all(action='DESELECT')\n" "bpy.context.scene.layers[1] = False\n"; os.centerView(); os.close(); return conn.saveBlend(); }