ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/lattice/LatticeFactory.cpp
(Generate patch)

Comparing trunk/OOPSE-2.0/src/lattice/LatticeFactory.cpp (file contents):
Revision 2179 by gezelter, Tue Apr 12 21:27:33 2005 UTC vs.
Revision 2181 by tim, Tue Apr 12 21:58:09 2005 UTC

# Line 40 | Line 40
40   */
41  
42   #include "lattice/LatticeFactory.hpp"
43 #include "lattice/BaseLattice.hpp"
43   #include "lattice/LatticeCreator.hpp"
44  
45   namespace oopse {
46  
47 < LatticeFactory* LatticeFactory::instance = NULL;
48 < LatticeFactory::~LatticeFactory(){
49 <   std::map<std::string, BaseLatticeCreator*>::iterator mapIter;
50 <        for (mapIter = creatorMap.begin(); mapIter == creatorMap.end(); ++mapIter) {
51 <                delete mapIter->second;
52 <        }  
47 > //initialize instance of LatticeFactory
48 > LatticeFactory* LatticeFactory::instance_ = NULL;
49 >
50 > LatticeFactory::~LatticeFactory() {
51 >    CreatorMapType::iterator i;
52 >    for (i = creatorMap_.begin(); i != creatorMap_.end(); ++i) {
53 >        delete i->second;
54 >    }
55 >    creatorMap_.clear();
56   }
57  
58 < LatticeFactory* LatticeFactory::getInstance(){
59 <        if (instance == NULL)
60 <      instance = new LatticeFactory();
59 <        
60 <        return instance;
58 > bool LatticeFactory::registerLattice(LatticeCreator* creator) {
59 >    return creatorMap_.insert(
60 >        CreatorMapType::value_type(creator->getIdent(), creator)).second;
61   }
62  
63 < bool LatticeFactory::registerCreator( BaseLatticeCreator*  latCreator ){  
64 <   std::string latticeType = latCreator->getType();
65 <   std::map<std::string, BaseLatticeCreator*>::iterator mapIter;
66 <
67 <  mapIter = creatorMap.find(latticeType);
68 <
69 <  if (mapIter == creatorMap.end()) {
70 <    creatorMap[ latticeType ] = latCreator;
71 <    return true;
72 <  }
73 <  else{
74 <    delete mapIter->second;
75 <    mapIter->second = latCreator;
76 <    return false;
77 <  }
63 > bool LatticeFactory::unregisterLattice(const std::string& id) {
64 >    return creatorMap_.erase(id) == 1;
65   }
66  
67 < BaseLattice* LatticeFactory::createLattice( const std::string& latticeType ){
68 <   std::map<std::string, BaseLatticeCreator*>::iterator mapIter;
69 <  
70 <  mapIter = creatorMap.find(latticeType);
71 <
72 <  if (mapIter != creatorMap.end()) {
73 <     return (mapIter->second)->createLattice();
74 <  }
88 <  else
89 <    return NULL;
67 > Lattice* LatticeFactory::createLattice(const std::string& id) {
68 >    CreatorMapType::iterator i = creatorMap_.find(id);
69 >    if (i != creatorMap_.end()) {
70 >        //invoke functor to create object
71 >        return (i->second)->create();
72 >    } else {
73 >        return NULL;
74 >    }
75   }
76  
77 < bool LatticeFactory::hasLatticeCreator( const std::string& latticeType ){
78 <   std::map<std::string, BaseLatticeCreator*>::iterator mapIter;
77 > std::vector<std::string> LatticeFactory::getIdents() {
78 >    IdentVectorType idents;
79 >    CreatorMapType::iterator i;
80  
81 <  mapIter = creatorMap.find(latticeType);
82 <
83 <  if (mapIter != creatorMap.end())
84 <    return true;
85 <  else
100 <    return false;
81 >    for (i = creatorMap_.begin(); i != creatorMap_.end(); ++i) {
82 >        idents.push_back(i->first);
83 >    }
84 >    
85 >    return idents;
86   }
87  
88 < const  std::string LatticeFactory::toString(){
89 <   std::string result;
90 <   std::map<std::string, BaseLatticeCreator*>::iterator mapIter;
88 > std::ostream& operator <<(std::ostream& o, LatticeFactory& factory) {
89 >    LatticeFactory::IdentVectorType idents;
90 >    LatticeFactory::IdentVectorIterator i;
91  
92 <  result = "Avaliable lattice creators in LatticeFactory are:\n";
108 <  
109 <  for(mapIter = creatorMap.begin(); mapIter != creatorMap.end(); ++mapIter){
110 <    result += mapIter->first + " ";
111 <  }
112 <  
113 <  result += "\n";
92 >    idents = factory.getIdents();
93  
94 <  return result;
94 >    o << "Avaliable type identifiers in this factory: " << std::endl;
95 >    for (i = idents.begin(); i != idents.end(); ++i) {
96 >        o << *i << std::endl;
97 >    }
98 >
99 >    return o;
100   }
101  
118
102   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines