VirtualBox

Changeset 16309 in vbox


Ignore:
Timestamp:
Jan 28, 2009 1:42:36 PM (16 years ago)
Author:
vboxsync
Message:

OVF: avoid excessive string/list copying

Location:
trunk/src/VBox/Main
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/ApplianceImpl.cpp

    r16307 r16309  
    13751375
    13761376        /* Guest OS type */
    1377         list<VirtualSystemDescriptionEntry> vsdeOS = vsd->findByType(VirtualSystemDescriptionType_OS);
     1377        std::list<VirtualSystemDescriptionEntry*> vsdeOS = vsd->findByType(VirtualSystemDescriptionType_OS);
    13781378        Assert(vsdeOS.size() == 1);
    1379         string osTypeVBox = vsdeOS.front().strFinalValue;
     1379        string osTypeVBox = vsdeOS.front()->strFinalValue;
    13801380
    13811381        /* Now that we know the base system get our internal defaults based on that. */
     
    13861386        /* Create the machine */
    13871387        /* First get the name */
    1388         list<VirtualSystemDescriptionEntry> vsdeName = vsd->findByType(VirtualSystemDescriptionType_Name);
     1388        std::list<VirtualSystemDescriptionEntry*> vsdeName = vsd->findByType(VirtualSystemDescriptionType_Name);
    13891389        Assert(vsdeName.size() == 1);
    1390         string nameVBox = vsdeName.front().strFinalValue;
     1390        string nameVBox = vsdeName.front()->strFinalValue;
    13911391        ComPtr<IMachine> newMachine;
    13921392        rc = mVirtualBox->CreateMachine(Bstr(nameVBox.c_str()), Bstr(osTypeVBox.c_str()),
     
    13971397        /* CPU count (ignored for now) */
    13981398        /* @todo: check min/max requirements of VBox (SchemaDefs::Min/MaxCPUCount) */
    1399         // list<VirtualSystemDescriptionEntry> vsdeCPU = vsd->findByType (VirtualSystemDescriptionType_CPU);
     1399        // EntriesList vsdeCPU = vsd->findByType (VirtualSystemDescriptionType_CPU);
    14001400
    14011401        /* RAM */
    14021402        /* @todo: check min/max requirements of VBox (SchemaDefs::Min/MaxGuestRAM) */
    1403         list<VirtualSystemDescriptionEntry> vsdeRAM = vsd->findByType(VirtualSystemDescriptionType_Memory);
     1403        std::list<VirtualSystemDescriptionEntry*> vsdeRAM = vsd->findByType(VirtualSystemDescriptionType_Memory);
    14041404        Assert(vsdeRAM.size() == 1);
    1405         string memoryVBox = vsdeRAM.front().strFinalValue;
     1405        string memoryVBox = vsdeRAM.front()->strFinalValue;
    14061406        uint64_t tt = RTStrToUInt64(memoryVBox.c_str()) / _1M;
    14071407
     
    14201420
    14211421        /* Change the network adapters */
    1422         list<VirtualSystemDescriptionEntry> vsdeNW = vsd->findByType(VirtualSystemDescriptionType_NetworkAdapter);
     1422        std::list<VirtualSystemDescriptionEntry*> vsdeNW = vsd->findByType(VirtualSystemDescriptionType_NetworkAdapter);
    14231423        if (vsdeNW.size() == 0)
    14241424        {
     
    14321432        else
    14331433        {
    1434             list<VirtualSystemDescriptionEntry>::const_iterator nwIt;
     1434            list<VirtualSystemDescriptionEntry*>::const_iterator nwIt;
    14351435            /* Iterate through all network cards. We support 8 network adapters
    14361436             * at the maximum. (@todo: warn if it are more!) */
     
    14401440                 ++nwIt, ++a)
    14411441            {
    1442                 string nwTypeVBox = nwIt->strFinalValue;
     1442                string nwTypeVBox = (*nwIt)->strFinalValue;
    14431443                uint32_t tt1 = RTStrToUInt32(nwTypeVBox.c_str());
    14441444                ComPtr<INetworkAdapter> nwVBox;
     
    14551455
    14561456        /* Hard disk controller IDE */
    1457         list<VirtualSystemDescriptionEntry> vsdeHDCIDE = vsd->findByType(VirtualSystemDescriptionType_HardDiskControllerIDE);
     1457        std::list<VirtualSystemDescriptionEntry*> vsdeHDCIDE = vsd->findByType(VirtualSystemDescriptionType_HardDiskControllerIDE);
    14581458        /* @todo: we support one IDE controller only */
    14591459        if (vsdeHDCIDE.size() > 0)
    14601460        {
    1461              IDEControllerType_T hdcVBox = static_cast<IDEControllerType_T>(RTStrToUInt32(vsdeHDCIDE.front().strFinalValue.c_str()));
     1461             IDEControllerType_T hdcVBox = static_cast<IDEControllerType_T>(RTStrToUInt32(vsdeHDCIDE.front()->strFinalValue.c_str()));
    14621462             /* Set the appropriate IDE controller in the virtual BIOS of the
    14631463              * VM. */
     
    14701470#ifdef VBOX_WITH_AHCI
    14711471        /* Hard disk controller SATA */
    1472         list<VirtualSystemDescriptionEntry> vsdeHDCSATA = vsd->findByType(VirtualSystemDescriptionType_HardDiskControllerSATA);
     1472        std::list<VirtualSystemDescriptionEntry*> vsdeHDCSATA = vsd->findByType(VirtualSystemDescriptionType_HardDiskControllerSATA);
    14731473        /* @todo: we support one SATA controller only */
    14741474        if (vsdeHDCSATA.size() > 0)
    14751475        {
    1476             string hdcVBox = vsdeHDCIDE.front().strFinalValue;
     1476            string hdcVBox = vsdeHDCIDE.front()->strFinalValue;
    14771477            if (!RTStrCmp(hdcVBox.c_str(), "AHCI"))
    14781478            {
     
    14921492#ifdef VBOX_WITH_SCSI
    14931493        /* Hard disk controller SCSI */
    1494         list<VirtualSystemDescriptionEntry> vsdeHDCSCSI = vsd->findByType(VirtualSystemDescriptionType_HardDiskControllerSCSI);
     1494        EntriesList vsdeHDCSCSI = vsd->findByType(VirtualSystemDescriptionType_HardDiskControllerSCSI);
    14951495        /* @todo: do we support more than one SCSI controller? */
    14961496        if (vsdeHDCSCSI.size() > 0)
     
    15061506
    15071507        /* Create the hard disks & connect them to the appropriate controllers. */
    1508         list<VirtualSystemDescriptionEntry> vsdeHD = vsd->findByType(VirtualSystemDescriptionType_HardDiskImage);
     1508        std::list<VirtualSystemDescriptionEntry*> vsdeHD = vsd->findByType(VirtualSystemDescriptionType_HardDiskImage);
    15091509        if (vsdeHD.size() > 0)
    15101510        {
     
    15261526            RTPathStripFilename(srcDir);
    15271527            /* Iterate over all given disk images */
    1528             list<VirtualSystemDescriptionEntry>::const_iterator hdIt;
     1528            list<VirtualSystemDescriptionEntry*>::const_iterator hdIt;
    15291529            for (hdIt = vsdeHD.begin();
    15301530                 hdIt != vsdeHD.end();
    15311531                 ++hdIt)
    15321532            {
    1533                 char *dstFilePath = RTStrDup(hdIt->strFinalValue.c_str());
     1533                char *dstFilePath = RTStrDup((*hdIt)->strFinalValue.c_str());
    15341534                /* Check if the destination file exists already or the
    15351535                 * destination path is empty. */
     
    15411541//                    continue;
    15421542                }
     1543                const string &strRef = (*hdIt)->strRef;
    15431544                /* Get the associated disk image */
    1544                 if (m->mapDisks.find(hdIt->strRef) == m->mapDisks.end())
     1545                if (m->mapDisks.find(strRef) == m->mapDisks.end())
    15451546                {
    15461547                    /* @todo: error: entry doesn't exists */
    15471548                }
    1548                 DiskImage di = m->mapDisks [hdIt->strRef];
     1549                DiskImage di = m->mapDisks [strRef];
    15491550                /* Construct the source file path */
    15501551                char *srcFilePath;
     
    17681769}
    17691770
    1770 void VirtualSystemDescription::addEntry(VirtualSystemDescriptionType_T aType, std::string aRef, std::string aOrigValue, std::string aAutoValue, std::string aConfig /* = "" */)
     1771void VirtualSystemDescription::addEntry(VirtualSystemDescriptionType_T aType,
     1772                                        const std::string &aRef,
     1773                                        const std::string &aOrigValue,
     1774                                        const std::string &aAutoValue,
     1775                                        const std::string &aConfig /* = "" */)
    17711776{
    17721777    VirtualSystemDescriptionEntry vsde;
     
    17821787}
    17831788
    1784 list<VirtualSystemDescriptionEntry> VirtualSystemDescription::findByType(VirtualSystemDescriptionType_T aType)
    1785 {
    1786     list<VirtualSystemDescriptionEntry> vsd;
    1787 
    1788     list<VirtualSystemDescriptionEntry>::const_iterator it;
     1789std::list<VirtualSystemDescriptionEntry*> VirtualSystemDescription::findByType(VirtualSystemDescriptionType_T aType)
     1790{
     1791    std::list<VirtualSystemDescriptionEntry*> vsd;
     1792    list<VirtualSystemDescriptionEntry>::iterator it;
    17891793    for (it = m->descriptions.begin();
    17901794         it != m->descriptions.end();
    17911795         ++it)
    17921796        if (it->type == aType)
    1793             vsd.push_back(*it);
     1797            vsd.push_back(&(*it));
    17941798
    17951799    return vsd;
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r16306 r16309  
    30023002    <const name="NetworkAdapter" value="11" />
    30033003    <const name="USBController" value="12" />
     3004    <const name="SoundCard" value="13" />
    30043005
    30053006  </enum>
  • trunk/src/VBox/Main/include/ApplianceImpl.h

    r16298 r16309  
    150150    /* private instance data */
    151151private:
    152     void addEntry(VirtualSystemDescriptionType_T aType, std::string aRef, std::string aOrigValue, std::string aAutoValue, std::string aConfig = "");
    153     std::list<VirtualSystemDescriptionEntry> findByType(VirtualSystemDescriptionType_T aType);
     152    void addEntry(VirtualSystemDescriptionType_T aType,
     153                  const std::string &aRef,
     154                  const std::string &aOrigValue,
     155                  const std::string &aAutoValue,
     156                  const std::string &aConfig = "");
     157
     158    std::list<VirtualSystemDescriptionEntry*> findByType(VirtualSystemDescriptionType_T aType);
    154159
    155160    struct Data;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette