ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-4/src/UseTheForce/ForceFieldFactory.cpp
Revision: 1740
Committed: Mon Nov 15 23:00:32 2004 UTC (19 years, 8 months ago) by tim
File size: 1393 byte(s)
Log Message:
adding ForceFieldFactory and LJFF classes

File Contents

# User Rev Content
1 tim 1740
2     #include "UseTheForce/ForceFieldFactory"
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     }