summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/demo/Freeze/phonebook/PhoneBook.ice8
-rw-r--r--cpp/demo/Freeze/phonebook/PhoneBookI.cpp32
-rw-r--r--cpp/demo/Freeze/phonebook/PhoneBookI.h3
3 files changed, 34 insertions, 9 deletions
diff --git a/cpp/demo/Freeze/phonebook/PhoneBook.ice b/cpp/demo/Freeze/phonebook/PhoneBook.ice
index 3650f3bf03e..2268c13c089 100644
--- a/cpp/demo/Freeze/phonebook/PhoneBook.ice
+++ b/cpp/demo/Freeze/phonebook/PhoneBook.ice
@@ -30,15 +30,17 @@ class Entry
};
sequence<Entry*> Entries;
-sequence<string> EntryIdentities;
-dictionary<wstring, EntryIdentities> EntryIdentitiesDict;
+sequence<string> Identities;
+dictionary<wstring, Identities> NameIdentitiesDict;
+sequence<wstring> Names;
class PhoneBook
{
Entry* createEntry();
Entries findEntries(wstring name);
+ Names listNames();
- EntryIdentitiesDict _entryIdentitiesDict;
+ NameIdentitiesDict _nameIdentitiesDict;
};
#endif
diff --git a/cpp/demo/Freeze/phonebook/PhoneBookI.cpp b/cpp/demo/Freeze/phonebook/PhoneBookI.cpp
index 9a99ce0fb42..03bf0ac8448 100644
--- a/cpp/demo/Freeze/phonebook/PhoneBookI.cpp
+++ b/cpp/demo/Freeze/phonebook/PhoneBookI.cpp
@@ -128,10 +128,11 @@ PhoneBookI::findEntries(const wstring& name)
{
JTCSyncT<JTCRecursiveMutex> sync(*this); // TODO: Reader/Writer lock
- EntryIdentitiesDict::iterator p = _entryIdentitiesDict.find(name);
- if (p != _entryIdentitiesDict.end())
+ NameIdentitiesDict::iterator p = _nameIdentitiesDict.find(name);
+ if (p != _nameIdentitiesDict.end())
{
Entries entries;
+ entries.reserve(p->second.size());
transform(p->second.begin(), p->second.end(), back_inserter(entries), IdentityToEntry(_adapter));
return entries;
}
@@ -141,12 +142,33 @@ PhoneBookI::findEntries(const wstring& name)
}
}
+Names
+PhoneBookI::listNames()
+{
+ JTCSyncT<JTCRecursiveMutex> sync(*this); // TODO: Reader/Writer lock
+
+ Names names;
+ for (NameIdentitiesDict::iterator p = _nameIdentitiesDict.begin(); p != _nameIdentitiesDict.begin(); ++p)
+ {
+ //
+ // If there are multiple entries for one name, I want the name
+ // listed just as many times.
+ //
+ for (Identities::size_type i = 0; i < p->second.size(); ++i)
+ {
+ names.push_back(p->first);
+ }
+ }
+
+ return names;
+}
+
void
PhoneBookI::add(const string& identity, const wstring& name)
{
JTCSyncT<JTCRecursiveMutex> sync(*this); // TODO: Reader/Writer lock
- _entryIdentitiesDict[name].push_back(identity);
+ _nameIdentitiesDict[name].push_back(identity);
}
void
@@ -154,8 +176,8 @@ PhoneBookI::remove(const string& identity, const wstring& name)
{
JTCSyncT<JTCRecursiveMutex> sync(*this); // TODO: Reader/Writer lock
- EntryIdentitiesDict::iterator p = _entryIdentitiesDict.find(name);
- assert(p != _entryIdentitiesDict.end());
+ NameIdentitiesDict::iterator p = _nameIdentitiesDict.find(name);
+ assert(p != _nameIdentitiesDict.end());
p->second.erase(remove_if(p->second.begin(), p->second.end(), bind2nd(equal_to<string>(), identity)),
p->second.end());
}
diff --git a/cpp/demo/Freeze/phonebook/PhoneBookI.h b/cpp/demo/Freeze/phonebook/PhoneBookI.h
index f3ad3c8f60e..1a59ce35e6b 100644
--- a/cpp/demo/Freeze/phonebook/PhoneBookI.h
+++ b/cpp/demo/Freeze/phonebook/PhoneBookI.h
@@ -51,7 +51,8 @@ public:
virtual EntryPrx createEntry();
virtual Entries findEntries(const std::wstring&);
-
+ virtual Names listNames();
+
void add(const std::string&, const std::wstring&);
void remove(const std::string&, const std::wstring&);
void move(const std::string&, const std::wstring&, const std::wstring&);