diff options
Diffstat (limited to 'container/person.hxx')
-rw-r--r-- | container/person.hxx | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/container/person.hxx b/container/person.hxx new file mode 100644 index 0000000..a36c0e8 --- /dev/null +++ b/container/person.hxx @@ -0,0 +1,108 @@ +// file : container/person.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef PERSON_HXX +#define PERSON_HXX + +#include <set> +#include <map> +#include <vector> +#include <string> + +#include <odb/core.hxx> + +#pragma db object +class person +{ +public: + person (const std::string& first, + const std::string& last) + : first_ (first), last_ (last) + { + } + + const std::string& + first () const + { + return first_; + } + + const std::string& + last () const + { + return last_; + } + + // Nicknames. + // + typedef std::vector<std::string> name_list; + + const name_list& + nicknames () const + { + return nicknames_; + } + + name_list& + nicknames () + { + return nicknames_; + } + + // Emails. + // + typedef std::set<std::string> email_set; + + const email_set& + emails () const + { + return emails_; + } + + email_set& + emails () + { + return emails_; + } + + // Age-to-weight map. + // + typedef std::map<unsigned short, float> age_weight_map; + + const age_weight_map& + age_weight () const + { + return age_weight_; + } + + age_weight_map& + age_weight () + { + return age_weight_; + } + +public: + unsigned long + id () const + { + return id_; + } + +private: + friend class odb::access; + + person () {} + + #pragma db id auto + unsigned long id_; + + std::string first_; + std::string last_; + + name_list nicknames_; + email_set emails_; + age_weight_map age_weight_; +}; + +#endif // PERSON_HXX |