ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/Smersh/Person.cpp
Revision: 170
Committed: 2004-06-19T21:57:10-07:00 (21 years ago) by Douglas Thrift
File size: 1860 byte(s)
Log Message:
Database works!

File Contents

# User Rev Content
1 Douglas Thrift 164 // Smersh
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7     #include "Person.hpp"
8    
9 Douglas Thrift 167 Person::Person(const string& sn) : name("Unknown Person")
10 Douglas Thrift 164 {
11 Douglas Thrift 170 if (file.empty()) configure();
12     if (!sn.empty()) query(sn);
13     }
14    
15     string Person::file;
16     vector<string> Person::args(1, "smersh");
17     string Person::separator, Person::begin, Person::end;
18    
19     void Person::configure()
20     {
21     ext::Handle<xml::Document> document(xml::Parse("smersh.xml"));
22     ext::Handle<xml::Node> smersh(*document/"smersh");
23    
24     file = *smersh/"command"/"file";
25    
26     xml::NodeSet nodes(*smersh/"command"/"arg");
27    
28     for (xml::NodeSet::Iterator node(nodes.Begin()); node != nodes.End();
29     ++node) args.push_back(**node);
30    
31     separator = *smersh/"separator";
32     begin = *smersh/"begin";
33     end = *smersh/"end";
34    
35     if (debug)
36 Douglas Thrift 167 {
37 Douglas Thrift 170 cerr << "file = " << file << '\n'
38     << "args = {\n";
39    
40     for (vector<string>::size_type index(0); index < args.size(); ++index)
41     {
42     cerr << " [" << index << "] = " << args[index] << '\n';
43     }
44    
45     cerr << "}\n"
46     << "separator = " << separator << '\n'
47     << "begin = " << begin << '\n'
48     << "end = " << end << '\n';
49 Douglas Thrift 167 }
50 Douglas Thrift 164 }
51 Douglas Thrift 170
52     void Person::query(const string& sn)
53     {
54     vector<string> args(Person::args);
55    
56     args.push_back(string("SELECT name FROM people, peopleaimmap, aim WHERE p")
57     + "eople.id=pid AND aid = aim.id AND sn = LOWER(\'" + sn + "\');");
58    
59     ipstream sql(file, args);
60     bool first(true);
61     Matcher separator(this->separator), heading(begin + "\\s*name\\s*" + end),
62     matcher(begin + "(.*)" + end);
63    
64     do
65     {
66     string line;
67    
68     getline(sql, line);
69    
70     if (debug) cerr << "line = " << line << '\n';
71    
72     if (line == separator) continue;
73     else if (line == heading) continue;
74     else if (line == matcher)
75     {
76     if (first)
77     {
78     name = matcher[1];
79     first = false;
80     }
81     else
82     {
83     Person person;
84    
85     person.name = matcher[1];
86    
87     multiple.push_back(person);
88     }
89     }
90     else break;
91     }
92     while (sql.good());
93     }

Properties

Name Value
svn:eol-style native
svn:keywords Id