src/core/component-manager.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 02 Jan 2008 09:09:24 +0100
changeset 2230 9f13ac3291e0
parent 2197 2a729c1b2e68
child 2231 a5b898c1ee2c
permissions -rw-r--r--
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
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
   * \param iid interface id to query for
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   268
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   269
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   270
   * 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
   271
   * ClassId, call QueryInterface on it, and return the 
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   272
   * result.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   273
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
  template <typename T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   275
  static Ptr<T> Create (ClassId classId, InterfaceId iid);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   277
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   278
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   279
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   280
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   281
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   282
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   283
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   284
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   285
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   286
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
  template <typename T, typename T1>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   288
  static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   290
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   291
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   292
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   293
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   294
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   295
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   296
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   297
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   298
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   299
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   300
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  template <typename T, typename T1, typename T2>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   302
  static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   304
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   305
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   306
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   307
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   308
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   309
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   310
   * \return a pointer to the instance created.
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
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   313
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   314
   * result.
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
  template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   317
  static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   318
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   319
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   320
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   321
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   322
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   323
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   324
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   325
   * \param a4 fourth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   326
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   327
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   328
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   329
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   330
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   331
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   332
  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
   333
  static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3, T4 a4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   334
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   335
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   336
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   337
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   338
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   339
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   340
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   341
   * \param a4 fourth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   342
   * \param a5 fifth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   343
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   344
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   345
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   346
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   347
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   348
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   349
  template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
1251
7ebf9949201e fix dox warning
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   350
  static Ptr<T> Create (ClassId classId, InterfaceId iid, 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
   351
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   352
private:
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   353
  friend void RegisterCallback (ClassId classId, CallbackBase *callback, 
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   354
                                   std::vector<const InterfaceId *> supportedInterfaces);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   355
  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
   356
                        std::vector<const InterfaceId *> supportedInterfaces);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   357
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   358
  template <typename T1, typename T2,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   359
            typename T3, typename T4,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   360
            typename T5>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   361
  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
   362
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   363
  struct ClassIdEntry {
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   364
    ClassIdEntry (ClassId classId);
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   365
    ClassId m_classId;
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   366
    CallbackBase *m_callback;
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   367
    std::vector<const InterfaceId *> m_supportedInterfaces;
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   368
  };
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   369
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   370
  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
   371
  static List *GetList (void);
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
  static CallbackBase *Lookup (ClassId classId);
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
};
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   375
/**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   376
 * \brief a DefaultValue class to handle ClassIds
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   377
 *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   378
 * This class provides the necessary glue to allow
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   379
 * the Bind function and the command-line arguments
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   380
 * to control the type of an object to create.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   381
 */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   382
class ClassIdDefaultValue : public DefaultValueBase
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   383
{
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   384
public:
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   385
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   386
   * \param name the name of this default value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   387
   * \param help the help text associated to this default value
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   388
   * \param iid the interface id which all objects created
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   389
   *        through this "default value" must support.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   390
   * \param defaultValue the name of the object to create
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   391
   *        by default.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   392
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   393
  ClassIdDefaultValue (std::string name, 
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   394
                       std::string help,
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   395
                       const InterfaceId &iid,
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   396
                       std::string defaultValue);
723
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
   * \returns the ClassId of the object selected by the user.
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
  ClassId GetValue (void) const;
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 classId the new ClassId 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 (ClassId classId);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   407
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   408
   * \param name the new object selected.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   409
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   410
   * Override the currently-selected value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   411
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   412
  void SetValue (std::string name);
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   413
private:
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   414
  virtual bool DoParseValue (const std::string &value);
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   415
  virtual std::string DoGetType (void) const;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   416
  virtual std::string DoGetDefaultValue (void) const;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   417
  std::string m_defaultName;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   418
  std::string m_name;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   419
  const InterfaceId *m_interfaceId;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   420
};
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   421
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   422
} // namespace ns3 
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   424
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   425
namespace {
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
template <typename T>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   428
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
   429
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   430
  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
   431
    return ns3::CreateObject<T> ();
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   432
  }
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   433
};
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
template <typename T, typename T1>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   436
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
   437
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   438
  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
   439
    return ns3::CreateObject<T> (a1);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   440
  }
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   441
};
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
template <typename T, typename T1, typename T2>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   444
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
   445
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   446
  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
   447
    return ns3::CreateObject<T> (a1, a2);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   448
  }
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   449
};
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   450
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   451
template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   452
struct ObjectMaker<T,T1,T2,T3,ns3::empty,ns3::empty> {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   453
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   454
  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
   455
    return ns3::CreateObject<T> (a1, a2, a3);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   456
  }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   457
};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   458
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   459
template <typename T, typename T1, typename T2, typename T3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   460
          typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   461
struct ObjectMaker<T,T1,T2,T3,T4,ns3::empty> {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   462
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   463
  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
   464
    return ns3::CreateObject<T> (a1, a2, a3, a4);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   465
  }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   466
};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   467
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   468
template <typename T, typename T1, typename T2, typename T3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   469
          typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   470
