bloaty/third_party/protobuf/examples/add_person.cc
Go to the documentation of this file.
1 // See README.txt for information and build instructions.
2 
3 #include <ctime>
4 #include <fstream>
5 #include <google/protobuf/util/time_util.h>
6 #include <iostream>
7 #include <string>
8 
9 #include "addressbook.pb.h"
10 
11 using namespace std;
12 
14 
15 // This function fills in a Person message based on user input.
16 void PromptForAddress(tutorial::Person* person) {
17  cout << "Enter person ID number: ";
18  int id;
19  cin >> id;
20  person->set_id(id);
21  cin.ignore(256, '\n');
22 
23  cout << "Enter name: ";
24  getline(cin, *person->mutable_name());
25 
26  cout << "Enter email address (blank for none): ";
27  string email;
28  getline(cin, email);
29  if (!email.empty()) {
30  person->set_email(email);
31  }
32 
33  while (true) {
34  cout << "Enter a phone number (or leave blank to finish): ";
35  string number;
36  getline(cin, number);
37  if (number.empty()) {
38  break;
39  }
40 
41  tutorial::Person::PhoneNumber* phone_number = person->add_phones();
42  phone_number->set_number(number);
43 
44  cout << "Is this a mobile, home, or work phone? ";
45  string type;
46  getline(cin, type);
47  if (type == "mobile") {
48  phone_number->set_type(tutorial::Person::MOBILE);
49  } else if (type == "home") {
50  phone_number->set_type(tutorial::Person::HOME);
51  } else if (type == "work") {
52  phone_number->set_type(tutorial::Person::WORK);
53  } else {
54  cout << "Unknown phone type. Using default." << endl;
55  }
56  }
57  *person->mutable_last_updated() = TimeUtil::SecondsToTimestamp(time(NULL));
58 }
59 
60 // Main function: Reads the entire address book from a file,
61 // adds one person based on user input, then writes it back out to the same
62 // file.
63 int main(int argc, char* argv[]) {
64  // Verify that the version of the library that we linked against is
65  // compatible with the version of the headers we compiled against.
67 
68  if (argc != 2) {
69  cerr << "Usage: " << argv[0] << " ADDRESS_BOOK_FILE" << endl;
70  return -1;
71  }
72 
73  tutorial::AddressBook address_book;
74 
75  {
76  // Read the existing address book.
77  fstream input(argv[1], ios::in | ios::binary);
78  if (!input) {
79  cout << argv[1] << ": File not found. Creating a new file." << endl;
80  } else if (!address_book.ParseFromIstream(&input)) {
81  cerr << "Failed to parse address book." << endl;
82  return -1;
83  }
84  }
85 
86  // Add an address.
87  PromptForAddress(address_book.add_people());
88 
89  {
90  // Write the new address book back to disk.
91  fstream output(argv[1], ios::out | ios::trunc | ios::binary);
92  if (!address_book.SerializeToOstream(&output)) {
93  cerr << "Failed to write address book." << endl;
94  return -1;
95  }
96  }
97 
98  // Optional: Delete all global objects allocated by libprotobuf.
100 
101  return 0;
102 }
re2::trunc
static std::string trunc(const StringPiece &pattern)
Definition: bloaty/third_party/re2/re2/re2.cc:100
gen_build_yaml.out
dictionary out
Definition: src/benchmark/gen_build_yaml.py:24
PromptForAddress
void PromptForAddress(tutorial::Person *person)
Definition: bloaty/third_party/protobuf/examples/add_person.cc:16
main
int main(int argc, char *argv[])
Definition: bloaty/third_party/protobuf/examples/add_person.cc:63
in
const char * in
Definition: third_party/abseil-cpp/absl/strings/internal/str_format/parser_test.cc:391
gmock_output_test.output
output
Definition: bloaty/third_party/googletest/googlemock/test/gmock_output_test.py:175
GOOGLE_PROTOBUF_VERIFY_VERSION
#define GOOGLE_PROTOBUF_VERIFY_VERSION
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/common.h:116
google::protobuf::util::TimeUtil
Definition: third_party/bloaty/third_party/protobuf/src/google/protobuf/util/time_util.h:62
number
int32_t number
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/protobuf.h:850
std
Definition: grpcpp/impl/codegen/async_unary_call.h:407
input
std::string input
Definition: bloaty/third_party/protobuf/src/google/protobuf/io/tokenizer_unittest.cc:197
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
google::protobuf::ShutdownProtobufLibrary
void ShutdownProtobufLibrary()
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/common.cc:356
add_person.address_book
address_book
Definition: bloaty/third_party/protobuf/examples/add_person.py:49
id
uint32_t id
Definition: flow_control_fuzzer.cc:70


grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:40