samples/main-ptr.cc
author Florian Westphal <fw@strlen.de>
Wed, 03 Sep 2008 23:24:59 +0200
changeset 3595 693faf7f4e9b
parent 2230 9f13ac3291e0
permissions -rw-r--r--
nsc: Fix build problem if gtk config store is disabled gtk config store pulled in libdl.so for us, so things fail to link of the config store isn't enabled. This makes nsc pull in libdl itself when its enabled.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#include "ns3/ptr.h"
542
00722b9a01b3 Ptr changed to use Object's refcounts
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
     3
#include "ns3/object.h"
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include <iostream>
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
using namespace ns3;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
542
00722b9a01b3 Ptr changed to use Object's refcounts
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 286
diff changeset
     8
class A : public Object
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
{
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
public:
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
  A ();
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
  ~A ();
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
  void Method (void);
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
};
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
A::A ()
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
{
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
  std::cout << "A constructor" << std::endl;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
}
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
A::~A()
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
{
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
  std::cout << "A destructor" << std::endl;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
}
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
void
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
A::Method (void)
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
{
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
  std::cout << "A method" << std::endl;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
}
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
static Ptr<A> g_a = 0;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
static Ptr<A>
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
StoreA (Ptr<A> a)
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
{
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
  Ptr<A> prev = g_a;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
  g_a = a;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
  return prev;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
}
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
static void
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
ClearA (void)
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
{
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  g_a = 0;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
}
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
int main (int argc, char *argv[])
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
{
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
  {
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
    // Create a new object of type A, store it in global 
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
    // variable g_a
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    52
    Ptr<A> a = CreateObject<A> ();
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
    a->Method ();
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
    Ptr<A> prev = StoreA (a);
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 226
diff changeset
    55
    NS_ASSERT (prev == 0);
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
  }
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  {
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
    // Create a new object of type A, store it in global 
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
    // variable g_a, get a hold on the previous A object.
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    61
    Ptr<A> a = CreateObject<A> ();
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
    Ptr<A> prev = StoreA (a);
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
    // call method on object
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
    prev->Method ();
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
    // Clear the currently-stored object
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
    ClearA ();
573
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
    67
    // get the raw pointer and release it.
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
    68
    A *raw = GetPointer (prev);
544
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 542
diff changeset
    69
    prev = 0;
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
    raw->Method ();
573
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
    71
    raw->Unref ();
226
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
  }
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
  return 0;
1f8c4e56bc86 add smart pointer sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
}