Well I am about to expose my ignorance on so many levels.

I have a message, that contains repeated messages, something like this:

message person {
optional string personName =1;
optional float age =2;
optional int32 ssn =3;
} 


message simpleDB {
optional string dbName =1;
repeated person people =2;
} 


Now I have read that PB's don't have a "delete[arrayIndex]" for performance 
reasons. Instead the idea is too swap messages, so the message to delete is 
at the end of the list, and do a removeLast();

So I can swap messages via something like:

      sally->Swap(dick);

Where sally and dick are mutable pointers of type person. ( 
 sally=myDB->mutable_people(i);     )

But now how I do I do the final act of removing the last message from the 
list of "people" messages?

I have attached "easy to follow" code to help explain what I am doing. 
(seems I am not the only one who struggles with this)

Thanks.

Regards
Carl


-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.
#include <iostream>


#include "simple_pb.h"

int main()
{
	int i;
    std::cout << "Start\n";

    simpleDB *myDB;
    person *personPB;

    myDB= new simpleDB;
    myDB->set_dbname("Overlord");

    std::cout << "DB name=" << myDB->dbname() << "\n";

    personPB=myDB->add_people();
    personPB->set_personname("Tom");
    personPB->set_age(1.);
    personPB->set_ssn(10);

    personPB=myDB->add_people();
    personPB->set_personname("Dick");
    personPB->set_age(2.);
    personPB->set_ssn(9);

    personPB=myDB->add_people();
    personPB->set_personname("Harry");
    personPB->set_age(3.);
    personPB->set_ssn(8);

    personPB=myDB->add_people();
    personPB->set_personname("Sally");
    personPB->set_age(4.);
    personPB->set_ssn(7);


    std::cout << "Current order:\n";
    for(i=0;i<myDB->people_size();i++)
    	std::cout <<  "\t" << myDB->people(i).personname()
		<<  "\t" << myDB->people(i).age()
		<<  "\t" << myDB->people(i).ssn()
		<< "\n";


    // swap Sally and Dick
    person *dick;
    person *sally;

    for(i=0;i<4;i++)
    {
    	if(myDB->people(i).personname() == "Dick")
    	{
    		std::cout << "Found Dick..." << i << "\n";
    		dick=myDB->mutable_people(i);
    	}
    	if(myDB->people(i).personname() == "Sally")
    	{
    		std::cout << "Found Sally..." << i << "\n";
    		sally=myDB->mutable_people(i);
    	}

    }

    std::cout << "Swapping Sally and Dick:\n";
    sally->Swap(dick);

    std::cout << "Current order:\n";
        for(i=0;i<myDB->people_size();i++)
        	std::cout <<  "\t" << myDB->people(i).personname()
    		<<  "\t" << myDB->people(i).age()
    		<<  "\t" << myDB->people(i).ssn()
    		<< "\n";

     std::cout << "Removing Dick:\n";
     // What goes here?

     std::cout << "Final order:\n";
             for(i=0;i<myDB->people_size();i++)
             	std::cout <<  "\t" << myDB->people(i).personname()
         		<<  "\t" << myDB->people(i).age()
         		<<  "\t" << myDB->people(i).ssn()
         		<< "\n";

    std::cout << "End\n";
    return 0;
}

Reply via email to