A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
buildings-helper.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2012 CTTC
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Nicola Baldo <nbaldo@cttc.es>
19  */
20 
21 #include "buildings-helper.h"
22 
23 #include <ns3/node-list.h>
24 #include <ns3/building.h>
25 #include <ns3/building-list.h>
26 #include <ns3/mobility-model.h>
27 #include <ns3/mobility-building-info.h>
28 #include <ns3/abort.h>
29 #include <ns3/log.h>
30 
31 
32 NS_LOG_COMPONENT_DEFINE ("BuildingsHelper");
33 
34 namespace ns3 {
35 
36 
37 void
39 {
40  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
41  {
42  Install (*i);
43  }
44 }
45 
46 
47 void
49 {
50  Ptr<Object> object = node;
51  Ptr<MobilityModel> model = object->GetObject<MobilityModel> ();
52  if (model == 0)
53  {
54  NS_ABORT_MSG_UNLESS (0 != model, "node " << node->GetId () << " does not have a MobilityModel");
55 
56  }
57  Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> ();
58  model->AggregateObject (buildingInfo);
59 }
60 
61 
62 void
64 {
66  for (NodeList::Iterator nit = NodeList::Begin (); nit != NodeList::End (); ++nit)
67  {
69  if (mm != 0)
70  {
71  MakeConsistent (mm);
73  NS_ABORT_MSG_UNLESS (0 != bmm, "node " << (*nit)->GetId () << " has a MobilityModel that does not have a MobilityBuildingInfo");
74  }
75  }
76 }
77 
78 
79 void
81 {
83  bool found = false;
84  for (BuildingList::Iterator bit = BuildingList::Begin (); bit != BuildingList::End (); ++bit)
85  {
86  NS_LOG_LOGIC ("checking building " << (*bit)->GetId () << " with boundaries " << (*bit)->GetBoundaries ());
87  Vector pos = mm->GetPosition ();
88  if ((*bit)->IsInside (pos))
89  {
90  NS_LOG_LOGIC ("MobilityBuildingInfo " << bmm << " pos " << mm->GetPosition () << " falls inside building " << (*bit)->GetId ());
91  NS_ABORT_MSG_UNLESS (found == false, " MobilityBuildingInfo already inside another building!");
92  found = true;
93  uint16_t floor = (*bit)->GetFloor (pos);
94  uint16_t roomX = (*bit)->GetRoomX (pos);
95  uint16_t roomY = (*bit)->GetRoomY (pos);
96  bmm->SetIndoor (*bit, floor, roomX, roomY);
97  }
98  }
99  if (!found)
100  {
101  NS_LOG_LOGIC ("MobilityBuildingInfo " << bmm << " pos " << mm->GetPosition () << " is outdoor");
102  bmm->SetOutdoor ();
103  }
104 
105 }
106 
107 } // namespace ns3
std::vector< Ptr< Node > >::const_iterator Iterator
#define NS_LOG_COMPONENT_DEFINE(name)
Definition: log.h:171
Vector GetPosition(void) const
Iterator End(void) const
Get an iterator which indicates past-the-last Node in the container.
static Iterator End(void)
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
Definition: log.h:309
static Iterator Begin(void)
a 3d vector
Definition: vector.h:31
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if cond is false.
Definition: abort.h:131
static void MakeConsistent(Ptr< MobilityModel > bmm)
Make the given mobility model consistent, by determining whether its position falls inside any of the...
Keep track of the current position and velocity of an object.
static void MakeMobilityModelConsistent()
This method goes through the whole NodeList and, for each node in the list, calls BuildingsHelper::Ma...
static Iterator End(void)
Definition: node-list.cc:188
std::vector< Ptr< Building > >::const_iterator Iterator
Definition: building-list.h:36
void AggregateObject(Ptr< Object > other)
Definition: object.cc:243
#define NS_LOG_LOGIC(msg)
Definition: log.h:368
keep track of a set of node pointers.
std::vector< Ptr< Node > >::const_iterator Iterator
Definition: node-list.h:43
Iterator Begin(void) const
Get an iterator which refers to the first Node in the container.
uint32_t GetId(void) const
Definition: node.cc:104
static Iterator Begin(void)
Definition: node-list.cc:182
mobility buildings information (to be used by mobility models)
Ptr< T > GetObject(void) const
Definition: object.h:361
static void Install(Ptr< Node > node)
Install the MobilityBuildingInfo to a node.