src/core/ptr.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sun, 02 Mar 2008 21:12:21 +0100
changeset 2532 86a40c7cbfe9
parent 2402 0950067d70a2
child 2630 17b545238ab3
permissions -rw-r--r--
register and unregister the NodeList as a config root namespace
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
 * All rights reserved.
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * 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
     7
 * 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
     8
 * published by the Free Software Foundation;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * 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
    11
 * 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
    12
 * 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
    13
 * GNU General Public License for more details.
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * 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
    16
 * 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
    17
 * 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
    18
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * 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
    20
 */
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "ptr.h"
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#ifdef RUN_SELF_TESTS
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "test.h"
2370
5f7ad186b798 introduce ObjectBase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
    26
#include "object-base.h"
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
namespace ns3 {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    30
class NoCount;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    31
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
    32
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
    33
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
    34
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
class PtrTest : Test
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
{
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
public:
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  PtrTest ();
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  virtual ~PtrTest ();
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
  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
    41
  void DestroyNotify (void);
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
private:
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
    43
  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
    44
  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
    45
  uint32_t m_nDestroyed;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
};
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    48
2370
5f7ad186b798 introduce ObjectBase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
    49
class Base : public ObjectBase
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    50
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    51
public:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    52
  Base ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    53
  virtual ~Base ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    54
  void Ref (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    55
  void Unref (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    56
private:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    57
  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
    58
};
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
class NoCount : public Base
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    61
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    62
public:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    63
  NoCount (PtrTest *test);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    64
  ~NoCount ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    65
  void Nothing (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    66
private:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    67
  PtrTest *m_test;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    68
};
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    69
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    70
Base::Base ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    71
  : m_count (1)
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
Base::~Base ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    74
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    75
void 
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    76
Base::Ref (void) const
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
  m_count++;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    79
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    80
void 
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    81
Base::Unref (void) const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    82
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    83
  m_count--;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    84
  if (m_count == 0)
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
      delete this;
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
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    89
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    90
NoCount::NoCount (PtrTest *test)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    91
  : m_test (test)
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
NoCount::~NoCount ()
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
  m_test->DestroyNotify ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    96
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    97
void
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    98
NoCount::Nothing () const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    99
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   100
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
PtrTest::PtrTest ()
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
  : Test ("Ptr")
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
{}
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
PtrTest::~PtrTest ()
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
{}
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
void 
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
PtrTest::DestroyNotify (void)
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
  m_nDestroyed++;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
}
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   113
Ptr<NoCount> 
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   114
PtrTest::CallTest (Ptr<NoCount> p)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   115
{
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   116
  return p;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   117
}
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   119
Ptr<NoCount> const 
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   120
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
   121
{
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   122
  return p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   123
}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   124
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
bool
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
PtrTest::RunTests (void)
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
{
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
  bool ok = true;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   130
  m_nDestroyed = false;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   132
    Ptr<NoCount> p = Create<NoCount> (this);
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
  }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   134
  if (m_nDestroyed != 1)
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
    {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
      ok = false;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
    }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   138
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   139
  m_nDestroyed = 0;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
  {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
    Ptr<NoCount> p;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   142
    p = Create<NoCount> (this);
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   143
    p = p;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
  }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   145
  if (m_nDestroyed != 1)
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
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   148
    }
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
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   151
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   152
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   153
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   154
    Ptr<NoCount> p2 = p1;
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
  if (m_nDestroyed != 1)
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
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   159
    }
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
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   162
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   163
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   164
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   165
    Ptr<NoCount> p2;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   166
    p2 = p1;
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
  if (m_nDestroyed != 1)
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
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   171
    }
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
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   174
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   175
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   176
    p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   177
    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
   178
    p2 = p1;
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
  if (m_nDestroyed != 2)
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
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   183
    }
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
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   186
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   187
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   188
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   189
    Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   190
    p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   191
    p2 = p1;
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
  if (m_nDestroyed != 2)
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
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   196
    }
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
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   199
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   200
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   201
    p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   202
    p1 = Create<NoCount> (this);
224
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
  if (m_nDestroyed != 2)
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
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   207
    }
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
  m_nDestroyed = 0;
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> p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   212
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   213
      Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   214
      p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   215
      p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   216
      p2 = p1;
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
    if (m_nDestroyed != 1)
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
        ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   221
      }
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
  if (m_nDestroyed != 2)
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
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   226
    }
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
  m_nDestroyed = 0;
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> p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   231
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   232
      Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   233
      p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   234
      p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   235
      p2 = CallTest (p1);
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
    if (m_nDestroyed != 1)
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
        ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   240
      }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   241
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   242
  if (m_nDestroyed != 2)
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
    {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
      ok = false;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
    }
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   246
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   247
  {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   248
    Ptr<NoCount> p1;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   249
    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
   250
    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
   251
    Ptr<NoCount> p4 = CallTestConst (p1);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   252
    Ptr<NoCount const> p5 = p4;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   253
    //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
   254
    // 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
   255
    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
   256
    p5 = p1;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   257
    Ptr<NoCount> p;
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 (p != 0)
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 (0 != 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
    if (!p)
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
  }
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
  m_nDestroyed = 0;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   273
  {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   274
    NoCount *raw;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   275
    {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   276
      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
   277
      {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   278
        Ptr<NoCount const> p1 = p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   279
      }
573
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 569
diff changeset
   280
      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
   281
      p = 0;
225
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
    if (m_nDestroyed != 0)
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
        ok = false;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   286
      }
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   287
    delete raw;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   288
  }
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   289
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   290
  m_nDestroyed = 0;
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   291
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   292
    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
   293
    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
   294
    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
   295
    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
   296
    v2->Nothing ();
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   297
  }
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
   298
  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
   299
    {
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   300
      ok = false;
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   301
    }
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
   302
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
   303
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   304
    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
   305
    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
   306
    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
   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
        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
   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
    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
   311
      {
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
    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
   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
        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
   316
      }
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
   317
  }
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   318
#if 0
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   319
  {
2370
5f7ad186b798 introduce ObjectBase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   320
    Ptr<NoCount> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   321
    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
   322
    callback ();
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   323
  }
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   324
  {
2370
5f7ad186b798 introduce ObjectBase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   325
    Ptr<const NoCount> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   326
    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
   327
    callback ();
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   328
  }
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   329
#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
   330
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   331
#if 0
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   332
  // as expected, fails compilation.
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   333
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   334
    Ptr<const Base> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   335
    Callback<void> callback = MakeCallback (&NoCount::Nothing, p);
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   336
  }
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
   337
  // 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
   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
    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
   340
    {
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
    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
   342
      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
    };
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
   344
    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
   345
  }
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   346
#endif
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
  
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
  return ok;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
}
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
PtrTest g_ptr_test;
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
}; // namespace ns3
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   356
#endif /* RUN_SELF_TESTS */