src/core/component-manager.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 02 Jan 2008 09:25:31 +0100
changeset 2231 a5b898c1ee2c
parent 2230 9f13ac3291e0
child 2232 9abd038ee588
permissions -rw-r--r--
fix bug 122: get rid of duplicate argument to QueryInterface
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2007 INRIA
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
724
e7f2ac64583f small typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 723
diff changeset
    21
#ifndef COMPONENT_MANAGER_H
e7f2ac64583f small typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 723
diff changeset
    22
#define COMPONENT_MANAGER_H
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include <string>
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include <vector>
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include <stdint.h>
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#include "callback.h"
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
    28
#include "object.h"
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    29
#include "fatal-error.h"
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
    30
#include "ptr.h"
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
    31
#include "empty.h"
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
    32
#include "default-value.h"
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    34
namespace {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    35
  // anonymous namespace for implementation code.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    36
template <typename T, typename T1 = ns3::empty, typename T2 = ns3::empty,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    37
          typename T3 = ns3::empty, typename T4 = ns3::empty, typename T5 = ns3::empty>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    38
struct ObjectMaker;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    39
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    40
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
namespace ns3 {
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    43
/**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    44
 * \brief Unique Identifier for class constructors.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    45
 *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    46
 * Instances of this type must be allocated through
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    47
 * the ns3::MakeClassId class.
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    48
 */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
class ClassId
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
{
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
public:
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    52
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    53
   * \returns the symbolic name associated to this class id
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    54
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    55
   * This name is the name which was associated to this class id
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    56
   * by the ns3::Ns3UnknownManager::RegisterConstructor methods.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    57
   * This name is also the name which is expected to be input
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    58
   * to ns3::UnknownManager::LookupByName.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    59
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
    60
  std::string GetName (void) const;
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
    61
protected:
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
    62
  ClassId (std::string name);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    63
private:
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
    64
  ClassId (uint32_t classId);
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
    65
  friend class ComponentManager;
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
  friend bool operator == (const ClassId &a, const ClassId &b);
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
  uint32_t m_classId;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
};
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    70
/**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    71
 * \brief a class used to create ClassIds
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    72
 *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    73
 * 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    74
 */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    75
template <typename T, typename T1 = empty, typename T2 = empty,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    76
          typename T3 = empty, typename T4 = empty, typename T5 = empty>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    77
class MakeClassId : public ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    78
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    79
public:
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    80
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    81
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    82
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    83
   * Create a ClassId with specified name.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    84
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    85
  MakeClassId (std::string name);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    86
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    87
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    88
   * \param iid interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    89
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    90
   * Create a ClassId with specified name. Register iid
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    91
   * as a supported interface.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    92
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    93
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    94
               const InterfaceId &iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    95
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    96
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    97
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    98
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    99
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   100
   * Create a ClassId with specified name. Register iid0 and iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   101
   * as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   102
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   103
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   104
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   105
               const InterfaceId iid1);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   106
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   107
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   108
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   109
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   110
   * \param iid2 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   111
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   112
   * Create a ClassId with specified name. Register iid0, iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   113
   * and iid2 as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   114
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   115
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   116
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   117
               const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   118
               const InterfaceId &iid2);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   119
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   120
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   121
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   122
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   123
   * \param iid2 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   124
   * \param iid3 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   125
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   126
   * Create a ClassId with specified name. Register iid0, iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   127
   * iid2, and iid3 as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   128
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   129
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   130
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   131
               const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   132
               const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   133
               const InterfaceId &iid3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   134
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   135
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   136
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   137
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   138
   * \param iid2 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   139
   * \param iid3 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   140
   * \param iid4 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   141
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   142
   * Create a ClassId with specified name. Register iid0, iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   143
   * iid2, iid3, and iid4 as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   144
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   145
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   146
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   147
               const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   148
               const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   149
               const InterfaceId &iid3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   150
               const InterfaceId &iid4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   151
