A Discrete-Event Network Simulator
API
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 namespace ns3 {
33 
34 NS_LOG_COMPONENT_DEFINE ("BuildingsHelper");
35 
36 void
38 {
39  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
40  {
41  Install (*i);
42  }
43 }
44 
45 
46 void
48 {
49  Ptr<Object> object = node;
50  Ptr<MobilityModel> model = object->GetObject<MobilityModel> ();
51  if (model == 0)
52  {
53  NS_ABORT_MSG_UNLESS (0 != model, "node " << node->GetId () << " does not have a MobilityModel");
54 
55  }
56  Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> ();
57  model->AggregateObject (buildingInfo);
58 }
59 
60 
61 void
63 {
65  for (NodeList::Iterator nit = NodeList::Begin (); nit != NodeList::End (); ++nit)
66  {
68  if (mm != 0)
69  {
70  MakeConsistent (mm);
72  NS_ABORT_MSG_UNLESS (0 != bmm, "node " << (*nit)->GetId () << " has a MobilityModel that does not have a MobilityBuildingInfo");
73  }
74  }
75 }
76 
77 
78 void
80 {
82  bool found = false;
83  for (BuildingList::Iterator bit = BuildingList::Begin (); bit != BuildingList::End (); ++bit)
84  {
85  NS_LOG_LOGIC ("checking building " << (*bit)->GetId () << " with boundaries " << (*bit)->GetBoundaries ());
86  Vector pos = mm->GetPosition ();
87  if ((*bit)->IsInside (pos))
88  {
89  NS_LOG_LOGIC ("MobilityBuildingInfo " << bmm << " pos " << mm->GetPosition () << " falls inside building " << (*bit)->GetId ());
90  NS_ABORT_MSG_UNLESS (found == false, " MobilityBuildingInfo already inside another building!");
91  found = true;
92  uint16_t floor = (*bit)->GetFloor (pos);
93  uint16_t roomX = (*bit)->GetRoomX (pos);
94  uint16_t roomY = (*bit)->GetRoomY (pos);
95  bmm->SetIndoor (*bit, floor, roomX, roomY);
96  }
97  }
98  if (!found)
99  {
100  NS_LOG_LOGIC ("MobilityBuildingInfo " << bmm << " pos " << mm->GetPosition () << " is outdoor");
101  bmm->SetOutdoor ();
102  }
103 
104 }
105 
106 } // namespace ns3
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:459
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
Definition: object.cc:252
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
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.
static Iterator Begin(void)
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:235
std::vector< Ptr< Building > >::const_iterator Iterator
Definition: building-list.h:36
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:285
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
Definition: node-list.h:44
Iterator Begin(void) const
Get an iterator which refers to the first Node in the container.
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if a condition is false, with a message.
Definition: abort.h:144
uint32_t GetId(void) const
Definition: node.cc:107
static Iterator Begin(void)
Definition: node-list.cc:229
mobility buildings information (to be used by mobility models)
static void Install(Ptr< Node > node)
Install the MobilityBuildingInfo to a node.