src/core/ptr.cc
author tjkopena@cs.drexel.edu
Fri, 29 Aug 2008 13:22:09 -0400
changeset 3570 44b0bc6817c6
parent 2834 1aab57845b07
child 3767 b03ea30335a3
permissions -rw-r--r--
Stats module and example merged in.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "ptr.h"
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#ifdef RUN_SELF_TESTS
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "test.h"
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
namespace ns3 {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    28
class NoCount;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    29
1007
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    30
template <typename T>
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    31
void Foo (void) {}
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    32
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
class PtrTest : Test
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
{
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
public:
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
  PtrTest ();
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  virtual ~PtrTest ();
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  virtual bool RunTests (void);
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    39
  void DestroyNotify (void);
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
private:
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
    41
  Ptr<NoCount> CallTest (Ptr<NoCount> p);
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
    42
  Ptr<NoCount> const CallTestConst (Ptr<NoCount> const p);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
    43
  uint32_t m_nDestroyed;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
};
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    46
2630
17b545238ab3 do not use ObjectBase as a base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2402
diff changeset
    47
class Base
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    48
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    49
public:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    50
  Base ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    51
  virtual ~Base ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    52
  void Ref (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    53
  void Unref (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    54
private:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    55
  mutable uint32_t m_count;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    56
};
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    57
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    58
class NoCount : public Base
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    59
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    60
public:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    61
  NoCount (PtrTest *test);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    62
  ~NoCount ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    63
  void Nothing (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    64
private:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    65
  PtrTest *m_test;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    66
};
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    67
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    68
Base::Base ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    69
  : m_count (1)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    70
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    71
Base::~Base ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    72
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    73
void 
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    74
Base::Ref (void) const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    75
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    76
  m_count++;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    77
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    78
void 
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    79
Base::Unref (void) const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    80
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    81
  m_count--;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    82
  if (m_count == 0)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    83
    {
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    84
      delete this;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    85
    }
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    86
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    87
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    88
NoCount::NoCount (PtrTest *test)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    89
  : m_test (test)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    90
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    91
NoCount::~NoCount ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    92
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    93
  m_test->DestroyNotify ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    94
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    95
void
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    96
NoCount::Nothing () const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    97
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    98
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
PtrTest::PtrTest ()
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
  : Test ("Ptr")
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
{}
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
PtrTest::~PtrTest ()
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
{}
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
void 
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
PtrTest::DestroyNotify (void)
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
{
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   109
  m_nDestroyed++;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
}
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   111
Ptr<NoCount> 
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   112
PtrTest::CallTest (Ptr<NoCount> p)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   113
{
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   114
  return p;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   115
}
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   117
Ptr<NoCount> const 
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   118
PtrTest::CallTestConst (Ptr<NoCount> const p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   119
{
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   120
  return p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   121
}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   122
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
bool
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
PtrTest::RunTests (void)
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
{
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
  bool ok = true;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   128
  m_nDestroyed = false;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   130
    Ptr<NoCount> p = Create<NoCount> (this);
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
  }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   132
  if (m_nDestroyed != 1)
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
    {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
      ok = false;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
    }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   136
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   137
  m_nDestroyed = 0;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
  {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
    Ptr<NoCount> p;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   140
    p = Create<NoCount> (this);
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   141
    p = p;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
  }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   143
  if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   144
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   145
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   146
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   147
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   148
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   149
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   150
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   151
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   152
    Ptr<NoCount> p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   153
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   154
  if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   155
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   156
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   157
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   158
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   159
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   160
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   161
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   162
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   163
    Ptr<NoCount> p2;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   164
    p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   165
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   166
  if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   167
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   168
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   169
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   170
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   171
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   172
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   173
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   174
    p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   175
    Ptr<NoCount> p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   176
    p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   177
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   178
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   179
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   180
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   181
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   182
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   183
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   184
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   185
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   186
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   187
    Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   188
    p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   189
    p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   190
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   191
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   192
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   193
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   194
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   195
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   196
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   197
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   198
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   199
    p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   200
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   201
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   202
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   203
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   204
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   205
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   206
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   207
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   208
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   209
    Ptr<NoCount> p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   210
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   211
      Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   212
      p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   213
      p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   214
      p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   215
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   216
    if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   217
      {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   218
        ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   219
      }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   220
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   221
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   222
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   223
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   224
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   225
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   226
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   227
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   228
    Ptr<NoCount> p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   229
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   230
      Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   231
      p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   232
      p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   233
      p2 = CallTest (p1);
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   234
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   235
    if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   236
      {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   237
        ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   238
      }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   239
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   240
  if (m_nDestroyed != 2)
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
    {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
      ok = false;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
    }
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   244
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   245
  {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   246
    Ptr<NoCount> p1;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   247
    Ptr<NoCount> const p2 = CallTest (p1);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   248
    Ptr<NoCount> const p3 = CallTestConst (p1);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   249
    Ptr<NoCount> p4 = CallTestConst (p1);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   250
    Ptr<NoCount const> p5 = p4;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   251
    //p4 = p5; You cannot make a const pointer be a non-const pointer.
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   252
    // but if you use const_pointer_cast, you can.
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   253
    p4 = const_pointer_cast<NoCount> (p5);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   254
    p5 = p1;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   255
    Ptr<NoCount> p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   256
    if (p == 0)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   257
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   258
    if (p != 0)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   259
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   260
    if (0 == p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   261
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   262
    if (0 != p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   263
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   264
    if (p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   265
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   266
    if (!p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   267
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   268
  }
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   269
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   270
  m_nDestroyed = 0;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   271
  {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   272
    NoCount *raw;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   273
    {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   274
      Ptr<NoCount> p = Create<NoCount> (this);
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   275
      {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   276
        Ptr<NoCount const> p1 = p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   277
      }
573
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 569
diff changeset
   278
      raw = GetPointer (p);
544
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   279
      p = 0;
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   280
    }
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   281
    if (m_nDestroyed != 0)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   282
      {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   283
        ok = false;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   284
      }
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   285
    delete raw;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   286
  }
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   287
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   288
  m_nDestroyed = 0;
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   289
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   290
    Ptr<NoCount> p = Create<NoCount> (this);
573
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 569
diff changeset
   291
    const NoCount *v1 = PeekPointer (p);
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 569
diff changeset
   292
    NoCount *v2 = PeekPointer (p);
544
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   293
    v1->Nothing ();
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   294
    v2->Nothing ();
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   295
  }
544
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   296
  if (m_nDestroyed != 1)
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   297
    {
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   298
      ok = false;
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   299
    }
567
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   300
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   301
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   302
    Ptr<Base> p0 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   303
    Ptr<NoCount> p1 = Create<NoCount> (this);
567
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   304
    if (p0 == p1)
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   305
      {
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   306
        ok = false;
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   307
      }
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   308
    if (p0 != p1)
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   309
      {
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   310
      }
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   311
    else
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   312
      {
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   313
        ok = false;
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   314
      }
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   315
  }
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   316
#if 0
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   317
  {
2370
5f7ad186b798 introduce ObjectBase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   318
    Ptr<NoCount> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   319
    Callback<void> callback = MakeCallback (&NoCount::Nothing, p);
689
49bccd847179 add tests and fix leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 685
diff changeset
   320
    callback ();
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   321
  }
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   322
  {
2370
5f7ad186b798 introduce ObjectBase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   323
    Ptr<const NoCount> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   324
    Callback<void> callback = MakeCallback (&NoCount::Nothing, p);
689
49bccd847179 add tests and fix leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 685
diff changeset
   325
    callback ();
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   326
  }
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   327
#endif
1007
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   328
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   329
#if 0
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   330
  // as expected, fails compilation.
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   331
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   332
    Ptr<const Base> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   333
    Callback<void> callback = MakeCallback (&NoCount::Nothing, p);
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   334
  }
1007
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   335
  // local types are not allowed as arguments to a template.
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   336
  {
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   337
    class B
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   338
    {
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   339
    public:
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   340
      B () {}
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   341
    };
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   342
    Foo<B> ();
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   343
  }
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   344
#endif
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
  
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
  return ok;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
}
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
PtrTest g_ptr_test;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
}; // namespace ns3
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
#endif /* RUN_SELF_TESTS */