struct ObjectMaker {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   471
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   472
  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
   473
    return ns3::CreateObject<T> (a1, a2, a3, a4, a5);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   474
  }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   475
};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   476
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   477
} // anonymous namespace
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   478
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   479
namespace ns3 {
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   480
  
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   481
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
   482
                       std::vector<const InterfaceId *> supportedInterfaces);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   483
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   484
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   485
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   486
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   487
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   488
void 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   489
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
   490
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   491
  std::vector<const InterfaceId *> supportedInterfaces;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   492
  for (uint32_t i = 0; i < n; i++)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   493
    {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   494
      supportedInterfaces.push_back (array[i]);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   495
    }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   496
  RegisterCallback (*this, &m_callback, supportedInterfaces);
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   499
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   500
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   501
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
   502
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   503
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   504
  const InterfaceId *array[] = {};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   505
  Register (array, sizeof (array)/sizeof(InterfaceId *));
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
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   508
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   509
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
   510
                                   const InterfaceId &iid) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   511
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   512
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   513
  const InterfaceId *array[] = {&iid};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   514
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   515
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   516
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   517
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   518
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
   519
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   520
                                   const InterfaceId iid1) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   521
  : ClassId (name) 
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   522
{
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   523
  const InterfaceId *array[] = {&iid0, &iid1};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   524
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   525
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   526
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   527
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   528
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
   529
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   530
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   531
                                   const InterfaceId &iid2)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   532
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   533
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   534
  const InterfaceId *array[] = {&iid0, &iid1, &iid2};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   535
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   536
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   537
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   538
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   539
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
   540
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   541
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   542
                                   const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   543
                                   const InterfaceId &iid3)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   544
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   545
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   546
  const InterfaceId *array[] = {&iid0, &iid1, &iid2, &iid3};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   547
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   548
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   549
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   550
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   551
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
   552
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   553
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   554
                                   const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   555
                                   const InterfaceId &iid3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   556
                                   const InterfaceId &iid4)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   557
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   558
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   559
  const InterfaceId *array[] = {&iid0, &iid1, iid2, &iid3, &iid4};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   560
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   561
}
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   562
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   563
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   564
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   565
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
   566
  MakeCallback (&MakeClassId::MakerType::MakeObject);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   567
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   568
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   569
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   570
template <typename T1, typename T2,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   571
          typename T3, typename T4,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   572
          typename T5>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   573
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
   574
ComponentManager::DoGetCallback (ClassId classId)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   575
{
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   576
  CallbackBase *callback = Lookup (classId);
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   577
  if (callback == 0)
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   578
    {
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   579
      NS_FATAL_ERROR ("Invalid Class Id.");
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   580
    }
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   581
  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
   582
  reference.Assign (*callback);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   583
  return reference;
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   584
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   585
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   586
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   587
template <typename T1>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   588
Ptr<Object>
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   589
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
   590
{
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   591
  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
   592
  return callback (a1);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   593
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   594
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   595
template <typename T1, typename T2>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   596
Ptr<Object> 
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   597
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
   598
{
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   599
  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
   600
  return callback (a1, a2);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   601
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   602
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   603
template <typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   604
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   605
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   606
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   607
  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
   608
  return callback (a1, a2, a3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   609
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   610
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   611
template <typename T1, typename T2, typename T3, typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   612
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   613
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
   614
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   615
  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
   616
  return callback (a1, a2, a3, a4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   617
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   618
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   619
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
   620
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   621
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
   622
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   623
  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
   624
  return callback (a1, a2, a3, a4, a5);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   625
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   626
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   627
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   628
template <typename T>
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   629
Ptr<T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   630
ComponentManager::Create (ClassId classId, InterfaceId iid)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   631
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   632
  Ptr<Object> obj = Create (classId);
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   633
  Ptr<T> i = obj->QueryInterface<T> (iid);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   634
  return i;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   635
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   636
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   637
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
   638
Ptr<T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   639
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   640
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   641
  Ptr<Object> obj = Create (classId, a1);
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   642
  Ptr<T> i = obj->QueryInterface<T> (iid);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   643
  return i;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   644
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   645
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   646
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
   647
Ptr<T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   648
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   649
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   650
  Ptr<Object> obj = Create (classId, a1, a2);
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   651
  Ptr<T> i = obj->QueryInterface<T> (iid);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   652
  return i;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   653
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   654
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   655
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   656
template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   657
Ptr<T>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   658
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   659
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   660
  Ptr<Object> obj = Create (classId, a1, a2, a3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   661
  Ptr<T> i = obj->QueryInterface<T> (iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   662
  return i;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   663
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   664
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   665
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
   666
Ptr<T>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   667
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3, T4 a4)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   668
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   669
  Ptr<Object> obj = Create (classId, a1, a2, a3, a4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   670
  Ptr<T> i = obj->QueryInterface<T> (iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   671
  return i;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   672
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   673
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   674
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
   675
Ptr<T>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   676
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   677
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   678
  Ptr<Object> obj = Create (classId, a1, a2, a3, a4, a5);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   679
  Ptr<T> i = obj->QueryInterface<T> (iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   680
  return i;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   681
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   682
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   683
} // namespace ns3
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   684
724
e7f2ac64583f small typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 723
diff changeset
   685
#endif /* COMPONENT_MANAGER_H */