ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-3.0/src/UseTheForce/ForceFieldFactory.cpp
Revision: 1912
Committed: Mon Jan 10 20:52:07 2005 UTC (19 years, 6 months ago) by tim
File size: 1425 byte(s)
Log Message:
zconstraint method is working now

File Contents

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