ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-4/src/UseTheForce/ForceFieldFactory.cpp
Revision: 1758
Committed: Fri Nov 19 17:56:32 2004 UTC (19 years, 7 months ago) by tim
File size: 1397 byte(s)
Log Message:
DUFF is almost done except error checking

File Contents

# Content
1
2 #include "UseTheForce/ForceFieldFactory.hpp"
3 namespace oopse {
4
5 //initialize instance of ForceFieldFactory
6 ForceFieldFactory::instance_ = NULL;
7
8 bool ForceFieldFactory::registerForceField(const std::string& id, ForceFieldCreatorType creator) {
9 return creatorMap_.insert(
10 CreatorMapType::value_type(id, creator)).second;
11 }
12
13 bool ForceFieldFactory::unregisterForceField(const std::string& id) {
14 return creatorMap_.erase(id) == 1;
15 }
16
17 ForceField* ForceFieldFactory::createForceField(const std::string& id) {
18 typename CreatorMapType::iterator i = creatorMap_.find(id);
19 if (i != creatorMap_.end()) {
20 //invoke functor to create object
21 return (i->second)();
22 } else {
23 return NULL;
24 }
25 }
26
27 std::vector<std::string> ForceFieldFactory::getIdents() {
28 IdentVectorType idents;
29 typename CreatorMapType::iterator i;
30
31 for (i = creatorMap_.begin(); i != creatorMap_.end(); ++i) {
32 idents.push_back(i->first);
33 }
34
35 return idents;
36 }
37
38 std::ostream& operator <<(std::ostream& o, ForceFieldFactory& factory) {
39 typename ForceFieldFactory::IdentVectorType idents;
40 typename ForceFieldFactory::IdentVectorIterator i;
41
42 idents = factory.getIdents();
43
44 o << "Avaliable type identifiers in this factory: " << std::endl;
45 for (i = idents.begin(); i != idents.end(); ++i) {
46 o << *i << std::endl;
47 }
48
49 return o;
50 }
51
52 }