src/core/component-manager.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 30 Aug 2007 13:58:15 +0200
changeset 1399 5945e92014e2
parent 1251 7ebf9949201e
child 2197 2a729c1b2e68
permissions -rw-r--r--
move printing to client code
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;
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
    66
  friend ClassId AllocateClassId (std::string name);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
  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
    68
  uint32_t m_classId;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
};
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    71
/**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    72
 * \brief a class used to create ClassIds
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
 */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    76
template <typename T, typename T1 = empty, typename T2 = empty,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    77
          typename T3 = empty, typename T4 = empty, typename T5 = empty>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    78
class MakeClassId : public ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    79
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    80
public:
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    81
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    82
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    83
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    84
   * Create a ClassId with specified name.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    85
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    86
  MakeClassId (std::string name);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    87
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    88
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    89
   * \param iid interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    90
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    91
   * Create a ClassId with specified name. Register iid
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    92
   * as a supported interface.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    93
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    94
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    95
               const InterfaceId &iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    96
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    97
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    98
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
    99
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   100
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   101
   * Create a ClassId with specified name. Register iid0 and iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   102
   * as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   103
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   104
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   105
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   106
               const InterfaceId iid1);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   107
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   108
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   109
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   110
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   111
   * \param iid2 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   112
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   113
   * Create a ClassId with specified name. Register iid0, iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   114
   * and iid2 as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   115
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   116
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   117
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   118
               const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   119
               const InterfaceId &iid2);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   120
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   121
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   122
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   123
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   124
   * \param iid2 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   125
   * \param iid3 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   126
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   127
   * Create a ClassId with specified name. Register iid0, iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   128
   * iid2, and iid3 as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   129
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   130
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   131
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   132
               const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   133
               const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   134
               const InterfaceId &iid3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   135
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   136
   * \param name name of ClassId
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   137
   * \param iid0 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   138
   * \param iid1 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   139
   * \param iid2 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   140
   * \param iid3 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   141
   * \param iid4 interface id
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   142
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   143
   * Create a ClassId with specified name. Register iid0, iid1
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   144
   * iid2, iid3, and iid4 as supported interfaces.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   145
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   146
  MakeClassId (std::string name, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   147
               const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   148
               const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   149
               const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   150
               const InterfaceId &iid3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   151
               const InterfaceId &iid4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   152
private:
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   153
  typedef ObjectMaker<T,T1,T2,T3,T4,T5> MakerType;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   154
  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
   155
  void Register (const InterfaceId *array [], uint32_t n);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   156
};
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   157
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   158
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   159
/**
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   160
 * \brief Create any Interface
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   161
 *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   162
 * 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
   163
 * 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
   164
 * 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
   165
 * 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
   166
 * the objects tracked through any of their tracked
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   167
 * constructor/ClassId.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   168
 */
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   169
class ComponentManager
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
{
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
public:
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   172
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   173
   * \param name the symbolic name to lookup
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   174
   * \returns the ClassId associated to the input name.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   175
   */
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   176
  static ClassId LookupByName (std::string name);
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   177
  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
   178
  /**
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   179
   * \param iid interface id to lookup
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   180
   * \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
   181
   *          create objects which support the requested 
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   182
   *          interface.
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   183
   *
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   184
   * 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
   185
   * 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
   186
   * 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
   187
   * the control of this class.
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   188
   */
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   189
  static std::vector<ClassId> LookupByInterfaceId (InterfaceId iid);
527
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
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   192
   * \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
   193
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   194
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   195
   * 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
   196
   * ClassId. This method invokes the default constructor.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   197
   */
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   198
  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
   199
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   200
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   201
   * \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
   202
   * \param a1 argument to pass to the constructor.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   203
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   204
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   205
   * 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
   206
   * ClassId.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   207
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
  template <typename T1>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   209
  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
   210
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   211
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   212
   * \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
   213
   * \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
   214
   * \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
   215
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   216
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   217
   * 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
   218
   * ClassId.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   219
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
  template <typename T1, typename T2>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   221
  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
   222
723
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
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   225
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   226
   * \param a1 first argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   227
   * \param a2 second argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   228
   * \param a3 third argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   229
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   230
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   231
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   232
   * ClassId.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   233
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   234
  template <typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   235
  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
   236
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   237
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   238
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   239
   * \param a1 first argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   240
   * \param a2 second argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   241
   * \param a3 third argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   242
   * \param a4 fourth argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   243
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   244
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   245
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   246
   * ClassId.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   247
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   248
  template <typename T1, typename T2, typename T3, typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   249
  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
   250
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   251
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   252
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   253
   * \param a1 first argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   254
   * \param a2 second argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   255
   * \param a3 third argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   256
   * \param a4 fourth argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   257
   * \param a5 fifth argument to pass to the constructor.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   258
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   259
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   260
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   261
   * ClassId.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   262
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   263
  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
   264
  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
   265
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   266
  /**
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   267
   * \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
   268
   * \param iid interface id to query for
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   269
   * \return a pointer to the instance created.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   270
   *
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   271
   * 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
   272
   * ClassId, call QueryInterface on it, and return the 
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   273
   * result.
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   274
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  template <typename T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   276
  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
   277
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   278
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   279
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   280
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   281
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   282
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   283
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   284
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   285
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   286
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   287
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
  template <typename T, typename T1>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   289
  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
   290
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   291
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   292
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   293
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   294
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   295
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   296
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   297
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   298
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   299
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   300
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   301
   */
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
  template <typename T, typename T1, typename T2>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   303
  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
   304
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   305
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   306
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   307
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   308
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   309
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   310
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   311
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   312
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   313
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   314
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   315
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   316
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   317
  template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   318
  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
   319
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   320
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   321
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   322
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   323
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   324
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   325
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   326
   * \param a4 fourth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   327
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   328
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   329
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   330
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   331
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   332
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   333
  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
   334
  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
   335
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   336
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   337
   * \param classId class id of the constructor to invoke.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   338
   * \param iid interface id to query for
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   339
   * \param a1 first argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   340
   * \param a2 second argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   341
   * \param a3 third argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   342
   * \param a4 fourth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   343
   * \param a5 fifth argument to pass to constructor
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   344
   * \return a pointer to the instance created.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   345
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   346
   * Create an instance of the object identified by its
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   347
   * ClassId, call QueryInterface on it, and return the 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   348
   * result.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   349
   */
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   350
  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
   351
  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
   352
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   353
private:
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   354
  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
   355
                                   std::vector<const InterfaceId *> supportedInterfaces);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   356
  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
   357
                        std::vector<const InterfaceId *> supportedInterfaces);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   358
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   359
  template <typename T1, typename T2,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   360
            typename T3, typename T4,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   361
            typename T5>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   362
  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
   363
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   364
  struct ClassIdEntry {
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   365
    ClassIdEntry (ClassId classId);
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   366
    ClassId m_classId;
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   367
    CallbackBase *m_callback;
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   368
    std::vector<const InterfaceId *> m_supportedInterfaces;
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   369
  };
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   370
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   371
  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
   372
  static List *GetList (void);
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
  static CallbackBase *Lookup (ClassId classId);
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
};
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   375
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   376
/**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   377
 * \brief a DefaultValue class to handle ClassIds
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   378
 *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   379
 * This class provides the necessary glue to allow
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   380
 * the Bind function and the command-line arguments
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   381
 * to control the type of an object to create.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   382
 */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   383
