ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/src/account/metadata.C
Revision: 1.2
Committed: Wed Jul 25 00:03:21 2007 UTC (19 years, 1 month ago) by pippijn
Content type: text/plain
Branch: MAIN
Changes since 1.1: +21 -19 lines
Log Message:
initial import

File Contents

# User Rev Content
1 pippijn 1.1 #include "atheme.h"
2 pippijn 1.2 #include <account/chanacs.h>
3     #include <account/mychan.h>
4     #include <account/mymemo.h>
5     #include <account/mynick.h>
6     #include <account/myuser.h>
7     #include <account/metadata.h>
8 pippijn 1.1
9     /*******************
10     * M E T A D A T A *
11     *******************/
12    
13     has_metadata::callbacks has_metadata::callback;
14    
15     metadata *
16 pippijn 1.2 has_metadata::add_metadata (char *name, char const * const value)
17 pippijn 1.1 {
18     bool is_private = false;
19 pippijn 1.2 metadata_map::iterator it = mdmap.find (name);
20 pippijn 1.1
21     callback.metadata_change (*this, name, value);
22 pippijn 1.2 if (it != mdmap.end ())
23 pippijn 1.1 {
24 pippijn 1.2 metadata *md = it->second;
25 pippijn 1.1 free (md->key);
26     free (md->value);
27     md->key = sstrdup (name);
28     md->value = sstrdup (value);
29    
30     return mdmap[name];
31     }
32    
33     if (!strncmp ("private:", name, 8))
34     is_private = true;
35    
36 pippijn 1.2 return mdmap[sstrdup (name)] = new metadata (name, value, is_private);
37 pippijn 1.1 }
38    
39     bool
40 pippijn 1.2 has_metadata::del_metadata (char *name)
41 pippijn 1.1 {
42 pippijn 1.2 metadata_map::iterator it = mdmap.find (name);
43 pippijn 1.1
44     callback.metadata_change (*this, name, NULL);
45    
46 pippijn 1.2 if (it != mdmap.end ())
47 pippijn 1.1 {
48 pippijn 1.2 mdmap.erase (it);
49     delete it->second;
50     free (it->first);
51 pippijn 1.1 return true;
52     }
53    
54     return false;
55     }
56    
57     metadata *
58 pippijn 1.2 has_metadata::find_metadata (char *name)
59 pippijn 1.1 {
60 pippijn 1.2 metadata_map::iterator it = mdmap.find (name);
61     if (it != mdmap.end ())
62     return it->second;
63 pippijn 1.1
64     return NULL;
65     }
66    
67     void
68     has_metadata::clear_metadata (void)
69     {
70     metadata_map::iterator it, it_end = mdmap.end ();
71    
72     for (it = mdmap.begin (); it != it_end; ++it)
73     {
74     callback.metadata_change (*this, it->second->key, NULL);
75     delete it->second;
76     }
77    
78     mdmap.clear ();
79     }