00001 #if !defined(__MAZEBUILDER_HPP)
00002 #define __MAZEBUILDER_HPP
00003
00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022
00023
00024
00025 #if !defined(__COMMON_HPP)
00026 #include <Common.hpp>
00027 #endif
00028
00029 #if !defined(__BUILDER_HPP)
00030 #include <Builder.hpp>
00031 #endif
00032
00033 #if !defined(__MAP_HPP)
00034 #include <Map.hpp>
00035 #endif
00036
00037 #if !defined(__PAIR_HPP)
00038 #include <Pair.hpp>
00039 #endif
00040
00041 #if !defined(__NAMEIDENTIFIER_HPP)
00042 #include <NameIdentifier.hpp>
00043 #endif
00044
00045 #if !defined(__MAZE_HPP)
00046 #include <Maze.hpp>
00047 #endif
00048
00049 #if !defined(__ROOM_HPP)
00050 #include <Room.hpp>
00051 #endif
00052
00053
00054
00055
00056
00057
00058
00059 CORELINUX_PAIR( DoorPair, RoomNumber, RoomNumber );
00060 CORELINUX_MULTIMAP( Direction, DoorPair, less<Direction> , SideMap );
00061
00062
00063
00064
00065
00066 DECLARE_CLASS( MazeBuilderFactory );
00067 DECLARE_CLASS( MazeBuilder );
00068
00078 class MazeBuilder : public corelinux::Builder<Maze,NameIdentifier>
00079 {
00080 public:
00081
00082
00083
00084
00085
00087
00088 MazeBuilder( MazeBuilderFactoryPtr );
00089
00091
00092 MazeBuilder( MazeBuilderCref );
00093
00095
00096 virtual ~MazeBuilder( void );
00097
00098
00099
00100
00101
00103
00104 bool operator==( MazeBuilderCref aRef ) const;
00105
00106 protected:
00107
00108
00109
00110
00111
00113
00114 MazeBuilder( void ) throw( CORELINUX(Assertion) );
00115
00116
00117
00118
00119
00121
00122 MazeBuilderRef operator=( MazeBuilderCref )
00123 throw( CORELINUX(Assertion) );
00124
00125
00126
00127
00128
00130
00131 virtual SideMapCref getSideMap( void ) const;
00132
00133
00134
00135 00137
00138 virtual void constructSideMap( void );
00139
00141
00142 virtual void createRooms( MazePtr ) const;
00143
00146
00147 virtual void connectRoomsWithDoors( MazePtr ) const;
00148
00150
00151 virtual void disconnectAndDestroyDoors( MazePtr ) const;
00152
00153
00154
00155
00156
00158
00159 virtual MazePtr createProduct( void ) const;
00160
00162
00163 virtual void destroyProduct( MazePtr ) const ;
00164
00165 private:
00166
00167 SideMap theSideMap;
00168
00169 };
00170
00171 #endif // if !defined(__MAZEBUILDER_HPP)
00172
00173 00174 00175 00176 00177 00178 00179
00180