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
Node container iterator.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:170
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)
a 3d vector
Definition: vector.h:31
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:234
std::vector< Ptr< Building > >::const_iterator Iterator
Definition: building-list.h:36
void AggregateObject(Ptr< Object > other)
Definition: object.cc:242
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:233
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 cond is false.
Definition: abort.h:136
uint32_t GetId(void) const
Definition: node.cc:106
static Iterator Begin(void)
Definition: node-list.cc:228
mobility buildings information (to be used by mobility models)
Ptr< T > GetObject(void) const
Definition: object.h:362
static void Install(Ptr< Node > node)
Install the MobilityBuildingInfo to a node.