diff --git a/doc/doxygen.conf b/doc/doxygen.conf index dc852eb9f..135a890b1 100644 --- a/doc/doxygen.conf +++ b/doc/doxygen.conf @@ -1,4 +1,4 @@ -# Doxyfile 1.4.4 +# Doxyfile 1.5.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project @@ -14,10 +14,18 @@ # Project related configuration options #--------------------------------------------------------------------------- +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. -PROJECT_NAME = "NS-3" +PROJECT_NAME = "NS-3 " # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or @@ -45,24 +53,14 @@ CREATE_SUBDIRS = NO # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). @@ -135,11 +133,19 @@ SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. @@ -161,13 +167,6 @@ DETAILS_AT_TOP = NO INHERIT_DOCS = YES -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. @@ -195,13 +194,40 @@ ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to @@ -210,6 +236,16 @@ OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is +# documented as struct with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code where the coding convention is that all structs are +# typedef'ed and only the typedef is referenced never the struct's name. + +TYPEDEF_HIDES_STRUCT = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -244,6 +280,13 @@ EXTRACT_LOCAL_CLASSES = NO EXTRACT_LOCAL_METHODS = NO +# If this flag is set to YES, the members of anonymous namespaces will be extracted +# and appear in the documentation as a namespace called 'anonymous_namespace{file}', +# where file will be replaced with the base name of the file that contains the anonymous +# namespace. By default anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the @@ -376,7 +419,7 @@ SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is YES. +# in the documentation. The default is NO. SHOW_DIRECTORIES = NO @@ -385,7 +428,7 @@ SHOW_DIRECTORIES = NO # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output +# provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = @@ -433,7 +476,7 @@ WARN_NO_PARAMDOC = NO # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) -WARN_FORMAT = "$file:$line: $text" +WARN_FORMAT = "$file:$line: $text " # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written @@ -450,16 +493,27 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = src doc/main.txt doc/trace-source-list.h doc/tracing.h +INPUT = src \ + doc/main.txt \ + doc/trace-source-list.h \ + doc/tracing.h + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 -FILE_PATTERNS = *.h *.tcc +FILE_PATTERNS = *.h \ + *.tcc # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. @@ -471,13 +525,12 @@ RECURSIVE = YES # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. -EXCLUDE = \ - src/routing/olsr/olsr-state.h \ - src/routing/olsr/repositories.h \ - src/routing/olsr/routing-table.h \ - src/simulator/high-precision.h \ - src/simulator/high-precision-128.h \ - src/simulator/high-precision-double.h +EXCLUDE = src/routing/olsr/olsr-state.h \ + src/routing/olsr/repositories.h \ + src/routing/olsr/routing-table.h \ + src/simulator/high-precision.h \ + src/simulator/high-precision-128.h \ + src/simulator/high-precision-double.h # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded @@ -493,6 +546,13 @@ EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). @@ -551,7 +611,9 @@ FILTER_SOURCE_FILES = NO # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway SOURCE_BROWSER = NO @@ -578,6 +640,13 @@ REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source @@ -670,6 +739,14 @@ HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be @@ -972,7 +1049,7 @@ MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. +# PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO @@ -1002,7 +1079,9 @@ INCLUDE_FILE_PATTERNS = # undefined via #undef or recursively expanded use the := operator # instead of the = operator. -PREDEFINED = RUN_SELF_TESTS NS3_DEBUG_ENABLE NS3_ASSERT_ENABLE NS3_LOG_ENABLE +PREDEFINED = RUN_SELF_TESTS \ + NS3_ASSERT_ENABLE \ + NS3_LOG_ENABLE # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. @@ -1075,6 +1154,14 @@ PERL_PATH = /usr/bin/perl CLASS_DIAGRAMS = YES +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. @@ -1132,7 +1219,7 @@ INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected @@ -1140,6 +1227,14 @@ INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. @@ -1169,31 +1264,23 @@ DOT_PATH = DOTFILE_DIRS = -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 +DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 diff --git a/doc/main.txt b/doc/main.txt index 1027eb97f..6da3b9e08 100644 --- a/doc/main.txt +++ b/doc/main.txt @@ -18,7 +18,7 @@ * - a Functor class: ns3::Callback * - an os-independent interface to get access to the elapsed wall clock time: ns3::SystemWallClockMs * - a class to register regression tests with the test manager: ns3::Test and ns3::TestManager - * - debugging facilities: \ref debugging, \ref assert, \ref error + * - debugging facilities: \ref logging, \ref assert, \ref error * - \ref randomvariable * - \ref config * - a base class for objects which need to support reference counting diff --git a/doc/tracing.h b/doc/tracing.h index 45e7d9db5..27657bd02 100644 --- a/doc/tracing.h +++ b/doc/tracing.h @@ -497,6 +497,8 @@ * }; * // called from MyModel::GetTraceResolver * MyModelTraceType (enum Type type); + * // needed for by the tracing subsystem. + * MyModelTraceType (); * // called from trace sink * enum Type Get (void) const; * // needed by the tracing subsystem @@ -513,10 +515,14 @@ * \endcode * The implementation does not require much thinking: * \code + * MyModelTraceType::MyModelTraceType () + * : m_type (RX) + * {// an arbitrary default value. + * } * MyModelTraceType::MyModelTraceType (enum Type type) * : m_type (type) * {} - * enum Type + * enum MyModelTraceType::Type * MyModelTraceType::Get (void) const * { * return m_type; @@ -531,14 +537,14 @@ * } * void * MyModelTraceType::Print (std::ostream &os) const - * ( + * { * // this method is invoked by the print function of a TraceContext * // if it contains an instance of this TraceContextElement. * switch (m_type) { * case RX: os << "rx"; break; * // ... * } - * ) + * } * std::string * MyModelTraceType::GetTypeName (void) const * { diff --git a/samples/main-debug-other.cc b/samples/main-debug-other.cc deleted file mode 100644 index da7587506..000000000 --- a/samples/main-debug-other.cc +++ /dev/null @@ -1,13 +0,0 @@ -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ -#include "ns3/debug.h" - -NS_DEBUG_COMPONENT_DEFINE ("MyComponentB"); - -namespace foo { - -void OneFunction (void) -{ - NS_DEBUG ("OneFunction debug"); -} - -}; // namespace foo diff --git a/samples/main-debug.cc b/samples/main-debug.cc deleted file mode 100644 index cf2ab1a29..000000000 --- a/samples/main-debug.cc +++ /dev/null @@ -1,27 +0,0 @@ -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ -#include "ns3/debug.h" -#include "ns3/assert.h" - -NS_DEBUG_COMPONENT_DEFINE ("MyComponentA"); - -// declare other function -namespace foo { -void OneFunction (void); -} - -int main (int argc, int argv) -{ - NS_DEBUG ("nargc="< object = *j; Ptr position = object->QueryInterface (MobilityModel::iid); NS_ASSERT (position != 0); - Position pos = position->Get (); + Vector pos = position->GetPosition (); std::cout << "x=" << pos.x << ", y=" << pos.y << ", z=" << pos.z << std::endl; } diff --git a/samples/main-random-topology.cc b/samples/main-random-topology.cc index 3021ed3fb..fe896278d 100644 --- a/samples/main-random-topology.cc +++ b/samples/main-random-topology.cc @@ -17,7 +17,7 @@ using namespace ns3; static void CourseChange (const TraceContext &context, Ptr position) { - Position pos = position->Get (); + Vector pos = position->GetPosition (); std::cout << Simulator::Now () << ", pos=" << position << ", x=" << pos.x << ", y=" << pos.y << ", z=" << pos.z << std::endl; } diff --git a/samples/main-random-walk.cc b/samples/main-random-walk.cc index cccd64936..c4a0db34f 100644 --- a/samples/main-random-walk.cc +++ b/samples/main-random-walk.cc @@ -18,11 +18,11 @@ using namespace ns3; static void CourseChange (ns3::TraceContext const&, Ptr mobility) { - Position pos = mobility->Get (); - Speed vel = mobility->GetSpeed (); + Vector pos = mobility->GetPosition (); + Vector vel = mobility->GetVelocity (); std::cout << Simulator::Now () << ", model=" << mobility << ", POS: x=" << pos.x << ", y=" << pos.y - << ", z=" << pos.z << "; VEL:" << vel.dx << ", y=" << vel.dy - << ", z=" << vel.dz << std::endl; + << ", z=" << pos.z << "; VEL:" << vel.x << ", y=" << vel.y + << ", z=" << vel.z << std::endl; } int main (int argc, char *argv[]) diff --git a/samples/wscript b/samples/wscript index 73f694ed1..9469e755f 100644 --- a/samples/wscript +++ b/samples/wscript @@ -1,9 +1,6 @@ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- def build(bld): - obj = bld.create_ns3_program('main-debug') - obj.source = ['main-debug.cc', 'main-debug-other.cc'] - obj = bld.create_ns3_program('main-callback') obj.source = 'main-callback.cc' diff --git a/src/core/command-line.cc b/src/core/command-line.cc index f551cebf3..5fcb5203b 100644 --- a/src/core/command-line.cc +++ b/src/core/command-line.cc @@ -20,7 +20,6 @@ */ #include "command-line.h" -#include "ns3/debug.h" #include namespace ns3 { diff --git a/src/core/debug.cc b/src/core/debug.cc deleted file mode 100644 index 3dfb998b5..000000000 --- a/src/core/debug.cc +++ /dev/null @@ -1,192 +0,0 @@ -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2006 INRIA - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#include -#include -#include -#include "debug.h" -#include "assert.h" -#include "ns3/core-config.h" -#include "fatal-error.h" - -#ifdef HAVE_STDLIB_H -#include -#endif - -namespace ns3 { - -typedef std::list > ComponentList; -typedef std::list >::iterator ComponentListI; - -static -ComponentList *GetComponentList (void) -{ - static ComponentList components; - return &components; -} - - -static bool g_firstDebug = true; - -void -DebugComponentEnableEnvVar (void) -{ -#ifdef HAVE_GETENV - char *envVar = getenv("NS_DEBUG"); - if (envVar == 0) - { - return; - } - bool allFound = true; - std::string env = envVar; - std::string::size_type cur = 0; - std::string::size_type next = 0; - while (true) - { - next = env.find_first_of (";", cur); - std::string tmp = std::string (env, cur, next); - { - /* The following code is a workaround for a bug in the g++ - * c++ string library. Its goal is to remove any trailing ';' - * from the string even though there should not be any in - * it. This code should be safe even if the bug is not there. - */ - std::string::size_type trailing = tmp.find_first_of (";"); - tmp = tmp.substr (0, trailing); - } - if (tmp.size () == 0) - { - break; - } - bool found = false; - ComponentList *components = GetComponentList (); - for (ComponentListI i = components->begin (); - i != components->end (); - i++) - { - if (i->first.compare (tmp) == 0) - { - found = true; - i->second->Enable (); - break; - } - } - if (!found) - { - allFound = false; - } - if (next == std::string::npos) - { - break; - } - cur = next + 1; - if (cur >= env.size ()) - { - break; - } - } - if (allFound) - { - g_firstDebug = true; - } - -#endif -} - - -DebugComponent::DebugComponent (char const * name) - : m_isEnabled (false) -{ - ComponentList *components = GetComponentList (); - for (ComponentListI i = components->begin (); - i != components->end (); - i++) - { - NS_ASSERT (i->first != name); - } - components->push_back (std::make_pair (name, this)); -} -bool -DebugComponent::IsEnabled (void) -{ - if (g_firstDebug) - { - DebugComponentEnableEnvVar (); - } - return m_isEnabled; -} -void -DebugComponent::Enable (void) -{ - m_isEnabled = true; -} -void -DebugComponent::Disable (void) -{ - m_isEnabled = false; -} - -void -DebugComponentEnable (char const *name) -{ - ComponentList *components = GetComponentList (); - for (ComponentListI i = components->begin (); - i != components->end (); - i++) - { - if (i->first.compare (name) == 0) - { - i->second->Enable (); - break; - } - } -} -void -DebugComponentDisable (char const *name) -{ - ComponentList *components = GetComponentList (); - for (ComponentListI i = components->begin (); - i != components->end (); - i++) - { - if (i->first.compare (name) == 0) - { - i->second->Disable (); - break; - } - } -} - - -void -DebugComponentPrintList (void) -{ - ComponentList *components = GetComponentList (); - for (ComponentListI i = components->begin (); - i != components->end (); - i++) - { - std::cout << i->first << "=" << (i->second->IsEnabled ()?"enabled":"disabled") << std::endl; - } -} - -}; // namespace ns3 - - diff --git a/src/core/debug.h b/src/core/debug.h deleted file mode 100644 index 3fc6fef4b..000000000 --- a/src/core/debug.h +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2006 INRIA - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#ifndef DEBUG_H -#define DEBUG_H - -/** - * \defgroup debugging Debugging - * \brief Debugging functions and macros - * - * - DEBUG functionality: macros which allow developers to - * send information out on screen only in debugging builds. - * All debug messages are disabled by default. To enable - * selected debug messages, use the ns3::DebugComponentEnable - * function. Alternatively, you can use the NS_DEBUG - * environment variable to define a ';'-separated list of - * messages to enable. For example, NS_DEBUG=a;b;c;DAFD;GH - * would enable the components 'a', 'b', 'c', 'DAFD', and, 'GH'. - */ - -namespace ns3 { - -/** - * \param name a debug component name - * \ingroup debugging - * - * Enable the debugging output associated with that debug component. - * The debugging output can be later disabled with a call - * to ns3::DebugComponentDisable. - */ -void DebugComponentEnable (char const *name); -/** - * \param name a debug component name - * \ingroup debugging - * - * Disable the debugging output associated with that debug component. - * The debugging output can be later re-enabled with a call - * to ns3::DebugComponentEnable. - */ -void DebugComponentDisable (char const *name); -/** - * \ingroup debugging - * Print the list of debugging messages available. - */ -void DebugComponentPrintList (void); - -class DebugComponent { -public: - DebugComponent (char const *name); - bool IsEnabled (void); - void Enable (void); - void Disable (void); -private: - bool m_isEnabled; -}; - -}; // namespace ns3 - - -#ifdef NS3_DEBUG_ENABLE - -#include -#include - - -/** - * \ingroup debugging - * \param name a string - * - * Define a Debug component with a specific name. This macro - * should be used at the top of every file in which you want - * to use the NS_DEBUG macro. This macro defines a new - * "debug component" which can be later selectively enabled - * or disabled with the ns3::DebugComponentEnable and - * ns3::DebugComponentDisable functions or with the NS_DEBUG - * environment variable. - */ -#define NS_DEBUG_COMPONENT_DEFINE(name) \ - static ns3::DebugComponent g_debug = ns3::DebugComponent (name) - -/** - * \ingroup debugging - * \param msg message to output - * - * Generate debugging output in the "debug component" of the - * current file. i.e., every call to NS_DEBUG from within - * a file implicitely generates out within the component - * defined with the NS_DEBUG_COMPONENT_DEFINE macro in the - * same file. - */ -#define NS_DEBUG(msg) \ - do \ - { \ - if (g_debug.IsEnabled ()) \ - { \ - std::cerr << msg << std::endl; \ - } \ - } \ - while (false) - -/** - * \ingroup debugging - * \param msg message to output - * - * Generate debugging output unconditionally in all - * debug builds. - */ -#define NS_DEBUG_UNCOND(msg) \ - do \ - { \ - std::cerr << msg << std::endl; \ - } \ - while (false) - -#else /* NS3_DEBUG_ENABLE */ - -#define NS_DEBUG_COMPONENT_DEFINE(name) -#define NS_DEBUG(x) -#define NS_DEBUG_UNCOND(msg) - -#endif /* NS3_DEBUG_ENABLE */ - -#endif /* DEBUG_H */ diff --git a/src/core/random-variable.cc b/src/core/random-variable.cc index fa44440d0..2190b90e1 100644 --- a/src/core/random-variable.cc +++ b/src/core/random-variable.cc @@ -42,7 +42,6 @@ namespace ns3{ //----------------------------------------------------------------------------- // RandomVariable methods -uint32_t RandomVariable::runNumber = 0; bool RandomVariable::initialized = false; // True if RngStream seed set bool RandomVariable::useDevRandom = false; // True if use /dev/random bool RandomVariable::globalSeedSet = false; // True if GlobalSeed called @@ -50,6 +49,7 @@ int RandomVariable::devRandom = -1; uint32_t RandomVariable::globalSeed[6]; unsigned long RandomVariable::heuristic_sequence; RngStream* RandomVariable::m_static_generator = 0; +uint32_t RandomVariable::runNumber = 0; //the static object random_variable_initializer initializes the static members //of RandomVariable @@ -58,9 +58,9 @@ static class RandomVariableInitializer public: RandomVariableInitializer() { - RandomVariable::Initialize(); // sets the static package seed - RandomVariable::m_static_generator = new RngStream(); - RandomVariable::m_static_generator->InitializeStream(); +// RandomVariable::Initialize(); // sets the static package seed +// RandomVariable::m_static_generator = new RngStream(); +// RandomVariable::m_static_generator->InitializeStream(); } ~RandomVariableInitializer() { @@ -69,15 +69,20 @@ static class RandomVariableInitializer } random_variable_initializer; RandomVariable::RandomVariable() + : m_generator(NULL) { - m_generator = new RngStream(); - m_generator->InitializeStream(); - m_generator->ResetNthSubstream(RandomVariable::runNumber); +// m_generator = new RngStream(); +// m_generator->InitializeStream(); +// m_generator->ResetNthSubstream(RandomVariable::runNumber); } RandomVariable::RandomVariable(const RandomVariable& r) + :m_generator(0) { - m_generator = new RngStream(*r.m_generator); + if(r.m_generator) + { + m_generator = new RngStream(*r.m_generator); + } } RandomVariable::~RandomVariable() @@ -97,6 +102,12 @@ void RandomVariable::UseDevRandom(bool udr) void RandomVariable::GetSeed(uint32_t seed[6]) { + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } m_generator->GetState(seed); } @@ -202,6 +213,16 @@ UniformVariable::UniformVariable(const UniformVariable& c) double UniformVariable::GetValue() { + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } return m_min + m_generator->RandU01() * (m_max - m_min); } @@ -212,6 +233,12 @@ RandomVariable* UniformVariable::Copy() const double UniformVariable::GetSingleValue(double s, double l) { + if(!RandomVariable::m_static_generator) + { + RandomVariable::Initialize(); // sets the static package seed + RandomVariable::m_static_generator = new RngStream(); + RandomVariable::m_static_generator->InitializeStream(); + } return s + m_static_generator->RandU01() * (l - s);; } @@ -305,6 +332,16 @@ ExponentialVariable::ExponentialVariable(const ExponentialVariable& c) double ExponentialVariable::GetValue() { + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } double r = -m_mean*log(m_generator->RandU01()); if (m_bound != 0 && r > m_bound) return m_bound; return r; @@ -316,6 +353,12 @@ RandomVariable* ExponentialVariable::Copy() const } double ExponentialVariable::GetSingleValue(double m, double b/*=0*/) { + if(!RandomVariable::m_static_generator) + { + RandomVariable::Initialize(); // sets the static package seed + RandomVariable::m_static_generator = new RngStream(); + RandomVariable::m_static_generator->InitializeStream(); + } double r = -m*log(m_static_generator->RandU01()); if (b != 0 && r > b) return b; return r; @@ -341,6 +384,16 @@ ParetoVariable::ParetoVariable(const ParetoVariable& c) double ParetoVariable::GetValue() { + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } double scale = m_mean * ( m_shape - 1.0) / m_shape; double r = (scale * ( 1.0 / pow(m_generator->RandU01(), 1.0 / m_shape))); if (m_bound != 0 && r > m_bound) return m_bound; @@ -354,6 +407,12 @@ RandomVariable* ParetoVariable::Copy() const double ParetoVariable::GetSingleValue(double m, double s, double b/*=0*/) { + if(!RandomVariable::m_static_generator) + { + RandomVariable::Initialize(); // sets the static package seed + RandomVariable::m_static_generator = new RngStream(); + RandomVariable::m_static_generator->InitializeStream(); + } double scale = m * ( s - 1.0) / s; double r = (scale * ( 1.0 / pow(m_static_generator->RandU01(), 1.0 / s))); if (b != 0 && r > b) return b; @@ -375,6 +434,16 @@ WeibullVariable::WeibullVariable(const WeibullVariable& c) double WeibullVariable::GetValue() { + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } double exponent = 1.0 / m_alpha; double r = m_mean * pow( -log(m_generator->RandU01()), exponent); if (m_bound != 0 && r > m_bound) return m_bound; @@ -388,6 +457,12 @@ RandomVariable* WeibullVariable::Copy() const double WeibullVariable::GetSingleValue(double m, double s, double b/*=0*/) { + if(!RandomVariable::m_static_generator) + { + RandomVariable::Initialize(); // sets the static package seed + RandomVariable::m_static_generator = new RngStream(); + RandomVariable::m_static_generator->InitializeStream(); + } double exponent = 1.0 / s; double r = m * pow( -log(m_static_generator->RandU01()), exponent); if (b != 0 && r > b) return b; @@ -412,6 +487,16 @@ NormalVariable::NormalVariable(const NormalVariable& c) double NormalVariable::GetValue() { + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } if (m_nextValid) { // use previously generated m_nextValid = false; @@ -445,6 +530,12 @@ RandomVariable* NormalVariable::Copy() const double NormalVariable::GetSingleValue(double m, double v, double b) { + if(!RandomVariable::m_static_generator) + { + RandomVariable::Initialize(); // sets the static package seed + RandomVariable::m_static_generator = new RngStream(); + RandomVariable::m_static_generator->InitializeStream(); + } if (m_static_nextValid) { // use previously generated m_static_nextValid = false; @@ -495,6 +586,16 @@ EmpiricalVariable::~EmpiricalVariable() { } double EmpiricalVariable::GetValue() { // Return a value from the empirical distribution // This code based (loosely) on code by Bruce Mah (Thanks Bruce!) + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } if (emp.size() == 0) return 0.0; // HuH? No empirical data if (!validated) Validate(); // Insure in non-decreasing double r = m_generator->RandU01(); @@ -642,6 +743,16 @@ LogNormalVariable::LogNormalVariable (double mu, double sigma) double LogNormalVariable::GetValue () { + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } double u, v, r2, normal, z; do @@ -665,6 +776,12 @@ LogNormalVariable::GetValue () double LogNormalVariable::GetSingleValue (double mu, double sigma) { + if(!RandomVariable::m_static_generator) + { + RandomVariable::Initialize(); // sets the static package seed + RandomVariable::m_static_generator = new RngStream(); + RandomVariable::m_static_generator->InitializeStream(); + } double u, v, r2, normal, z; do { @@ -698,6 +815,16 @@ TriangularVariable::TriangularVariable(const TriangularVariable& c) double TriangularVariable::GetValue() { + if(!RandomVariable::initialized) + { + RandomVariable::Initialize(); + } + if(!m_generator) + { + m_generator = new RngStream(); + m_generator->InitializeStream(); + m_generator->ResetNthSubstream(RandomVariable::runNumber); + } double u = m_generator->RandU01(); if(u <= (m_mode - m_min) / (m_max - m_min) ) return m_min + sqrt(u * (m_max - m_min) * (m_mode - m_min) ); @@ -712,6 +839,12 @@ RandomVariable* TriangularVariable::Copy() const double TriangularVariable::GetSingleValue(double s, double l, double mean) { + if(!RandomVariable::m_static_generator) + { + RandomVariable::Initialize(); // sets the static package seed + RandomVariable::m_static_generator = new RngStream(); + RandomVariable::m_static_generator->InitializeStream(); + } double mode = 3.0*mean-s-l; double u = m_static_generator->RandU01(); if(u <= (mode - s) / (l - s) ) diff --git a/src/core/random-variable.h b/src/core/random-variable.h index ce4cebd4d..ccc5caa34 100644 --- a/src/core/random-variable.h +++ b/src/core/random-variable.h @@ -71,7 +71,7 @@ public: * \brief Returns a random double from the underlying distribution * \return A floating point random value */ - virtual double GetValue() = 0; + virtual double GetValue() = 0; /** * \brief Returns a random integer integer from the underlying distribution @@ -173,19 +173,19 @@ public: */ static void SetRunNumber(uint32_t n); private: - static void Initialize(); // Initialize the RNG system static void GetRandomSeeds(uint32_t seeds[6]); private: - static bool initialized; // True if package seed is set static bool useDevRandom; // True if using /dev/random desired static bool globalSeedSet; // True if global seed has been specified static int devRandom; // File handle for /dev/random static uint32_t globalSeed[6]; // The global seed to use - static uint32_t runNumber; friend class RandomVariableInitializer; protected: static unsigned long heuristic_sequence; static RngStream* m_static_generator; + static uint32_t runNumber; + static void Initialize(); // Initialize the RNG system + static bool initialized; // True if package seed is set RngStream* m_generator; //underlying generator being wrapped }; diff --git a/src/core/wscript b/src/core/wscript index bfb784825..410698d79 100644 --- a/src/core/wscript +++ b/src/core/wscript @@ -29,7 +29,6 @@ def build(bld): core = bld.create_ns3_module('core') core.source = [ 'callback-test.cc', - 'debug.cc', 'log.cc', 'breakpoint.cc', 'ptr.cc', @@ -70,7 +69,6 @@ def build(bld): 'callback.h', 'ptr.h', 'object.h', - 'debug.h', 'log.h', 'assert.h', 'breakpoint.h', diff --git a/src/mobility/grid-topology.cc b/src/mobility/grid-topology.cc index 625cb49ae..1e33a70cd 100644 --- a/src/mobility/grid-topology.cc +++ b/src/mobility/grid-topology.cc @@ -46,7 +46,7 @@ GridTopology::LayoutOneRowFirst (Ptr object, uint32_t i) Ptr mobility = ComponentManager::Create (m_positionClassId, MobilityModel::iid); object->AddInterface (mobility); - mobility->Set (Position (x, y, 0.0)); + mobility->SetPosition (Vector (x, y, 0.0)); } void @@ -58,7 +58,7 @@ GridTopology::LayoutOneColumnFirst (Ptr object, uint32_t i) Ptr mobility = ComponentManager::Create (m_positionClassId, MobilityModel::iid); object->AddInterface (mobility); - mobility->Set (Position (x, y, 0.0)); + mobility->SetPosition (Vector (x, y, 0.0)); } diff --git a/src/mobility/hierarchical-mobility-model.cc b/src/mobility/hierarchical-mobility-model.cc index 00f4643c2..3f72ba1e7 100644 --- a/src/mobility/hierarchical-mobility-model.cc +++ b/src/mobility/hierarchical-mobility-model.cc @@ -56,34 +56,34 @@ HierarchicalMobilityModel::GetParent (void) const return m_parent; } -Position -HierarchicalMobilityModel::DoGet (void) const +Vector +HierarchicalMobilityModel::DoGetPosition (void) const { - Position parentPosition = m_parent->Get (); - Position childPosition = m_child->Get (); - return Position (parentPosition.x + childPosition.x, + Vector parentPosition = m_parent->GetPosition (); + Vector childPosition = m_child->GetPosition (); + return Vector (parentPosition.x + childPosition.x, parentPosition.y + childPosition.y, parentPosition.z + childPosition.z); } void -HierarchicalMobilityModel::DoSet (const Position &position) +HierarchicalMobilityModel::DoSetPosition (const Vector &position) { - // This implementation of DoSet is really an arbitraty choice. + // This implementation of DoSetPosition is really an arbitraty choice. // anything else would have been ok. - Position parentPosition = m_parent->Get (); - Position childPosition (position.x - parentPosition.x, + Vector parentPosition = m_parent->GetPosition (); + Vector childPosition (position.x - parentPosition.x, position.y - parentPosition.y, position.z - parentPosition.z); - m_child->Set (childPosition); + m_child->SetPosition (childPosition); } -Speed -HierarchicalMobilityModel::DoGetSpeed (void) const +Vector +HierarchicalMobilityModel::DoGetVelocity (void) const { - Speed parentSpeed = m_parent->GetSpeed (); - Speed childSpeed = m_child->GetSpeed (); - Speed speed (parentSpeed.dx + childSpeed.dx, - parentSpeed.dy + childSpeed.dy, - parentSpeed.dz + childSpeed.dz); + Vector parentSpeed = m_parent->GetVelocity (); + Vector childSpeed = m_child->GetVelocity (); + Vector speed (parentSpeed.x + childSpeed.x, + parentSpeed.y + childSpeed.y, + parentSpeed.z + childSpeed.z); return speed; } diff --git a/src/mobility/hierarchical-mobility-model.h b/src/mobility/hierarchical-mobility-model.h index 44623244d..f864289f5 100644 --- a/src/mobility/hierarchical-mobility-model.h +++ b/src/mobility/hierarchical-mobility-model.h @@ -58,9 +58,9 @@ public: Ptr GetParent (void) const; private: - virtual Position DoGet (void) const; - virtual void DoSet (const Position &position); - virtual Speed DoGetSpeed (void) const; + virtual Vector DoGetPosition (void) const; + virtual void DoSetPosition (const Vector &position); + virtual Vector DoGetVelocity (void) const; void ParentChanged (const TraceContext &context, Ptr model); void ChildChanged (const TraceContext &context, Ptr model); diff --git a/src/mobility/mobility-model.cc b/src/mobility/mobility-model.cc index 50965d800..c08d51619 100644 --- a/src/mobility/mobility-model.cc +++ b/src/mobility/mobility-model.cc @@ -33,28 +33,28 @@ MobilityModel::MobilityModel () MobilityModel::~MobilityModel () {} -Position -MobilityModel::Get (void) const +Vector +MobilityModel::GetPosition (void) const { - return DoGet (); + return DoGetPosition (); } -Speed -MobilityModel::GetSpeed (void) const +Vector +MobilityModel::GetVelocity (void) const { - return DoGetSpeed (); + return DoGetVelocity (); } void -MobilityModel::Set (const Position &position) +MobilityModel::SetPosition (const Vector &position) { - DoSet (position); + DoSetPosition (position); } double MobilityModel::GetDistanceFrom (Ptr other) const { - Position oPosition = other->DoGet (); - Position position = DoGet (); + Vector oPosition = other->DoGetPosition (); + Vector position = DoGetPosition (); return CalculateDistance (position, oPosition); } diff --git a/src/mobility/mobility-model.h b/src/mobility/mobility-model.h index 07fd171ea..e55b27988 100644 --- a/src/mobility/mobility-model.h +++ b/src/mobility/mobility-model.h @@ -21,8 +21,7 @@ #define MOBILITY_MODEL_H #include "ns3/object.h" -#include "position.h" -#include "speed.h" +#include "vector.h" namespace ns3 { @@ -43,15 +42,15 @@ public: /** * \returns the current position */ - Position Get (void) const; + Vector GetPosition (void) const; /** * \param position the position to set. */ - void Set (const Position &position); + void SetPosition (const Vector &position); /** - * \returns the current position. + * \returns the current velocity. */ - Speed GetSpeed (void) const; + Vector GetVelocity (void) const; /** * \param position a reference to another mobility model * \returns the distance between the two objects. Unit is meters. @@ -70,21 +69,21 @@ private: * Concrete subclasses of this base class must * implement this method. */ - virtual Position DoGet (void) const = 0; + virtual Vector DoGetPosition (void) const = 0; /** * \param position the position to set. * * Concrete subclasses of this base class must * implement this method. */ - virtual void DoSet (const Position &position) = 0; + virtual void DoSetPosition (const Vector &position) = 0; /** - * \returns the current speed. + * \returns the current velocity. * * Concrete subclasses of this base class must * implement this method. */ - virtual Speed DoGetSpeed (void) const = 0; + virtual Vector DoGetVelocity (void) const = 0; }; }; // namespace ns3 diff --git a/src/mobility/ns2-mobility-file-topology.cc b/src/mobility/ns2-mobility-file-topology.cc index 7d0b8c915..44a31d8a3 100644 --- a/src/mobility/ns2-mobility-file-topology.cc +++ b/src/mobility/ns2-mobility-file-topology.cc @@ -20,14 +20,14 @@ */ #include #include -#include "ns3/debug.h" +#include "ns3/log.h" #include "ns3/simulator.h" #include "ns3/node-list.h" #include "ns3/node.h" #include "ns2-mobility-file-topology.h" #include "static-speed-mobility-model.h" -NS_DEBUG_COMPONENT_DEFINE ("Ns2MobilityFileTopology"); +NS_LOG_COMPONENT_DEFINE ("Ns2MobilityFileTopology"); namespace ns3 { @@ -97,27 +97,27 @@ Ns2MobilityFileTopology::LayoutObjectStore (const ObjectStore &store) const { double value = ReadDouble (line.substr (endNodeId + 9, std::string::npos)); std::string coordinate = line.substr (endNodeId + 6, 1); - Position position = model->Get (); + Vector position = model->GetPosition (); if (coordinate == "X") { position.x = value; - NS_DEBUG ("X=" << value); + NS_LOG_DEBUG ("X=" << value); } else if (coordinate == "Y") { position.y = value; - NS_DEBUG ("Y=" << value); + NS_LOG_DEBUG ("Y=" << value); } else if (coordinate == "Z") { position.z = value; - NS_DEBUG ("Z=" << value); + NS_LOG_DEBUG ("Z=" << value); } else { continue; } - model->Set (position); + model->SetPosition (position); } else { @@ -127,9 +127,9 @@ Ns2MobilityFileTopology::LayoutObjectStore (const ObjectStore &store) const double xSpeed = ReadDouble (line.substr (endNodeId + 10, xSpeedEnd - endNodeId - 10)); double ySpeed = ReadDouble (line.substr (xSpeedEnd + 1, ySpeedEnd - xSpeedEnd - 1)); double zSpeed = ReadDouble (line.substr (ySpeedEnd + 1, std::string::npos)); - NS_DEBUG ("at=" << at << "xSpeed=" << xSpeed << ", ySpeed=" << ySpeed << ", zSpeed=" << zSpeed); + NS_LOG_DEBUG ("at=" << at << "xSpeed=" << xSpeed << ", ySpeed=" << ySpeed << ", zSpeed=" << zSpeed); Simulator::Schedule (Seconds (at), &StaticSpeedMobilityModel::SetSpeed, model, - Speed (xSpeed, ySpeed, zSpeed)); + Vector (xSpeed, ySpeed, zSpeed)); } } file.close(); diff --git a/src/mobility/random-direction-2d-mobility-model.cc b/src/mobility/random-direction-2d-mobility-model.cc index 9df80874c..cb91c7144 100644 --- a/src/mobility/random-direction-2d-mobility-model.cc +++ b/src/mobility/random-direction-2d-mobility-model.cc @@ -153,12 +153,12 @@ RandomDirection2dMobilityModel::SetDirectionAndSpeed (double direction) { NS_LOG_FUNCTION; double speed = m_parameters->m_speedVariable->GetValue (); - const Speed vector (std::cos (direction) * speed, - std::sin (direction) * speed, - 0.0); - Position position = m_helper.GetCurrentPosition (m_parameters->m_bounds); + const Vector vector (std::cos (direction) * speed, + std::sin (direction) * speed, + 0.0); + Vector position = m_helper.GetCurrentPosition (m_parameters->m_bounds); m_helper.Reset (vector); - Position next = m_parameters->m_bounds.CalculateIntersection (position, vector); + Vector next = m_parameters->m_bounds.CalculateIntersection (position, vector); Time delay = Seconds (CalculateDistance (position, next) / speed); m_event = Simulator::Schedule (delay, &RandomDirection2dMobilityModel::BeginPause, this); @@ -169,7 +169,7 @@ RandomDirection2dMobilityModel::ResetDirectionAndSpeed (void) { double direction = UniformVariable::GetSingleValue (0, PI); - Position position = m_helper.GetCurrentPosition (m_parameters->m_bounds); + Vector position = m_helper.GetCurrentPosition (m_parameters->m_bounds); switch (m_parameters->m_bounds.GetClosestSide (position)) { case Rectangle::RIGHT: @@ -187,22 +187,22 @@ RandomDirection2dMobilityModel::ResetDirectionAndSpeed (void) } SetDirectionAndSpeed (direction); } -Position -RandomDirection2dMobilityModel::DoGet (void) const +Vector +RandomDirection2dMobilityModel::DoGetPosition (void) const { return m_helper.GetCurrentPosition (m_parameters->m_bounds); } void -RandomDirection2dMobilityModel::DoSet (const Position &position) +RandomDirection2dMobilityModel::DoSetPosition (const Vector &position) { m_helper.InitializePosition (position); Simulator::Remove (m_event); m_event = Simulator::ScheduleNow (&RandomDirection2dMobilityModel::Start, this); } -Speed -RandomDirection2dMobilityModel::DoGetSpeed (void) const +Vector +RandomDirection2dMobilityModel::DoGetVelocity (void) const { - return m_helper.GetSpeed (); + return m_helper.GetVelocity (); } diff --git a/src/mobility/random-direction-2d-mobility-model.h b/src/mobility/random-direction-2d-mobility-model.h index 6dce660a1..24f0fd94e 100644 --- a/src/mobility/random-direction-2d-mobility-model.h +++ b/src/mobility/random-direction-2d-mobility-model.h @@ -106,9 +106,9 @@ class RandomDirection2dMobilityModel : public MobilityModel void SetDirectionAndSpeed (double direction); void InitializeDirectionAndSpeed (void); virtual void DoDispose (void); - virtual Position DoGet (void) const; - virtual void DoSet (const Position &position); - virtual Speed DoGetSpeed (void) const; + virtual Vector DoGetPosition (void) const; + virtual void DoSetPosition (const Vector &position); + virtual Vector DoGetVelocity (void) const; static const double PI; Ptr m_parameters; diff --git a/src/mobility/random-position.cc b/src/mobility/random-position.cc index 4e2a79f69..2dab23144 100644 --- a/src/mobility/random-position.cc +++ b/src/mobility/random-position.cc @@ -91,12 +91,12 @@ RandomRectanglePosition::~RandomRectanglePosition () m_x = 0; m_y = 0; } -Position +Vector RandomRectanglePosition::Get (void) const { double x = m_x->GetValue (); double y = m_y->GetValue (); - return Position (x, y, 0.0); + return Vector (x, y, 0.0); } RandomDiscPosition::RandomDiscPosition () @@ -120,7 +120,7 @@ RandomDiscPosition::~RandomDiscPosition () m_theta = 0; m_rho = 0; } -Position +Vector RandomDiscPosition::Get (void) const { double theta = m_theta->GetValue (); @@ -128,7 +128,7 @@ RandomDiscPosition::Get (void) const double x = m_x + std::cos (theta) * rho; double y = m_y + std::sin (theta) * rho; NS_LOG_DEBUG ("Disc position x=" << x << ", y=" << y); - return Position (x, y, 0.0); + return Vector (x, y, 0.0); } diff --git a/src/mobility/random-position.h b/src/mobility/random-position.h index 04a5b6890..aa4b5a14b 100644 --- a/src/mobility/random-position.h +++ b/src/mobility/random-position.h @@ -22,7 +22,7 @@ #include "ns3/object.h" #include "ns3/component-manager.h" -#include "position.h" +#include "vector.h" namespace ns3 { @@ -42,7 +42,7 @@ public: /** * \returns the next randomly-choosen position. */ - virtual Position Get (void) const = 0; + virtual Vector Get (void) const = 0; }; /** @@ -67,7 +67,7 @@ public: RandomRectanglePosition (const RandomVariable &x, const RandomVariable &y); virtual ~RandomRectanglePosition (); - virtual Position Get (void) const; + virtual Vector Get (void) const; private: RandomVariable *m_x; RandomVariable *m_y; @@ -102,7 +102,7 @@ public: const RandomVariable &rho, double x, double y); virtual ~RandomDiscPosition (); - virtual Position Get (void) const; + virtual Vector Get (void) const; private: RandomVariable *m_theta; RandomVariable *m_rho; diff --git a/src/mobility/random-topology.cc b/src/mobility/random-topology.cc index f04ce2b56..64469053b 100644 --- a/src/mobility/random-topology.cc +++ b/src/mobility/random-topology.cc @@ -70,8 +70,8 @@ RandomTopology::LayoutOne (Ptr object) Ptr mobility = ComponentManager::Create (m_mobilityModel, MobilityModel::iid); object->AddInterface (mobility); - Position position = m_positionModel->Get (); - mobility->Set (position); + Vector position = m_positionModel->Get (); + mobility->SetPosition (position); } diff --git a/src/mobility/random-walk-2d-mobility-model.cc b/src/mobility/random-walk-2d-mobility-model.cc index b6db1b5fa..bf24e9003 100644 --- a/src/mobility/random-walk-2d-mobility-model.cc +++ b/src/mobility/random-walk-2d-mobility-model.cc @@ -24,10 +24,10 @@ #include "ns3/rectangle-default-value.h" #include "ns3/random-variable-default-value.h" #include "ns3/simulator.h" -#include "ns3/debug.h" +#include "ns3/log.h" #include -NS_DEBUG_COMPONENT_DEFINE ("RandomWalk2d"); +NS_LOG_COMPONENT_DEFINE ("RandomWalk2d"); namespace ns3 { @@ -143,9 +143,9 @@ RandomWalk2dMobilityModel::Start (void) { double speed = m_parameters->m_speed->GetValue (); double direction = m_parameters->m_direction->GetValue (); - Speed vector (std::cos (direction) * speed, - std::sin (direction) * speed, - 0.0); + Vector vector (std::cos (direction) * speed, + std::sin (direction) * speed, + 0.0); m_helper.Reset (vector); Time delayLeft; @@ -163,11 +163,11 @@ RandomWalk2dMobilityModel::Start (void) void RandomWalk2dMobilityModel::DoWalk (Time delayLeft) { - Position position = m_helper.GetCurrentPosition (); - Speed speed = m_helper.GetSpeed (); - Position nextPosition = position; - nextPosition.x += speed.dx * delayLeft.GetSeconds (); - nextPosition.y += speed.dy * delayLeft.GetSeconds (); + Vector position = m_helper.GetCurrentPosition (); + Vector speed = m_helper.GetVelocity (); + Vector nextPosition = position; + nextPosition.x += speed.x * delayLeft.GetSeconds (); + nextPosition.y += speed.y * delayLeft.GetSeconds (); if (m_parameters->m_bounds.IsInside (nextPosition)) { m_event = Simulator::Schedule (delayLeft, &RandomWalk2dMobilityModel::Start, this); @@ -175,7 +175,7 @@ RandomWalk2dMobilityModel::DoWalk (Time delayLeft) else { nextPosition = m_parameters->m_bounds.CalculateIntersection (position, speed); - Time delay = Seconds ((nextPosition.x - position.x) / speed.dx); + Time delay = Seconds ((nextPosition.x - position.x) / speed.x); m_event = Simulator::Schedule (delay, &RandomWalk2dMobilityModel::Rebound, this, delayLeft - delay); } @@ -185,17 +185,17 @@ RandomWalk2dMobilityModel::DoWalk (Time delayLeft) void RandomWalk2dMobilityModel::Rebound (Time delayLeft) { - Position position = m_helper.GetCurrentPosition (m_parameters->m_bounds); - Speed speed = m_helper.GetSpeed (); + Vector position = m_helper.GetCurrentPosition (m_parameters->m_bounds); + Vector speed = m_helper.GetVelocity (); switch (m_parameters->m_bounds.GetClosestSide (position)) { case Rectangle::RIGHT: case Rectangle::LEFT: - speed.dx = - speed.dx; + speed.x = - speed.x; break; case Rectangle::TOP: case Rectangle::BOTTOM: - speed.dy = - speed.dy; + speed.y = - speed.y; break; } m_helper.Reset (speed); @@ -209,23 +209,23 @@ RandomWalk2dMobilityModel::DoDispose (void) // chain up MobilityModel::DoDispose (); } -Position -RandomWalk2dMobilityModel::DoGet (void) const +Vector +RandomWalk2dMobilityModel::DoGetPosition (void) const { return m_helper.GetCurrentPosition (m_parameters->m_bounds); } void -RandomWalk2dMobilityModel::DoSet (const Position &position) +RandomWalk2dMobilityModel::DoSetPosition (const Vector &position) { NS_ASSERT (m_parameters->m_bounds.IsInside (position)); m_helper.InitializePosition (position); Simulator::Remove (m_event); m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this); } -Speed -RandomWalk2dMobilityModel::DoGetSpeed (void) const +Vector +RandomWalk2dMobilityModel::DoGetVelocity (void) const { - return m_helper.GetSpeed (); + return m_helper.GetVelocity (); } diff --git a/src/mobility/random-walk-2d-mobility-model.h b/src/mobility/random-walk-2d-mobility-model.h index 2e921216b..46b871753 100644 --- a/src/mobility/random-walk-2d-mobility-model.h +++ b/src/mobility/random-walk-2d-mobility-model.h @@ -132,9 +132,9 @@ class RandomWalk2dMobilityModel : public MobilityModel void Rebound (Time timeLeft); void DoWalk (Time timeLeft); virtual void DoDispose (void); - virtual Position DoGet (void) const; - virtual void DoSet (const Position &position); - virtual Speed DoGetSpeed (void) const; + virtual Vector DoGetPosition (void) const; + virtual void DoSetPosition (const Vector &position); + virtual Vector DoGetVelocity (void) const; StaticSpeedHelper m_helper; EventId m_event; diff --git a/src/mobility/random-waypoint-mobility-model.cc b/src/mobility/random-waypoint-mobility-model.cc index 0078a35c2..01478cc6a 100644 --- a/src/mobility/random-waypoint-mobility-model.cc +++ b/src/mobility/random-waypoint-mobility-model.cc @@ -117,15 +117,15 @@ RandomWaypointMobilityModel::RandomWaypointMobilityModel (Ptrm_position->Get (); + Vector m_current = m_helper.GetCurrentPosition (); + Vector destination = m_parameters->m_position->Get (); double speed = m_parameters->m_speed->GetValue (); double dx = (destination.x - m_current.x); double dy = (destination.y - m_current.y); double dz = (destination.z - m_current.z); double k = speed / std::sqrt (dx*dx + dy*dy + dz*dz); - m_helper.Reset (Speed (k*dx, k*dy, k*dz)); + m_helper.Reset (Vector (k*dx, k*dy, k*dz)); Time travelDelay = Seconds (CalculateDistance (destination, m_current) / speed); m_event = Simulator::Schedule (travelDelay, &RandomWaypointMobilityModel::Start, this); @@ -141,22 +141,22 @@ RandomWaypointMobilityModel::Start (void) m_event = Simulator::Schedule (pause, &RandomWaypointMobilityModel::BeginWalk, this); } -Position -RandomWaypointMobilityModel::DoGet (void) const +Vector +RandomWaypointMobilityModel::DoGetPosition (void) const { return m_helper.GetCurrentPosition (); } void -RandomWaypointMobilityModel::DoSet (const Position &position) +RandomWaypointMobilityModel::DoSetPosition (const Vector &position) { m_helper.InitializePosition (position); Simulator::Remove (m_event); Simulator::ScheduleNow (&RandomWaypointMobilityModel::Start, this); } -Speed -RandomWaypointMobilityModel::DoGetSpeed (void) const +Vector +RandomWaypointMobilityModel::DoGetVelocity (void) const { - return m_helper.GetSpeed (); + return m_helper.GetVelocity (); } diff --git a/src/mobility/random-waypoint-mobility-model.h b/src/mobility/random-waypoint-mobility-model.h index 72aef43b3..3a86f349a 100644 --- a/src/mobility/random-waypoint-mobility-model.h +++ b/src/mobility/random-waypoint-mobility-model.h @@ -98,9 +98,9 @@ public: private: void Start (void); void BeginWalk (void); - virtual Position DoGet (void) const; - virtual void DoSet (const Position &position); - virtual Speed DoGetSpeed (void) const; + virtual Vector DoGetPosition (void) const; + virtual void DoSetPosition (const Vector &position); + virtual Vector DoGetVelocity (void) const; StaticSpeedHelper m_helper; Ptr m_parameters; diff --git a/src/mobility/rectangle.cc b/src/mobility/rectangle.cc index 2f10a7d43..e39f8ae74 100644 --- a/src/mobility/rectangle.cc +++ b/src/mobility/rectangle.cc @@ -18,8 +18,7 @@ * Author: Mathieu Lacage */ #include "rectangle.h" -#include "position.h" -#include "speed.h" +#include "vector.h" #include "ns3/assert.h" #include #include @@ -42,7 +41,7 @@ Rectangle::Rectangle () {} bool -Rectangle::IsInside (const Position &position) const +Rectangle::IsInside (const Vector &position) const { return position.x <= this->xMax && position.x >= this->xMin && @@ -50,7 +49,7 @@ Rectangle::IsInside (const Position &position) const } Rectangle::Side -Rectangle::GetClosestSide (const Position &position) const +Rectangle::GetClosestSide (const Vector &position) const { double xMinDist = std::abs (position.x - this->xMin); double xMaxDist = std::abs (this->xMax - position.x); @@ -82,38 +81,38 @@ Rectangle::GetClosestSide (const Position &position) const } } -Position -Rectangle::CalculateIntersection (const Position ¤t, const Speed &speed) const +Vector +Rectangle::CalculateIntersection (const Vector ¤t, const Vector &speed) const { - double xMaxY = current.y + (this->xMax - current.x) / speed.dx * speed.dy; - double xMinY = current.y + (this->xMin - current.x) / speed.dx * speed.dy; - double yMaxX = current.x + (this->yMax - current.y) / speed.dy * speed.dx; - double yMinX = current.x + (this->yMin - current.y) / speed.dy * speed.dx; + double xMaxY = current.y + (this->xMax - current.x) / speed.x * speed.y; + double xMinY = current.y + (this->xMin - current.x) / speed.x * speed.y; + double yMaxX = current.x + (this->yMax - current.y) / speed.y * speed.x; + double yMinX = current.x + (this->yMin - current.y) / speed.y * speed.x; bool xMaxYOk = (xMaxY <= this->yMax && xMaxY >= this->yMin); bool xMinYOk = (xMinY <= this->yMax && xMinY >= this->yMin); bool yMaxXOk = (yMaxX <= this->xMax && yMaxX >= this->xMin); bool yMinXOk = (yMinX <= this->xMax && yMinX >= this->xMin); - if (xMaxYOk && speed.dx >= 0) + if (xMaxYOk && speed.x >= 0) { - return Position (this->xMax, xMaxY, 0.0); + return Vector (this->xMax, xMaxY, 0.0); } - else if (xMinYOk && speed.dx <= 0) + else if (xMinYOk && speed.x <= 0) { - return Position (this->xMin, xMinY, 0.0); + return Vector (this->xMin, xMinY, 0.0); } - else if (yMaxXOk && speed.dy >= 0) + else if (yMaxXOk && speed.y >= 0) { - return Position (yMaxX, this->yMax, 0.0); + return Vector (yMaxX, this->yMax, 0.0); } - else if (yMinXOk && speed.dy <= 0) + else if (yMinXOk && speed.y <= 0) { - return Position (yMinX, this->yMin, 0.0); + return Vector (yMinX, this->yMin, 0.0); } else { NS_ASSERT (false); // quiet compiler - return Position (0.0, 0.0, 0.0); + return Vector (0.0, 0.0, 0.0); } } diff --git a/src/mobility/rectangle.h b/src/mobility/rectangle.h index df519b545..d61620960 100644 --- a/src/mobility/rectangle.h +++ b/src/mobility/rectangle.h @@ -22,8 +22,7 @@ namespace ns3 { -class Position; -class Speed; +class Vector; /** * \brief a 2d rectangle @@ -51,9 +50,9 @@ public: * Create a zero-sized rectangle located at coordinates (0.0,0.0) */ Rectangle (); - bool IsInside (const Position &position) const; - Side GetClosestSide (const Position &position) const; - Position CalculateIntersection (const Position ¤t, const Speed &speed) const; + bool IsInside (const Vector &position) const; + Side GetClosestSide (const Vector &position) const; + Vector CalculateIntersection (const Vector ¤t, const Vector &speed) const; double xMin; double xMax; diff --git a/src/mobility/speed.cc b/src/mobility/speed.cc deleted file mode 100644 index c6abd0c1d..000000000 --- a/src/mobility/speed.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2007 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#include "speed.h" - -namespace ns3 { - -Speed::Speed (double _dx, double _dy, double _dz) - : dx (_dx), - dy (_dy), - dz (_dz) -{} - -Speed::Speed () - : dx (0.0), - dy (0.0), - dz (0.0) -{} - -} // namespace ns3 diff --git a/src/mobility/speed.h b/src/mobility/speed.h deleted file mode 100644 index d64b1e63b..000000000 --- a/src/mobility/speed.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2007 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#ifndef SPEED_H -#define SPEED_H - -namespace ns3 { - -/** - * \brief keep track of 3d cartesian speed vectors - * - * Unit is meters/s. - */ -class Speed -{ -public: - /** - * \param _dx x coordinate of speed vector - * \param _dy y coordinate of speed vector - * \param _dz z coordinate of speed vector - * - * Create speed vector (_dx, _dy, _dz) - */ - Speed (double _dx, double _dy, double _dz); - /** - * Create speed vector (0.0, 0.0, 0.0) - */ - Speed (); - /** - * x coordinate of speed vector - */ - double dx; - /** - * y coordinate of speed vector - */ - double dy; - /** - * z coordinate of speed vector - */ - double dz; -}; - -} // namespace ns3 - -#endif /* SPEED_H */ diff --git a/src/mobility/static-mobility-model.cc b/src/mobility/static-mobility-model.cc index 5142b8178..6e39678df 100644 --- a/src/mobility/static-mobility-model.cc +++ b/src/mobility/static-mobility-model.cc @@ -28,7 +28,7 @@ StaticMobilityModel::StaticMobilityModel () { SetInterfaceId (StaticMobilityModel::iid); } -StaticMobilityModel::StaticMobilityModel (const Position &position) +StaticMobilityModel::StaticMobilityModel (const Vector &position) : m_position (position) { SetInterfaceId (StaticMobilityModel::iid); @@ -36,21 +36,21 @@ StaticMobilityModel::StaticMobilityModel (const Position &position) StaticMobilityModel::~StaticMobilityModel () {} -Position -StaticMobilityModel::DoGet (void) const +Vector +StaticMobilityModel::DoGetPosition (void) const { return m_position; } void -StaticMobilityModel::DoSet (const Position &position) +StaticMobilityModel::DoSetPosition (const Vector &position) { m_position = position; NotifyCourseChange (); } -Speed -StaticMobilityModel::DoGetSpeed (void) const +Vector +StaticMobilityModel::DoGetVelocity (void) const { - return Speed (); + return Vector (0.0, 0.0, 0.0); } }; // namespace ns3 diff --git a/src/mobility/static-mobility-model.h b/src/mobility/static-mobility-model.h index a1215c08a..995cad598 100644 --- a/src/mobility/static-mobility-model.h +++ b/src/mobility/static-mobility-model.h @@ -44,15 +44,15 @@ public: * Create a position located at coordinates (x,y,z). * Unit is meters */ - StaticMobilityModel (const Position &position); + StaticMobilityModel (const Vector &position); virtual ~StaticMobilityModel (); private: - virtual Position DoGet (void) const; - virtual void DoSet (const Position &position); - virtual Speed DoGetSpeed (void) const; + virtual Vector DoGetPosition (void) const; + virtual void DoSetPosition (const Vector &position); + virtual Vector DoGetVelocity (void) const; - Position m_position; + Vector m_position; }; }; // namespace ns3 diff --git a/src/mobility/static-speed-helper.cc b/src/mobility/static-speed-helper.cc index b2d806ab8..d781494f6 100644 --- a/src/mobility/static-speed-helper.cc +++ b/src/mobility/static-speed-helper.cc @@ -25,40 +25,40 @@ namespace ns3 { StaticSpeedHelper::StaticSpeedHelper () {} -StaticSpeedHelper::StaticSpeedHelper (const Position &position) +StaticSpeedHelper::StaticSpeedHelper (const Vector &position) : m_position (position) {} -StaticSpeedHelper::StaticSpeedHelper (const Position &position, - const Speed &speed) +StaticSpeedHelper::StaticSpeedHelper (const Vector &position, + const Vector &speed) : m_position (position), m_speed (speed), m_paused (true) {} void -StaticSpeedHelper::InitializePosition (const Position &position) +StaticSpeedHelper::InitializePosition (const Vector &position) { m_position = position; - m_speed.dx = 0.0; - m_speed.dy = 0.0; - m_speed.dz = 0.0; + m_speed.x = 0.0; + m_speed.y = 0.0; + m_speed.z = 0.0; m_lastUpdate = Simulator::Now (); m_paused = true; } -Position +Vector StaticSpeedHelper::GetCurrentPosition (void) const { Update (); return m_position; } -Speed -StaticSpeedHelper::GetSpeed (void) const +Vector +StaticSpeedHelper::GetVelocity (void) const { - return m_paused? Speed (0, 0, 0) : m_speed; + return m_paused? Vector (0.0, 0.0, 0.0) : m_speed; } void -StaticSpeedHelper::SetSpeed (const Speed &speed) +StaticSpeedHelper::SetSpeed (const Vector &speed) { Update (); m_speed = speed; @@ -76,13 +76,13 @@ StaticSpeedHelper::Update (void) const Time deltaTime = now - m_lastUpdate; m_lastUpdate = now; double deltaS = deltaTime.GetSeconds (); - m_position.x += m_speed.dx * deltaS; - m_position.y += m_speed.dy * deltaS; - m_position.z += m_speed.dz * deltaS; + m_position.x += m_speed.x * deltaS; + m_position.y += m_speed.y * deltaS; + m_position.z += m_speed.z * deltaS; } void -StaticSpeedHelper::Reset (const Speed &speed) +StaticSpeedHelper::Reset (const Vector &speed) { Update (); m_speed = speed; @@ -98,7 +98,7 @@ StaticSpeedHelper::UpdateFull (const Rectangle &bounds) const m_position.y = std::max (bounds.yMin, m_position.y); } -Position +Vector StaticSpeedHelper::GetCurrentPosition (const Rectangle &bounds) const { UpdateFull (bounds); diff --git a/src/mobility/static-speed-helper.h b/src/mobility/static-speed-helper.h index 343898f22..d743460f4 100644 --- a/src/mobility/static-speed-helper.h +++ b/src/mobility/static-speed-helper.h @@ -21,8 +21,7 @@ #define STATIC_SPEED_HELPER_H #include "ns3/nstime.h" -#include "position.h" -#include "speed.h" +#include "vector.h" namespace ns3 { @@ -32,16 +31,16 @@ class StaticSpeedHelper { public: StaticSpeedHelper (); - StaticSpeedHelper (const Position &position); - StaticSpeedHelper (const Position &position, - const Speed &speed); - void InitializePosition (const Position &position); + StaticSpeedHelper (const Vector &position); + StaticSpeedHelper (const Vector &position, + const Vector &speed); + void InitializePosition (const Vector &position); - void Reset (const Speed &speed); - Position GetCurrentPosition (const Rectangle &bounds) const; - Position GetCurrentPosition (void) const; - Speed GetSpeed (void) const; - void SetSpeed (const Speed &speed); + void Reset (const Vector &speed); + Vector GetCurrentPosition (const Rectangle &bounds) const; + Vector GetCurrentPosition (void) const; + Vector GetVelocity (void) const; + void SetSpeed (const Vector &speed); void Pause (void); void Unpause (void); @@ -49,8 +48,8 @@ class StaticSpeedHelper void Update (void) const; void UpdateFull (const Rectangle &rectangle) const; mutable Time m_lastUpdate; - mutable Position m_position; - Speed m_speed; + mutable Vector m_position; + Vector m_speed; bool m_paused; }; diff --git a/src/mobility/static-speed-mobility-model.cc b/src/mobility/static-speed-mobility-model.cc index 3f0dd3229..779aeae9a 100644 --- a/src/mobility/static-speed-mobility-model.cc +++ b/src/mobility/static-speed-mobility-model.cc @@ -33,13 +33,13 @@ StaticSpeedMobilityModel::StaticSpeedMobilityModel () { SetInterfaceId (StaticSpeedMobilityModel::iid); } -StaticSpeedMobilityModel::StaticSpeedMobilityModel (const Position &position) +StaticSpeedMobilityModel::StaticSpeedMobilityModel (const Vector &position) : m_helper (position) { SetInterfaceId (StaticSpeedMobilityModel::iid); } -StaticSpeedMobilityModel::StaticSpeedMobilityModel (const Position &position, - const Speed &speed) +StaticSpeedMobilityModel::StaticSpeedMobilityModel (const Vector &position, + const Vector &speed) : m_helper (position, speed) { SetInterfaceId (StaticSpeedMobilityModel::iid); @@ -49,28 +49,28 @@ StaticSpeedMobilityModel::~StaticSpeedMobilityModel () {} void -StaticSpeedMobilityModel::SetSpeed (const Speed speed) +StaticSpeedMobilityModel::SetSpeed (const Vector &speed) { m_helper.SetSpeed (speed); NotifyCourseChange (); } -Position -StaticSpeedMobilityModel::DoGet (void) const +Vector +StaticSpeedMobilityModel::DoGetPosition (void) const { return m_helper.GetCurrentPosition (); } void -StaticSpeedMobilityModel::DoSet (const Position &position) +StaticSpeedMobilityModel::DoSetPosition (const Vector &position) { m_helper.InitializePosition (position); NotifyCourseChange (); } -Speed -StaticSpeedMobilityModel::DoGetSpeed (void) const +Vector +StaticSpeedMobilityModel::DoGetVelocity (void) const { - return m_helper.GetSpeed (); + return m_helper.GetVelocity (); } }; // namespace ns3 diff --git a/src/mobility/static-speed-mobility-model.h b/src/mobility/static-speed-mobility-model.h index 85d4793d7..81198d735 100644 --- a/src/mobility/static-speed-mobility-model.h +++ b/src/mobility/static-speed-mobility-model.h @@ -25,7 +25,6 @@ #include "ns3/nstime.h" #include "ns3/component-manager.h" #include "static-speed-helper.h" -#include "speed.h" namespace ns3 { @@ -48,15 +47,15 @@ public: * Create a position located at coordinates (x,y,z) with * speed (0,0,0). */ - StaticSpeedMobilityModel (const Position &position); + StaticSpeedMobilityModel (const Vector &position); /** * * Create a position located at coordinates (x,y,z) with * speed (dx,dy,dz). * Unit is meters and meters/s */ - StaticSpeedMobilityModel (const Position &position, - const Speed &speed); + StaticSpeedMobilityModel (const Vector &position, + const Vector &speed); virtual ~StaticSpeedMobilityModel (); /** @@ -65,11 +64,11 @@ public: * Set the current speed now to (dx,dy,dz) * Unit is meters/s */ - void SetSpeed (const Speed speed); + void SetSpeed (const Vector &speed); private: - virtual Position DoGet (void) const; - virtual void DoSet (const Position &position); - virtual Speed DoGetSpeed (void) const; + virtual Vector DoGetPosition (void) const; + virtual void DoSetPosition (const Vector &position); + virtual Vector DoGetVelocity (void) const; void Update (void) const; StaticSpeedHelper m_helper; }; diff --git a/src/mobility/position.cc b/src/mobility/vector.cc similarity index 87% rename from src/mobility/position.cc rename to src/mobility/vector.cc index 2418cb61e..79917c16e 100644 --- a/src/mobility/position.cc +++ b/src/mobility/vector.cc @@ -17,26 +17,26 @@ * * Author: Mathieu Lacage */ -#include "position.h" +#include "vector.h" #include namespace ns3 { -Position::Position (double _x, double _y, double _z) +Vector::Vector (double _x, double _y, double _z) : x (_x), y (_y), z (_z) {} -Position::Position () +Vector::Vector () : x (0.0), y (0.0), z (0.0) {} double -CalculateDistance (const Position &a, const Position &b) +CalculateDistance (const Vector &a, const Vector &b) { double dx = b.x - a.x; double dy = b.y - a.y; diff --git a/src/mobility/position.h b/src/mobility/vector.h similarity index 65% rename from src/mobility/position.h rename to src/mobility/vector.h index 08ab9a134..6bc277f27 100644 --- a/src/mobility/position.h +++ b/src/mobility/vector.h @@ -17,8 +17,8 @@ * * Author: Mathieu Lacage */ -#ifndef POSITION_H -#define POSITION_H +#ifndef VECTOR_H +#define VECTOR_H namespace ns3 { @@ -27,37 +27,37 @@ namespace ns3 { * * Unit is meters. */ -class Position +class Vector { public: /** - * \param _x x coordinate of position vector - * \param _y y coordinate of position vector - * \param _z z coordinate of position vector + * \param _x x coordinate of vector vector + * \param _y y coordinate of vector vector + * \param _z z coordinate of vector vector * - * Create position vector (_x, _y, _z) + * Create vector vector (_x, _y, _z) */ - Position (double _x, double _y, double _z); + Vector (double _x, double _y, double _z); /** - * Create position vector (0.0, 0.0, 0.0) + * Create vector vector (0.0, 0.0, 0.0) */ - Position (); + Vector (); /** - * x coordinate of position vector + * x coordinate of vector vector */ double x; /** - * y coordinate of position vector + * y coordinate of vector vector */ double y; /** - * z coordinate of position vector + * z coordinate of vector vector */ double z; }; -double CalculateDistance (const Position &a, const Position &b); +double CalculateDistance (const Vector &a, const Vector &b); } // namespace ns3 -#endif /* POSITION_H */ +#endif /* VECTOR_H */ diff --git a/src/mobility/wscript b/src/mobility/wscript index f630a4b71..8b5256a77 100644 --- a/src/mobility/wscript +++ b/src/mobility/wscript @@ -3,16 +3,15 @@ def build(bld): mobility = bld.create_ns3_module('mobility', ['core', 'simulator']) mobility.source = [ + 'vector.cc', 'grid-topology.cc', 'hierarchical-mobility-model.cc', 'mobility-model.cc', 'mobility-model-notifier.cc', - 'position.cc', 'random-position.cc', 'random-topology.cc', 'rectangle.cc', 'rectangle-default-value.cc', - 'speed.cc', 'static-mobility-model.cc', 'static-speed-helper.cc', 'static-speed-mobility-model.cc', @@ -24,16 +23,15 @@ def build(bld): headers = bld.create_obj('ns3header') headers.source = [ + 'vector.h', 'grid-topology.h', 'hierarchical-mobility-model.h', 'mobility-model.h', 'mobility-model-notifier.h', - 'position.h', 'random-position.h', 'random-topology.h', 'rectangle.h', 'rectangle-default-value.h', - 'speed.h', 'static-mobility-model.h', 'static-speed-helper.h', 'static-speed-mobility-model.h', diff --git a/src/routing/olsr/olsr-agent-impl.cc b/src/routing/olsr/olsr-agent-impl.cc index 6697029fd..f0be4cd50 100644 --- a/src/routing/olsr/olsr-agent-impl.cc +++ b/src/routing/olsr/olsr-agent-impl.cc @@ -34,7 +34,7 @@ #include "ns3/udp.h" #include "ns3/internet-node.h" #include "ns3/simulator.h" -#include "ns3/debug.h" +#include "ns3/log.h" #include "ns3/random-variable.h" #include "ns3/inet-socket-address.h" #include "ns3/composite-trace-resolver.h" @@ -143,7 +143,7 @@ namespace ns3 { namespace olsr { -NS_DEBUG_COMPONENT_DEFINE ("OlsrAgent"); +NS_LOG_COMPONENT_DEFINE ("OlsrAgent"); /********** OLSR class **********/ @@ -232,7 +232,7 @@ void AgentImpl::Start () NS_ASSERT (m_mainAddress != Ipv4Address ()); } - NS_DEBUG ("Starting OLSR on node " << m_mainAddress); + NS_LOG_DEBUG ("Starting OLSR on node " << m_mainAddress); m_routingTable = Create (m_ipv4, m_mainAddress); // Add OLSR as routing protocol, with slightly lower priority than @@ -247,7 +247,7 @@ void AgentImpl::Start () TcTimerExpire (); MidTimerExpire (); - NS_DEBUG ("OLSR on node " << m_mainAddress << " started"); + NS_LOG_DEBUG ("OLSR on node " << m_mainAddress << " started"); } void AgentImpl::SetMainInterface (uint32_t interface) @@ -284,7 +284,7 @@ AgentImpl::RecvOlsr (Ptr socket, Ptr receivedPacket, const Address &sourceAddress) { - NS_DEBUG ("OLSR node " << m_mainAddress << " received a OLSR packet"); + NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " received a OLSR packet"); InetSocketAddress inetSourceAddr = InetSocketAddress::ConvertFrom (sourceAddress); // All routing messages are sent from and to port RT_PORT, @@ -308,7 +308,7 @@ AgentImpl::RecvOlsr (Ptr socket, sizeLeft -= messageHeader.GetSerializedSize (); - NS_DEBUG ("Olsr Msg received with type " + NS_LOG_DEBUG ("Olsr Msg received with type " << std::dec << int (messageHeader.GetMessageType ()) << " TTL=" << int (messageHeader.GetTimeToLive ()) << " origAddr=" << messageHeader.GetOriginatorAddress ()); @@ -343,29 +343,29 @@ AgentImpl::RecvOlsr (Ptr socket, switch (messageHeader.GetMessageType ()) { case olsr::MessageHeader::HELLO_MESSAGE: - NS_DEBUG ("OLSR node received HELLO message of size " << messageHeader.GetSerializedSize ()); + NS_LOG_DEBUG ("OLSR node received HELLO message of size " << messageHeader.GetSerializedSize ()); ProcessHello (messageHeader, m_mainAddress, inetSourceAddr.GetIpv4 ()); break; case olsr::MessageHeader::TC_MESSAGE: - NS_DEBUG ("OLSR node received TC message of size " << messageHeader.GetSerializedSize ()); + NS_LOG_DEBUG ("OLSR node received TC message of size " << messageHeader.GetSerializedSize ()); ProcessTc (messageHeader, inetSourceAddr.GetIpv4 ()); break; case olsr::MessageHeader::MID_MESSAGE: - NS_DEBUG ("OLSR node received MID message of size " << messageHeader.GetSerializedSize ()); + NS_LOG_DEBUG ("OLSR node received MID message of size " << messageHeader.GetSerializedSize ()); ProcessMid (messageHeader, inetSourceAddr.GetIpv4 ()); break; default: - NS_DEBUG ("OLSR message type " << + NS_LOG_DEBUG ("OLSR message type " << int (messageHeader.GetMessageType ()) << " not implemented"); } } else { - NS_DEBUG ("OLSR message is duplicated, not reading it."); + NS_LOG_DEBUG ("OLSR message is duplicated, not reading it."); // If the message has been considered for forwarding, it should // not be retransmitted again @@ -1093,7 +1093,7 @@ void AgentImpl::SendPacket (Ptr packet, const MessageList &containedMessages) { - NS_DEBUG ("OLSR node " << m_mainAddress << " sending a OLSR packet"); + NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " sending a OLSR packet"); // Add a header olsr::PacketHeader header; @@ -1121,7 +1121,7 @@ AgentImpl::SendQueuedMessages () Ptr packet = Create (); int numMessages = 0; - NS_DEBUG ("Olsr node " << m_mainAddress << ": SendQueuedMessages"); + NS_LOG_DEBUG ("Olsr node " << m_mainAddress << ": SendQueuedMessages"); MessageList msglist; @@ -1249,8 +1249,8 @@ AgentImpl::SendHello () linkMessages.push_back (linkMessage); } - NS_DEBUG ("OLSR HELLO message size: " << int (msg.GetSerializedSize ()) - << " (with " << int (linkMessages.size ()) << " link messages)"); + NS_LOG_DEBUG ("OLSR HELLO message size: " << int (msg.GetSerializedSize ()) + << " (with " << int (linkMessages.size ()) << " link messages)"); QueueMessage (msg, JITTER); } @@ -2113,40 +2113,3 @@ AgentImpl::IfaceAssocTupleTimerExpire (IfaceAssocTuple tuple) }} // namespace olsr, ns3 - -#ifdef RUN_SELF_TESTS - - -#include "ns3/test.h" - -namespace ns3 { - -class OlsrTest : public ns3::Test { -private: -public: - OlsrTest (); - virtual bool RunTests (void); - - -}; - -OlsrTest::OlsrTest () - : ns3::Test ("Olsr") -{} - - -bool -OlsrTest::RunTests (void) -{ - bool result = true; - - - return result; -} - -static OlsrTest gOlsrTest; - -} - - -#endif /* RUN_SELF_TESTS */ diff --git a/src/routing/olsr/olsr-agent-impl.h b/src/routing/olsr/olsr-agent-impl.h index 4305d5682..22722c852 100644 --- a/src/routing/olsr/olsr-agent-impl.h +++ b/src/routing/olsr/olsr-agent-impl.h @@ -48,8 +48,6 @@ namespace olsr { class AgentImpl : public Agent { - friend class OlsrTest; - public: AgentImpl (Ptr node); diff --git a/src/routing/olsr/routing-table.cc b/src/routing/olsr/routing-table.cc index 4d1678e89..f655907df 100644 --- a/src/routing/olsr/routing-table.cc +++ b/src/routing/olsr/routing-table.cc @@ -28,11 +28,11 @@ #include "routing-table.h" #include "ns3/packet.h" #include "ns3/ipv4-header.h" -#include "ns3/debug.h" +#include "ns3/log.h" namespace ns3 { namespace olsr { -NS_DEBUG_COMPONENT_DEFINE ("OlsrRoutingTable"); +NS_LOG_COMPONENT_DEFINE ("OlsrRoutingTable"); /// /// \brief Clears the routing table and frees the memory assigned to each one of its entries. @@ -119,19 +119,19 @@ RoutingTable::RequestRoute (uint32_t ifIndex, Ipv4Route route = Ipv4Route::CreateHostRouteTo (ipHeader.GetDestination (), entry2.nextAddr, entry2.interface); - NS_DEBUG ("Olsr node" << m_mainAddress - << ": RouteRequest for dest=" << ipHeader.GetDestination () - << " --> destHop=" << entry2.nextAddr - << " interface=" << entry2.interface); + NS_LOG_DEBUG ("Olsr node" << m_mainAddress + << ": RouteRequest for dest=" << ipHeader.GetDestination () + << " --> destHop=" << entry2.nextAddr + << " interface=" << entry2.interface); routeReply (true, route, packet, ipHeader); return true; } else { - NS_DEBUG ("Olsr node" << m_mainAddress - << ": RouteRequest for dest=" << ipHeader.GetDestination () - << " --> NOT FOUND"); + NS_LOG_DEBUG ("Olsr node" << m_mainAddress + << ": RouteRequest for dest=" << ipHeader.GetDestination () + << " --> NOT FOUND"); return false; } } diff --git a/tutorial/hello-simulator.cc b/tutorial/hello-simulator.cc index 50ded681c..a99b37f0c 100644 --- a/tutorial/hello-simulator.cc +++ b/tutorial/hello-simulator.cc @@ -15,7 +15,6 @@ */ #include "ns3/log.h" -#include "ns3/debug.h" NS_LOG_COMPONENT_DEFINE ("HelloSimulator"); @@ -24,8 +23,6 @@ using namespace ns3; int main (int argc, char *argv[]) { - DebugComponentEnable ("Log"); - // LogComponentEnable ("HelloSimulator", // LogLevel (LOG_LEVEL_INFO | LOG_PREFIX_ALL)); diff --git a/utils/bench-packets.cc b/utils/bench-packets.cc index cdf1d9f23..5d4776ef9 100644 --- a/utils/bench-packets.cc +++ b/utils/bench-packets.cc @@ -211,13 +211,19 @@ int main (int argc, char *argv[]) argc--; argv++; } + if (n == 0) + { + std::cerr << "Error-- number of packets must be specified " << + "by command-line argument --n=(number of packets)" << std::endl; + exit (1); + } + std::cout << "Running bench-packets with n=" << n << std::endl; - + Packet::EnableMetadata (); runBench (&benchPtrA, n, "a"); runBench (&benchPtrB, n, "b"); runBench (&benchPtrC, n, "c"); - Packet::EnableMetadata (); //runBench (&benchPrint, n, "print"); PacketMetadata::SetOptOne (false); runBench (&benchPtrA, n, "meta-a"); diff --git a/utils/mobility-visualizer-model.cc b/utils/mobility-visualizer-model.cc index 21cb007e4..8b48c6b69 100644 --- a/utils/mobility-visualizer-model.cc +++ b/utils/mobility-visualizer-model.cc @@ -48,15 +48,15 @@ Sample () { Ptr node = *nodeIter; Ptr mobility = node->QueryInterface (MobilityModel::iid); - Position pos = mobility->Get (); - Speed vel = mobility->GetSpeed (); + Vector pos = mobility->GetPosition (); + Vector vel = mobility->GetVelocity (); NodeUpdate update; update.node = PeekPointer (node); update.x = pos.x; update.y = pos.y; - update.vx = vel.dx; - update.vy = vel.dy; + update.vx = vel.x; + update.vy = vel.y; data->updateList.push_back (update); } data->time = Simulator::Now ().GetSeconds (); diff --git a/utils/run-tests.cc b/utils/run-tests.cc index f99f560c3..ce3b38c00 100644 --- a/utils/run-tests.cc +++ b/utils/run-tests.cc @@ -21,11 +21,13 @@ #include "ns3/test.h" #include "ns3/packet-metadata.h" +#include "ns3/random-variable.h" int main (int argc, char *argv[]) { #ifdef RUN_SELF_TESTS + ns3::RandomVariable::UseGlobalSeed(1,2,3,4,5,6); ns3::PacketMetadata::Enable (); ns3::TestManager::EnableVerbose (); bool success = ns3::TestManager::RunTests (); diff --git a/wscript b/wscript index 430675d1f..5bf302938 100644 --- a/wscript +++ b/wscript @@ -118,7 +118,6 @@ def configure(conf): variant_env.append_value('CXXFLAGS', ['-Werror']) if 'debug' in Params.g_options.debug_level.lower(): - variant_env.append_value('CXXDEFINES', 'NS3_DEBUG_ENABLE') variant_env.append_value('CXXDEFINES', 'NS3_ASSERT_ENABLE') variant_env.append_value('CXXDEFINES', 'NS3_LOG_ENABLE')