+ /* turn the nice human readable pattern into a mask */
+ int CompilePattern(const char* pattern)
+ {
+ int p = 0;
+ for (const char* n = pattern; *n; n++)
+ {
+ switch (*n)
+ {
+ case 'p':
+ p |= SILENCE_PRIVATE;
+ break;
+ case 'c':
+ p |= SILENCE_CHANNEL;
+ break;
+ case 'i':
+ p |= SILENCE_INVITE;
+ break;
+ case 'n':
+ p |= SILENCE_NOTICE;
+ break;
+ case 't':
+ p |= SILENCE_CNOTICE;
+ break;
+ case 'a':
+ case '*':
+ p |= SILENCE_ALL;
+ break;
+ case 'x':
+ p |= SILENCE_EXCLUDE;
+ break;
+ default:
+ break;
+ }
+ }
+ return p;
+ }
+
+ /* turn the mask into a nice human readable format */
+ std::string DecompPattern (const int pattern)
+ {
+ std::string out;
+ if ((pattern & SILENCE_PRIVATE) > 0)
+ out += ",privatemessages";
+ if ((pattern & SILENCE_CHANNEL) > 0)
+ out += ",channelmessages";
+ if ((pattern & SILENCE_INVITE) > 0)
+ out += ",invites";
+ if ((pattern & SILENCE_NOTICE) > 0)
+ out += ",privatenotices";
+ if ((pattern & SILENCE_CNOTICE) > 0)
+ out += ",channelnotices";
+ if ((pattern & SILENCE_ALL) > 0)
+ out = ",all";
+ if ((pattern & SILENCE_EXCLUDE) > 0)
+ out += ",exclude";
+ return "<" + out.substr(1) + ">";
+ }
+
+};