00001 // Filename: cppTypeProxy.h 00002 // Created by: drose (07Dec99) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved 00008 // 00009 // All use of this software is subject to the terms of the Panda 3d 00010 // Software license. You should have received a copy of this license 00011 // along with this source code; you will also find a current copy of 00012 // the license at http://www.panda3d.org/license.txt . 00013 // 00014 // To contact the maintainers of this program write to 00015 // panda3d@yahoogroups.com . 00016 // 00017 //////////////////////////////////////////////////////////////////// 00018 00019 #ifndef CPPTYPEPROXY_H 00020 #define CPPTYPEPROXY_H 00021 00022 #include <dtoolbase.h> 00023 00024 #include "cppType.h" 00025 00026 00027 /////////////////////////////////////////////////////////////////// 00028 // Class : CPPTypeProxy 00029 // Description : This is a special kind of type that is a placeholder 00030 // for some type, currently unknown, that will be filled 00031 // in later. It's used when a type that references 00032 // itself must instantiate. 00033 //////////////////////////////////////////////////////////////////// 00034 class CPPTypeProxy : public CPPType { 00035 public: 00036 CPPTypeProxy(); 00037 00038 virtual CPPType *resolve_type(CPPScope *current_scope, 00039 CPPScope *global_scope); 00040 00041 virtual bool is_tbd() const; 00042 00043 bool has_typedef_name() const; 00044 string get_typedef_name(CPPScope *scope = NULL) const; 00045 00046 virtual string get_simple_name() const; 00047 virtual string get_local_name(CPPScope *scope = NULL) const; 00048 virtual string get_fully_scoped_name() const; 00049 virtual string get_preferred_name() const; 00050 00051 virtual bool is_incomplete() const; 00052 00053 virtual void output_instance(ostream &out, int indent_level, 00054 CPPScope *scope, 00055 bool complete, const string &prename, 00056 const string &name) const; 00057 virtual void output(ostream &out, int indent_level, CPPScope *scope, 00058 bool complete) const; 00059 00060 virtual SubType get_subtype() const; 00061 00062 virtual CPPType *as_type(); 00063 virtual CPPSimpleType *as_simple_type(); 00064 virtual CPPPointerType *as_pointer_type(); 00065 virtual CPPReferenceType *as_reference_type(); 00066 virtual CPPArrayType *as_array_type(); 00067 virtual CPPConstType *as_const_type(); 00068 virtual CPPFunctionType *as_function_type(); 00069 virtual CPPExtensionType *as_extension_type(); 00070 virtual CPPStructType *as_struct_type(); 00071 virtual CPPEnumType *as_enum_type(); 00072 virtual CPPTBDType *as_tbd_type(); 00073 virtual CPPTypeProxy *as_type_proxy(); 00074 00075 CPPType *_actual_type; 00076 }; 00077 00078 #endif