/** * metadata.h: Data structures for metadata handling. * * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team * Rights to this code are as documented in COPYING. * * $Id: metadata.h,v 1.10 2007/09/22 14:27:26 pippijn Exp $ */ #ifndef ACCOUNT_METADATA_H #define ACCOUNT_METADATA_H #include #include #include struct metadata { typedef std::pair pair_type; typedef std::map map_type; enum type { NULLTYPE, MYUSER, MYCHAN, CHANACS }; char *key; char *value; bool const is_private; metadata (char *keyname, char *data, bool const make_private) : key (keyname), value (data), is_private (make_private) { } ~metadata () { free (key); free (value); } }; class has_metadata { metadata::type mdtype; protected: struct callbacks { functor::callback3 metadata_change; }; has_metadata (metadata::type type) : mdtype (type) { } public: virtual ~has_metadata () { clear_metadata (); } metadata::map_type mdmap; metadata *add_metadata (char const * const name, char const * const value); bool del_metadata (char const * const name); metadata *find_metadata (char const * const name); void clear_metadata (void); static callbacks callback; bool mdMuOK () { return mdtype == metadata::MYUSER; } bool mdMcOK () { return mdtype == metadata::MYCHAN; } bool mdCaOK () { return mdtype == metadata::CHANACS; } }; struct metadata_subscription_t { myuser_t *mu; list_t taglist; }; #endif