private:
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   152
  typedef ObjectMaker<T,T1,T2,T3,T4,T5> MakerType;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   153
  static Callback<Ptr<Object>,T1,T2,T3,T4,T5> m_callback;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   154
  void Register (const InterfaceId *array [], uint32_t n);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   155
};
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   156
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   157
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   158
/**
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   159
 * \brief Create any Interface
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   160
 *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   161
 * This class keeps track of a set of ClassId, each
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   162
 * of which uniquely identifies the constructor of an
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   163
 * object which derives from the Interface base class.
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   164
 * This class can also create an instance of any of
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   165
 * the objects tracked through any of their tracked
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   166
 * constructor/ClassId.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   167
 */
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   168
class ComponentManager
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
{
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
public:
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   171
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   172
   * \param name the symbolic name to lookup
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   173
   * \returns the ClassId associated to the input name.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   174
   */
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   175
  static ClassId LookupByName (std::string name);
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   176
  static ClassId LookupByName (std::string name, bool *ok);
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   177
  /**
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   178
   * \param iid interface id to lookup
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   179
   * \returns the list of ClassId which can be used to
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   180
   *          create objects which support the requested 
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   181
   *          interface.
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   182
   *
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   183
   * Note that this method will not necessarily return the
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   184
   * complete list of objects which support a given interface
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   185
   * since dynamic aggregation of objects is not under
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   186
   * the control of this class.
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   187
   */
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   188
  static std::vector<ClassId> LookupByInterfaceId (InterfaceId iid);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   189
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   190
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   191
   * \param classId class id of the constructor to invoke.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   192
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   193
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   194
   * Create an instance of the object identified by its
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   195
   * ClassId. This method invokes the default constructor.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   196
   */
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   197
  static Ptr<Object> Create (ClassId classId);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   198
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   199
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   200
   * \param classId class id of the constructor to invoke.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   201
   * \param a1 argument to pass to the constructor.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   202
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   203
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   204
   * Create an instance of the object identified by its
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   205
   * ClassId.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   206
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
  template <typename T1>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   208
  static Ptr<Object> Create (ClassId classId, T1 a1);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   210
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   211
   * \param classId class id of the constructor to invoke.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   212
   * \param a1 first argument to pass to the constructor.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   213
   * \param a2 second argument to pass to the constructor.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   214
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   215
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   216
   * Create an instance of the object identified by its
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   217
   * ClassId.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   218
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
  template <typename T1, typename T2>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   220
  static Ptr<Object> Create (ClassId classId, T1 a1, T2 a2);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   222
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   223
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   224
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   225
   * \param a1 first argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   226
   * \param a2 second argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   227
   * \param a3 third argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   228
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   229
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   230
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   231
   * ClassId.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   232
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   233
  template <typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   234
  static Ptr<Object> Create (ClassId classId, T1 a1, T2 a2, T3 a3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   235
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   236
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   237
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   238
   * \param a1 first argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   239
   * \param a2 second argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   240
   * \param a3 third argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   241
   * \param a4 fourth argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   242
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   243
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   244
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   245
   * ClassId.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   246
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   247
  template <typename T1, typename T2, typename T3, typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   248
  static Ptr<Object> Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   249
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   250
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   251
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   252
   * \param a1 first argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   253
   * \param a2 second argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   254
   * \param a3 third argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   255
   * \param a4 fourth argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   256
   * \param a5 fifth argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   257
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   258
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   259
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   260
   * ClassId.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   261
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   262
  template <typename T1, typename T2, typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   263
  static Ptr<Object> Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   264
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   265
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   266
   * \param classId class id of the constructor to invoke.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   267
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   268
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   269
   * Create an instance of the object identified by its
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   270
   * ClassId, call QueryInterface on it, and return the 
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   271
   * result.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   272
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
  template <typename T>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   274
  static Ptr<T> Create (ClassId classId);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   276
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   277
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   278
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   279
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   280
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   281
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   282
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   283
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   284
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
  template <typename T, typename T1>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   286
  static Ptr<T> Create (ClassId classId, T1 a1);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   288
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   289
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   290
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   291
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   292
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   293
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   294
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   295
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   296
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   297
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
  template <typename T, typename T1, typename T2>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   299
  static Ptr<T> Create (ClassId classId, T1 a1, T2 a2);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   301
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   302
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   303
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   304
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   305
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   306
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   307
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   308
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   309
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   310
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   311
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   312
  template <typename T, typename T1, typename T2, typename T3>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   313
  static Ptr<T> Create (ClassId classId, T1 a1, T2 a2, T3 a3);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   314
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   315
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   316
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   317
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   318
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   319
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   320
   * \param a4 fourth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   321
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   322
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   323
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   324
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   325
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   326
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   327
  template <typename T, typename T1, typename T2, typename T3, typename T4>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   328
  static Ptr<T> Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   329
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   330
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   331
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   332
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   333
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   334
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   335
   * \param a4 fourth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   336
   * \param a5 fifth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   337
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   338
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   339
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   340
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   341
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   342
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   343
  template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   344
  static Ptr<T> Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   345
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   346
private:
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   347
  friend void RegisterCallback (ClassId classId, CallbackBase *callback, 
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   348
                                std::vector<const InterfaceId *> supportedInterfaces);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   349
  static void Register (ClassId classId, CallbackBase *callback, 
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   350
                        std::vector<const InterfaceId *> supportedInterfaces);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   351
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   352
  template <typename T1, typename T2,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   353
            typename T3, typename T4,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   354
            typename T5>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   355
  static Callback<Ptr<Object>,T1,T2,T3,T4,T5> DoGetCallback (ClassId classId);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   356
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   357
  struct ClassIdEntry {
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   358
    ClassIdEntry (ClassId classId);
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   359
    ClassId m_classId;
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   360
    CallbackBase *m_callback;
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   361
    std::vector<const InterfaceId *> m_supportedInterfaces;
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   362
  };
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   363
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   364
  typedef std::vector<struct ClassIdEntry> List;
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   365
  static List *GetList (void);
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
  static CallbackBase *Lookup (ClassId classId);
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   367
};
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   368
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   369
/**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   370
 * \brief a DefaultValue class to handle ClassIds
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   371
 *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   372
 * This class provides the necessary glue to allow
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   373
 * the Bind function and the command-line arguments
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   374
 * to control the type of an object to create.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   375
 */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   376
class ClassIdDefaultValue : public DefaultValueBase
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   377
{
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   378
public:
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   379
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   380
   * \param name the name of this default value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   381
   * \param help the help text associated to this default value
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   382
   * \param iid the interface id which all objects created
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   383
   *        through this "default value" must support.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   384
   * \param defaultValue the name of the object to create
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   385
   *        by default.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   386
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   387
  ClassIdDefaultValue (std::string name, 
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   388
                       std::string help,
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   389
                       const InterfaceId &iid,
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   390
                       std::string defaultValue);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   391
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   392
   * \returns the ClassId of the object selected by the user.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   393
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   394
  ClassId GetValue (void) const;
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   395
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   396
   * \param classId the new ClassId selected.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   397
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   398
   * Override the currently-selected value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   399
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   400
  void SetValue (ClassId classId);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   401
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   402
   * \param name the new object selected.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   403
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   404
   * Override the currently-selected value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   405
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   406
  void SetValue (std::string name);
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   407
private:
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   408
  virtual bool DoParseValue (const std::string &value);
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   409
  virtual std::string DoGetType (void) const;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   410
  virtual std::string DoGetDefaultValue (void) const;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   411
  std::string m_defaultName;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   412
  std::string m_name;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   413
  const InterfaceId *m_interfaceId;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   414
};
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   415
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   416
} // namespace ns3 
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   417
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   418
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   419
namespace {
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   420
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   421
template <typename T>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   422
struct ObjectMaker<T,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> {
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   423
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   424
  MakeObject (void) {
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2197
diff changeset
   425
    return ns3::CreateObject<T> ();
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   426
  }
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   427
};
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   428
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   429
template <typename T, typename T1>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   430
struct ObjectMaker<T,T1,ns3::empty,ns3::empty,ns3::empty,ns3::empty> {
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   431
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   432
  MakeObject (T1 a1) {
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2197
diff changeset
   433
    return ns3::CreateObject<T> (a1);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   434
  }
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   435
};
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   436
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   437
template <typename T, typename T1, typename T2>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   438
struct ObjectMaker<T,T1,T2,ns3::empty,ns3::empty,ns3::empty> {
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   439
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   440
  MakeObject (T1 a1, T2 a2) {
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2197
diff changeset
   441
    return ns3::CreateObject<T> (a1, a2);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   442
  }
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   443
};
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   444
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   445
template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   446
struct ObjectMaker<T,T1,T2,T3,ns3::empty,ns3::empty> {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   447
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   448
  MakeObject (T1 a1, T2 a2, T3 a3) {
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2197
diff changeset
   449
    return ns3::CreateObject<T> (a1, a2, a3);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   450
  }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   451
};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   452
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   453
template <typename T, typename T1, typename T2, typename T3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   454
          typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   455
struct ObjectMaker<T,T1,T2,T3,T4,ns3::empty> {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   456
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   457
  MakeObject (T1 a1, T2 a2, T3 a3, T4 a4) {
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2197
diff changeset
   458
    return ns3::CreateObject<T> (a1, a2, a3, a4);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   459
  }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   460
};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   461
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   462
template <typename T, typename T1, typename T2, typename T3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   463
          typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   464
struct ObjectMaker {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   465
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   466
  MakeObject (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) {
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2197
diff changeset
   467
    return ns3::CreateObject<T> (a1, a2, a3, a4, a5);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   468
  }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   469
};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   470
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   471
} // anonymous namespace
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   472
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   473
namespace ns3 {
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   474
  
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   475
void RegisterCallback (ClassId classId, ns3::CallbackBase *callback, 
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   476
                       std::vector<const InterfaceId *> supportedInterfaces);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   477
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   478
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   479
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   480
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   481
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   482
void 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   483
MakeClassId<T,T1,T2,T3,T4,T5>::Register (const InterfaceId *array [], uint32_t n) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   484
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   485
  std::vector<const InterfaceId *> supportedInterfaces;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   486
  for (uint32_t i = 0; i < n; i++)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   487
    {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   488
      supportedInterfaces.push_back (array[i]);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   489
    }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   490
  RegisterCallback (*this, &m_callback, supportedInterfaces);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   491
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   492
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   493
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   494
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   495
MakeClassId<T,T1,T2,T3,T4,T5>::MakeClassId (std::string name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   496
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   497
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   498
  const InterfaceId *array[] = {};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   499
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   500
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   501
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   502
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   503
MakeClassId<T,T1,T2,T3,T4,T5>::MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   504
                                   const InterfaceId &iid) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   505
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   506
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   507
  const InterfaceId *array[] = {&iid};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   508
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   509
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   510
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   511
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   512
MakeClassId<T,T1,T2,T3,T4,T5>::MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   513
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   514
                                   const InterfaceId iid1) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   515
  : ClassId (name) 
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   516
{
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   517
  const InterfaceId *array[] = {&iid0, &iid1};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   518
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   519
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   520
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   521
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   522
MakeClassId<T,T1,T2,T3,T4,T5>::MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   523
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   524
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   525
                                   const InterfaceId &iid2)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   526
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   527
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   528
  const InterfaceId *array[] = {&iid0, &iid1, &iid2};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   529
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   530
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   531
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   532
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   533
MakeClassId<T,T1,T2,T3,T4,T5>::MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   534
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   535
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   536
                                   const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   537
                                   const InterfaceId &iid3)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   538
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   539
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   540
  const InterfaceId *array[] = {&iid0, &iid1, &iid2, &iid3};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   541
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   542
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   543
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   544
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   545
MakeClassId<T,T1,T2,T3,T4,T5>::MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   546
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   547
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   548
                                   const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   549
                                   const InterfaceId &iid3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   550
                                   const InterfaceId &iid4)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   551
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   552
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   553
  const InterfaceId *array[] = {&iid0, &iid1, iid2, &iid3, &iid4};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   554
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   555
}
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   556
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   557
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   558
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   559
Callback<Ptr<Object>,T1,T2,T3,T4,T5> MakeClassId<T,T1,T2,T3,T4,T5>::m_callback = 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   560
  MakeCallback (&MakeClassId::MakerType::MakeObject);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   561
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   562
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   563
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   564
template <typename T1, typename T2,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   565
          typename T3, typename T4,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   566
          typename T5>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   567
