Index: third_party/protobuf/examples/add_person.cc |
diff --git a/third_party/protobuf/examples/add_person.cc b/third_party/protobuf/examples/add_person.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9bec4b374d82dcc72814b0b9d236bbe3783dc8cc |
--- /dev/null |
+++ b/third_party/protobuf/examples/add_person.cc |
@@ -0,0 +1,95 @@ |
+// See README.txt for information and build instructions. |
+ |
+#include <iostream> |
+#include <fstream> |
+#include <string> |
+#include "addressbook.pb.h" |
+using namespace std; |
+ |
+// This function fills in a Person message based on user input. |
+void PromptForAddress(tutorial::Person* person) { |
+ cout << "Enter person ID number: "; |
+ int id; |
+ cin >> id; |
+ person->set_id(id); |
+ cin.ignore(256, '\n'); |
+ |
+ cout << "Enter name: "; |
+ getline(cin, *person->mutable_name()); |
+ |
+ cout << "Enter email address (blank for none): "; |
+ string email; |
+ getline(cin, email); |
+ if (!email.empty()) { |
+ person->set_email(email); |
+ } |
+ |
+ while (true) { |
+ cout << "Enter a phone number (or leave blank to finish): "; |
+ string number; |
+ getline(cin, number); |
+ if (number.empty()) { |
+ break; |
+ } |
+ |
+ tutorial::Person::PhoneNumber* phone_number = person->add_phones(); |
+ phone_number->set_number(number); |
+ |
+ cout << "Is this a mobile, home, or work phone? "; |
+ string type; |
+ getline(cin, type); |
+ if (type == "mobile") { |
+ phone_number->set_type(tutorial::Person::MOBILE); |
+ } else if (type == "home") { |
+ phone_number->set_type(tutorial::Person::HOME); |
+ } else if (type == "work") { |
+ phone_number->set_type(tutorial::Person::WORK); |
+ } else { |
+ cout << "Unknown phone type. Using default." << endl; |
+ } |
+ } |
+} |
+ |
+// Main function: Reads the entire address book from a file, |
+// adds one person based on user input, then writes it back out to the same |
+// file. |
+int main(int argc, char* argv[]) { |
+ // Verify that the version of the library that we linked against is |
+ // compatible with the version of the headers we compiled against. |
+ GOOGLE_PROTOBUF_VERIFY_VERSION; |
+ |
+ if (argc != 2) { |
+ cerr << "Usage: " << argv[0] << " ADDRESS_BOOK_FILE" << endl; |
+ return -1; |
+ } |
+ |
+ tutorial::AddressBook address_book; |
+ |
+ { |
+ // Read the existing address book. |
+ fstream input(argv[1], ios::in | ios::binary); |
+ if (!input) { |
+ cout << argv[1] << ": File not found. Creating a new file." << endl; |
+ } else if (!address_book.ParseFromIstream(&input)) { |
+ cerr << "Failed to parse address book." << endl; |
+ return -1; |
+ } |
+ } |
+ |
+ // Add an address. |
+ PromptForAddress(address_book.add_people()); |
+ |
+ { |
+ // Write the new address book back to disk. |
+ fstream output(argv[1], ios::out | ios::trunc | ios::binary); |
+ if (!address_book.SerializeToOstream(&output)) { |
+ cerr << "Failed to write address book." << endl; |
+ return -1; |
+ } |
+ } |
+ |
+ // Optional: Delete all global objects allocated by libprotobuf. |
+ google::protobuf::ShutdownProtobufLibrary(); |
+ |
+ return 0; |
+} |