ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/src/account/metadata.C
Revision: 1.7
Committed: Sun Sep 16 18:54:45 2007 UTC (16 years, 8 months ago) by pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.6: +2 -2 lines
Log Message:
#defines to enum

File Contents

# Content
1 /**
2 * metadata.C: Metadata management
3 *
4 * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team
5 * Rights to this code are as documented in COPYING.
6 */
7
8 #include "atheme.h"
9 #include <account/chanacs.h>
10 #include <account/mychan.h>
11 #include <account/mymemo.h>
12 #include <account/mynick.h>
13 #include <account/myuser.h>
14 #include <account/metadata.h>
15
16 /*******************
17 * M E T A D A T A *
18 *******************/
19
20 has_metadata::callbacks has_metadata::callback;
21
22 metadata *
23 has_metadata::add_metadata (char const * const name, char const * const value)
24 {
25 bool is_private = false;
26 char *newname = sstrdup (name);
27 char *newvalue = sstrdup (value);
28 metadata::map_type::iterator it = mdmap.find (newname);
29
30 callback.metadata_change (this, name, value);
31 if (it != mdmap.end ())
32 {
33 metadata *md = it->second;
34 is_private = md->is_private;
35 mdmap.erase (it);
36 delete md;
37 }
38
39 if (is_private || !strncmp ("private:", name, 8))
40 is_private = true;
41
42 return mdmap[newname] = new metadata (newname, newvalue, is_private);
43 }
44
45 bool
46 has_metadata::del_metadata (char const * const name)
47 {
48 metadata::map_type::iterator it = mdmap.find (name);
49
50 callback.metadata_change (this, name, NULL);
51
52 if (it != mdmap.end ())
53 {
54 mdmap.erase (it);
55 delete it->second;
56 return true;
57 }
58
59 return false;
60 }
61
62 metadata *
63 has_metadata::find_metadata (char const * const name)
64 {
65 metadata::map_type::iterator it = mdmap.find (name);
66 if (it != mdmap.end ())
67 return it->second;
68
69 return NULL;
70 }
71
72 void
73 has_metadata::clear_metadata (void)
74 {
75 metadata::map_type::iterator it = mdmap.begin ();
76 metadata::map_type::iterator et = mdmap.end ();
77
78 while (it != et)
79 {
80 callback.metadata_change (this, it->second->key, NULL);
81 delete it->second;
82 ++it;
83 }
84
85 mdmap.clear ();
86 }