class ClassIdDefaultValue : public DefaultValueBase
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   384
{
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   385
public:
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   386
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   387
   * \param name the name of this default value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   388
   * \param help the help text associated to this default value
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   389
   * \param iid the interface id which all objects created
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   390
   *        through this "default value" must support.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   391
   * \param defaultValue the name of the object to create
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   392
   *        by default.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   393
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   394
  ClassIdDefaultValue (std::string name, 
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   395
                       std::string help,
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   396
                       const InterfaceId &iid,
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   397
                       std::string defaultValue);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   398
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   399
   * \returns the ClassId of the object selected by the user.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   400
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   401
  ClassId GetValue (void) const;
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   402
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   403
   * \param classId the new ClassId selected.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   404
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   405
   * Override the currently-selected value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   406
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   407
  void SetValue (ClassId classId);
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   408
  /**
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   409
   * \param name the new object selected.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   410
   *
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   411
   * Override the currently-selected value.
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   412
   */
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   413
  void SetValue (std::string name);
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   414
private:
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   415
  virtual bool DoParseValue (const std::string &value);
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   416
  virtual std::string DoGetType (void) const;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   417
  virtual std::string DoGetDefaultValue (void) const;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   418
  std::string m_defaultName;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   419
  std::string m_name;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   420
  const InterfaceId *m_interfaceId;
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   421
};
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   422
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   423
} // namespace ns3 
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   424
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   425
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   426
namespace {
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   427
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   428
template <typename T>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   429
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
   430
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   431
  MakeObject (void) {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 724
diff changeset
   432
    return ns3::Create<T> ();
715
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
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   436
template <typename T, typename T1>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   437
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
   438
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   439
  MakeObject (T1 a1) {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 724
diff changeset
   440
    return ns3::Create<T> (a1);
715
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
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   444
template <typename T, typename T1, typename T2>
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   445
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
   446
  static ns3::Ptr<ns3::Object> 
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   447
  MakeObject (T1 a1, T2 a2) {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 724
diff changeset
   448
    return ns3::Create<T> (a1, a2);
715
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
};
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   451
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   452
template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   453
struct ObjectMaker<T,T1,T2,T3,ns3::empty,ns3::empty> {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   454
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   455
  MakeObject (T1 a1, T2 a2, T3 a3) {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 724
diff changeset
   456
    return ns3::Create<T> (a1, a2, a3);
723
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   460
template <typename T, typename T1, typename T2, typename T3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   461
          typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   462
struct ObjectMaker<T,T1,T2,T3,T4,ns3::empty> {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   463
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   464
  MakeObject (T1 a1, T2 a2, T3 a3, T4 a4) {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 724
diff changeset
   465
    return ns3::Create<T> (a1, a2, a3, a4);
723
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   469
template <typename T, typename T1, typename T2, typename T3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   470
          typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   471
struct ObjectMaker {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   472
  static ns3::Ptr<ns3::Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   473
  MakeObject (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 724
diff changeset
   474
    return ns3::Create<T> (a1, a2, a3, a4, a5);
723
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
};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   477
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   478
} // anonymous namespace
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   479
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   480
namespace ns3 {
716
a0bc5b9df6cb add DefaultValue support for ClassId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 715
diff changeset
   481
  
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   482
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
   483
                       std::vector<const InterfaceId *> supportedInterfaces);
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   484
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   485
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   486
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   487
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   488
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   489
void 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   490
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
   491
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   492
  std::vector<const InterfaceId *> supportedInterfaces;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   493
  for (uint32_t i = 0; i < n; i++)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   494
    {
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   495
      supportedInterfaces.push_back (array[i]);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   496
    }
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   497
  RegisterCallback (*this, &m_callback, supportedInterfaces);
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   500
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   501
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   502
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
   503
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   504
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   505
  const InterfaceId *array[] = {};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   506
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   507
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   508
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   509
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   510
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
   511
                                   const InterfaceId &iid) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   512
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   513
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   514
  const InterfaceId *array[] = {&iid};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   515
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   516
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   517
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   518
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   519
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
   520
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   521
                                   const InterfaceId iid1) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   522
  : ClassId (name) 
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   523
{
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   524
  const InterfaceId *array[] = {&iid0, &iid1};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   525
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   526
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   527
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   528
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   529
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
   530
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   531
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   532
                                   const InterfaceId &iid2)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   533
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   534
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   535
  const InterfaceId *array[] = {&iid0, &iid1, &iid2};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   536
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   537
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   538
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   539
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   540
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
   541
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   542
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   543
                                   const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   544
                                   const InterfaceId &iid3)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   545
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   546
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   547
  const InterfaceId *array[] = {&iid0, &iid1, &iid2, &iid3};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   548
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   549
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   550
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   551
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   552
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
   553
                                   const InterfaceId &iid0, 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   554
                                   const InterfaceId &iid1,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   555
                                   const InterfaceId &iid2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   556
                                   const InterfaceId &iid3,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   557
                                   const InterfaceId &iid4)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   558
  : ClassId (name) 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   559
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   560
  const InterfaceId *array[] = {&iid0, &iid1, iid2, &iid3, &iid4};
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   561
  Register (array, sizeof (array)/sizeof(InterfaceId *));
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   562
}
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   563
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   564
template <typename T, typename T1, typename T2,
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   565
          typename T3, typename T4, typename T5>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   566
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
   567
  MakeCallback (&MakeClassId::MakerType::MakeObject);
715
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
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   570
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   571
template <typename T1, typename T2,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   572
          typename T3, typename T4,
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   573
          typename T5>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   574
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
   575
ComponentManager::DoGetCallback (ClassId classId)
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   576
{
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   577
  CallbackBase *callback = Lookup (classId);
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   578
  if (callback == 0)
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   579
    {
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   580
      NS_FATAL_ERROR ("Invalid Class Id.");
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   581
    }
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   582
  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
   583
  reference.Assign (*callback);
527
eda15411d38a rework and document API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 526
diff changeset
   584
  return reference;
526
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
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
template <typename T1>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   589
Ptr<Object>
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   590
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
   591
{
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   592
  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
   593
  return callback (a1);
526
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
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   596
template <typename T1, typename T2>
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   597
Ptr<Object> 
579
7e31a7f75fee rename NsUnknown to Interface and NsUnknownManager to ComponentManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 578
diff changeset
   598
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
   599
{
715
697cce7e938a a new ComponentManager API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 708
diff changeset
   600
  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
   601
  return callback (a1, a2);
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   602
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   603
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   604
template <typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   605
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   606
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3)
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   607
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   608
  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
   609
  return callback (a1, a2, a3);
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   612
template <typename T1, typename T2, typename T3, typename T4>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   613
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   614
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
   615
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   616
  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
   617
  return callback (a1, a2, a3, a4);
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   620
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
   621
Ptr<Object> 
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   622
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
   623
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   624
  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
   625
  return callback (a1, a2, a3, a4, a5);
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   628
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   629
template <typename T>
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 533
diff changeset
   630
Ptr<T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   631
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
   632
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   633
  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
   634
  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
   635
  return i;
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
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   638
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
   639
Ptr<T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   640
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
   641
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   642
  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
   643
  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
   644
  return i;
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
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   647
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
   648
Ptr<T>
580
80f53b488bd3 rename Iid to InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 579
diff changeset
   649
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
   650
{
708
e8cac905d541 port ComponentManager to Object from Interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 591
diff changeset
   651
  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
   652
  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
   653
  return i;
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   654
}
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   655
723
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   656
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   657
template <typename T, typename T1, typename T2, typename T3>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   658
Ptr<T>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   659
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
   660
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   661
  Ptr<Object> obj = Create (classId, a1, a2, a3);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   662
  Ptr<T> i = obj->QueryInterface<T> (iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   663
  return i;
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   666
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
   667
Ptr<T>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   668
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
   669
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   670
  Ptr<Object> obj = Create (classId, a1, a2, a3, a4);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   671
  Ptr<T> i = obj->QueryInterface<T> (iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   672
  return i;
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
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   675
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
   676
Ptr<T>
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   677
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
   678
{
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   679
  Ptr<Object> obj = Create (classId, a1, a2, a3, a4, a5);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   680
  Ptr<T> i = obj->QueryInterface<T> (iid);
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   681
  return i;
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   682
}
7a987d867ff2 improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 722
diff changeset
   683
526
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   684
} // namespace ns3
01999879c76b a first draft of a component manager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   685
724
e7f2ac64583f small typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 723
diff changeset
   686
#endif /* COMPONENT_MANAGER_H */