summaryrefslogtreecommitdiff
path: root/TAO/tests/DynValue_Test/Analyzer.h
blob: c40fcf876fb51e5ed1f682714114488087f7d384 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// $Id$

#ifndef INCLUDE_ANALYZER_H
#define INCLUDE_ANALYZER_H

#include "ValueTypes_impl.h"
#include "tao/DynamicAny/DynAnyFactory.h"

//============= class DynAnyAnalyzer ============

class DynAnyAnalyzer
{
private:
  unsigned int level_;
  CORBA::ORB_var orb_;
  DynamicAny::DynAnyFactory_var dany_fact_;

public:
  DynAnyAnalyzer (int argc, ACE_TCHAR *argv[]);
  ~DynAnyAnalyzer (void) {orb_->destroy ();}

  DynamicAny::DynAny_ptr DynAny_NoTrunc (const CORBA::Any &);
  DynamicAny::DynAny_ptr DynAny (const CORBA::Any &);
  DynamicAny::DynAny_ptr DynAny (const CORBA::TypeCode_ptr &);

  void register_factory (CORBA::ValueFactoryBase_var factory);

  void analyze (
    DynamicAny::DynAny_ptr da,
    CORBA::Boolean newline = false);

private:
  /// List of base types.
  typedef ACE_Array_Base<CORBA::TypeCode_var> BaseTypesList_t;

  void tab (const char p[])
  {
    for (unsigned int i = 0u; i < level_ ; ++i)
      ACE_DEBUG ((LM_DEBUG, ".."));
    ACE_DEBUG ((LM_DEBUG, "%C", p));
  }

  void analyze_basic_seq (
    CORBA::TypeCode_ptr tc,
    DynamicAny::DynAny_ptr da);

  static void get_base_types (
    CORBA::TypeCode_ptr tc,
    BaseTypesList_t &base_types,
    CORBA::ULong *total_member_count = 0);

  /// Return the unaliased valuetype typecode that corresponds to
  /// index (0..total_members-1) from the given hiarchical list of
  /// the derived type and it basetypes.
  static CORBA::TypeCode_ptr get_correct_base_type (
    const BaseTypesList_t &base_types,
    CORBA::ULong &index);
};

#endif // INCLUDE_ANALYZER_H