1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ 2 /* 3 * Copyright (c) 2007 INRIA 4 * Copyright (C) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation; 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * 19 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> 20 * Author: Nicola Baldo <nbaldo@cttc.es> (took position-allocator and turned it into building-allocator) 21 */ 22 #ifndef BUILDING_ALLOCATOR_H 23 #define BUILDING_ALLOCATOR_H 24 25 #include "ns3/object.h" 26 #include "ns3/object-factory.h" 27 #include "ns3/vector.h" 28 #include "ns3/building-container.h" 29 #include "ns3/position-allocator.h" 30 31 namespace ns3 { 32 33 class Building; 34 35 36 /** 37 * \ingroup buildings 38 * \brief Allocate buildings on a rectangular 2d grid. 39 * 40 * This class allows to create a set of buildings positioned on a 41 * rectangular 2D grid. Under the hood, this class uses two instances 42 * of GridPositionAllocator. 43 */ 44 class GridBuildingAllocator : public Object 45 { 46 public: 47 GridBuildingAllocator (); 48 virtual ~GridBuildingAllocator (); 49 50 // inherited from Object 51 static TypeId GetTypeId (void); 52 53 /** 54 * Set an attribute to be used for each new building to be created 55 * 56 * \param n attribute name 57 * \param v attribute value 58 */ 59 void SetBuildingAttribute (std::string n, const AttributeValue &v); 60 61 /** 62 * Create a set of buildings allocated on a grid 63 * 64 * \param n the number of buildings to create 65 * 66 * \return the BuildingContainer that contains the newly created buildings 67 */ 68 BuildingContainer Create (uint32_t n) const; 69 70 private: 71 72 void PushAttributes () const; 73 mutable uint32_t m_current; 74 enum GridPositionAllocator::LayoutType m_layoutType; 75 double m_xMin; 76 double m_yMin; 77 uint32_t m_n; 78 double m_lengthX; 79 double m_lengthY; 80 double m_deltaX; 81 double m_deltaY; 82 double m_height; 83 84 mutable ObjectFactory m_buildingFactory; 85 Ptr<GridPositionAllocator> m_lowerLeftPositionAllocator; 86 Ptr<GridPositionAllocator> m_upperRightPositionAllocator; 87 88 }; 89 90 } // namespace ns3 91 92 #endif /* BUILDING_ALLOCATOR_H */ 93