Callback<Ptr<Object>,T1,T2,T3,T4,T5>
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   568
ComponentManager::DoGetCallback (ClassId classId)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
{
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   570
  CallbackBase *callback = Lookup (classId);
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   571
  if (callback == 0)
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   572
    {
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   573
      NS_FATAL_ERROR ("Invalid Class Id.");
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   574
    }
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   575
  Callback<Ptr<Object>,T1,T2,T3,T4,T5> reference;
530
dddef0a43ca9 use Callback::Assign
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 527
diff changeset
   576
  reference.Assign (*callback);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   577
  return reference;
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   578
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   579
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   580
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   581
template <typename T1>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   582
Ptr<Object>
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   583
ComponentManager::Create (ClassId classId, T1 a1)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   584
{
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   585
  Callback<Ptr<Object>,T1> callback = DoGetCallback<T1,empty,empty,empty,empty> (classId);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   586
  return callback (a1);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   587
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   589
template <typename T1, typename T2>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   590
Ptr<Object> 
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   591
ComponentManager::Create (ClassId classId, T1 a1, T2 a2)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   592
{
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   593
  Callback<Ptr<Object>,T1,T2> callback = DoGetCallback<T1,T2,empty,empty,empty> (classId);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   594
  return callback (a1, a2);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   595
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   596
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   597
template <typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   598
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   599
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   600
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   601
  Callback<Ptr<Object>,T1,T2,T3> callback = DoGetCallback<T1,T2,T3,empty,empty> (classId);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   602
  return callback (a1, a2, a3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   603
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   604
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   605
template <typename T1, typename T2, typename T3, typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   606
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   607
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   608
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   609
  Callback<Ptr<Object>,T1,T2,T3,T4> callback = DoGetCallback<T1,T2,T3,T4,empty> (classId);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   610
  return callback (a1, a2, a3, a4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   611
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   612
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   613
template <typename T1, typename T2, typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   614
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   615
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   616
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   617
  Callback<Ptr<Object>,T1,T2,T3,T4,T5> callback = DoGetCallback<T1,T2,T3,T4,T5> (classId);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   618
  return callback (a1, a2, a3, a4, a5);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   619
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   620
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   621
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   622
template <typename T>
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   623
Ptr<T>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   624
ComponentManager::Create (ClassId classId)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   625
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   626
  Ptr<Object> obj = Create (classId);
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   627
  Ptr<T> i = obj->QueryInterface<T> ();
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   628
  return i;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   629
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   630
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   631
template <typename T, typename T1>
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   632
Ptr<T>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   633
ComponentManager::Create (ClassId classId, T1 a1)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   634
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   635
  Ptr<Object> obj = Create (classId, a1);
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   636
  Ptr<T> i = obj->QueryInterface<T> ();
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   637
  return i;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   638
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   639
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   640
template <typename T, typename T1, typename T2>
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   641
Ptr<T>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   642
ComponentManager::Create (ClassId classId, T1 a1, T2 a2)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   643
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   644
  Ptr<Object> obj = Create (classId, a1, a2);
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   645
  Ptr<T> i = obj->QueryInterface<T> ();
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   646
  return i;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   647
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   648
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   649
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   650
template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   651
Ptr<T>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   652
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3)
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   653
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   654
  Ptr<Object> obj = Create (classId, a1, a2, a3);
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   655
  Ptr<T> i = obj->QueryInterface<T> ();
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   656
  return i;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   657
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   658
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   659
template <typename T, typename T1, typename T2, typename T3, typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   660
Ptr<T>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   661
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4)
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   662
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   663
  Ptr<Object> obj = Create (classId, a1, a2, a3, a4);
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   664
  Ptr<T> i = obj->QueryInterface<T> ();
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   665
  return i;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   666
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   667
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   668
template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   669
Ptr<T>
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   670
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   671
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   672
  Ptr<Object> obj = Create (classId, a1, a2, a3, a4, a5);
2231
a5b898c1ee2c fix bug 122: get rid of duplicate argument to QueryInterface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2230
diff changeset
   673
  Ptr<T> i = obj->QueryInterface<T> ();
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   674
  return i;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   675
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   676
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   677
} // namespace ns3
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   678
724
e7f2ac64583f small typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 723
diff changeset
   679
#endif /* COMPONENT_MANAGER_H */