zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Teigha(R) software pursuant to a license 
//   agreement with Open Design Alliance.
//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
 
#ifndef __TF_VARIANT_H__
#define __TF_VARIANT_H__
 
#include "RxVariant.h"
#include "Tf/TfExport.h"
#include "Tf/GeVariant.h"
#include "OdGUID.h"
 
class OdDbStub;
 
class OdTfVariant;
typedef OdArray<OdTfVariant> OdTfVariantArray;
typedef OdArray<OdTfVariant> OdTfVariantTuple;
 
/** \details
    Library: Od_Tf
    <group OdTf_Classes>
*/
class TFCORE_EXPORT OdTfVariant : public OdVariant {
public:
  static const OdVariant::TypeFactory* typeFactory(int type);
  typedef enum {
    kGUID = OdVariant::kNextType,
    kEmpty,
    kGeVariant,
    kDbStubPtr,
    kRxObjectWeakPtr,
    kTuple,
    kNextType
  } Type;
 
  static Type kVariantArray(OdUInt16, OdUInt32);
  static Type kVariantArray(OdUInt16, OdTfVariant::Type);
  static Type kVariantArray(OdUInt32);
  static Type kVariantArray(OdTfVariant::Type);
 
  static Type getItemType(OdTfVariant::Type type);
  static OdUInt16 getDimsCount(OdTfVariant::Type type);
  static OdTfVariant empty();
 
  bool isEmpty() const;
  bool isVariantArray() const;
 
  OdTfVariant();
  OdTfVariant(const OdVariant& val);
  OdTfVariant(const OdTfVariant& val);
  OdTfVariant(const OdGUID& val);
  OdTfVariant(const OdGeVariant& val);
  OdTfVariant(const OdTfVariantTuple&);
  OdTfVariant(OdTfVariant::Type type, const OdTfVariantArray& val);
  OdTfVariant(OdDbStub* const);
 
  OdTfVariant& operator =(const OdTfVariant& val);
 
  virtual ~OdTfVariant();
  const OdGUID& getGUID() const;
  const OdTfVariantArray& getVariantArray() const;
  const OdGeVariant& getGeVariant() const;
  OdDbStub* getDbStubPtr() const;
  OdRxObject* getRxObjectWeakPtr() const;
  const OdTfVariantTuple& getVariantTuple() const;
 
  OdGeVariant& asGeVariant();
  OdTfVariantArray& asVariantArray();
  OdTfVariantTuple& asVariantTuple();
 
  OdTfVariant& setGUID(const OdGUID&);
  OdTfVariant& setVariantArray(OdTfVariant::Type type, const OdTfVariantArray&);
  OdTfVariant& setVariantTuple(const OdTfVariantTuple&);
  OdTfVariant& setGeVariant(const OdGeVariant& value);
  OdTfVariant& setDbStubPtr(OdDbStub* const);
  OdTfVariant& setRxObjectWeakPtr(OdRxObject* const);
 
protected:
  void setVarType(int newType, int& type, void* data);
  void makeEmpty();
};
 
inline bool operator==(OdTfVariant::Type lhs, OdVariant::Type rhs) {
  return lhs == static_cast<OdTfVariant::Type>(rhs);
}
 
inline bool operator!=(OdTfVariant::Type lhs, OdVariant::Type rhs) {
  return !(lhs == rhs);
}
 
inline bool operator==(OdVariant::Type lhs, OdTfVariant::Type rhs) {
  return rhs == lhs;
}
 
inline bool operator!=(OdVariant::Type lhs, OdTfVariant::Type rhs) {
  return rhs != lhs;
}
 
#endif