Mercurial > hg > octave-lyh
comparison libinterp/octave-value/ov-classdef.h @ 15986:14aa0b5a980c classdef
Abstract the meta-protocol layer to use it for other meta objects.
* libinterp/octave-value/ov-classdef.h (class cdef_meta_object_rep,
class cdef_meta_object): New classes.
(cdef_object_rep::is_class, cdef_object_rep::is_method,
cdef_object_rep::is_property, cdef_object_rep::is_package): Moved to
cdef_meta_object_rep.
(cdef_object::is_class, cdef_object::is_method, cdef_object::is_property,
cdef_object::is_package): Moved to cdef_meta_object.
(cdef_object_rep::is_handle_object, cdef_object_rep::is_value_object,
cdef_object_rep::is_meta_object): New virtual methods.
(cdef_object::is_handle_object, cdef_object::is_value_object,
cdef_object::is_meta_object): New methods.
(handle_cdef_object::is_handle_object): New method.
(value_cdef_object::is_value_object): Likewise.
(class cdef_class, class cdef_property, class_cdef_method,
class cdef_package): Inherit from cdef_meta_object.
(class cdef_class::cdef_class_rep, class cdef_property::cdef_property_rep,
class cdef_method::cdef_method_rep, class cdef_package::cdef_package_rep):
Inherit from cdef_meta_object_rep.
(cdef_class::cdef_class_rep::meta_subsref): Renamed from subsref_meta.
(cdef_class::cdef_class_rep::meta_release,
cdef_class::cdef_class_rep::meta_is_postfix_index_handled): New method, moved
from octave_classdef_proxy.
(cdef_class::operator=(const cdef_object&)): Remove method.
(cdef_class::subsref_meta): Remove method, replaced by
cdef_meta_object::meta_subsref.
(cdef_method::cdef_method(const cdef_method&)): Fix signature of copy
constructor, was using "const cdef_property&".
(cdef_package::cdef_package(const cdef_package&)): Add copy constructor.
* libinterp/octave-value/ov-classdef.cc (class octave_classdef_meta): Renamed
from octave_classdef_proxy.
(octave_classdef_meta::meta_subsref): Method renamed from subsref_meta.
(octave_classdef_meta::meta_subsref, octave_classdef_meta::octave_classdef_meta,
octave_classdef_meta::is_postfix_index_handled): Forward calls to
cdef_meta_object.
(cdef_class::cdef_class_rep::meta_subsref): Renamed from subsref_meta.
(cdef_class::cdef_class_rep::meta_release): New method.
(cdef_class::get_method_function): Use renamed class octave_classdef_meta.
(cdef_class::cdef_class_rep::cdef_class_rep): Inherit from cdef_meta_object_rep.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Mon, 28 Jan 2013 21:56:01 -0500 |
parents | cdeb6eb656be |
children | 10142aad4b9f |
comparison
equal
deleted
inserted
replaced
15968:cdeb6eb656be | 15986:14aa0b5a980c |
---|---|
81 return new cdef_object_rep (); | 81 return new cdef_object_rep (); |
82 } | 82 } |
83 | 83 |
84 virtual bool is_array (void) const { return false; } | 84 virtual bool is_array (void) const { return false; } |
85 | 85 |
86 virtual bool is_class (void) const { return false; } | 86 virtual bool is_value_object (void) const { return false; } |
87 | 87 |
88 virtual bool is_property (void) const { return false; } | 88 virtual bool is_handle_object (void) const { return false; } |
89 | 89 |
90 virtual bool is_method (void) const { return false; } | 90 virtual bool is_meta_object (void) const { return false; } |
91 | |
92 virtual bool is_package (void) const { return false; } | |
93 | 91 |
94 virtual Array<cdef_object> array_value (void) const | 92 virtual Array<cdef_object> array_value (void) const |
95 { | 93 { |
96 gripe_invalid_object ("array_value"); | 94 gripe_invalid_object ("array_value"); |
97 return Array<cdef_object> (); | 95 return Array<cdef_object> (); |
238 cdef_object copy (void) const | 236 cdef_object copy (void) const |
239 { return cdef_object (rep->copy ()); } | 237 { return cdef_object (rep->copy ()); } |
240 | 238 |
241 bool is_array (void) const { return rep->is_array (); } | 239 bool is_array (void) const { return rep->is_array (); } |
242 | 240 |
243 bool is_class (void) const { return rep->is_class (); } | 241 bool is_value_object (void) const { return rep->is_value_object (); } |
244 | 242 |
245 bool is_property (void) const { return rep->is_property (); } | 243 bool is_handle_object (void) const { return rep->is_handle_object (); } |
246 | 244 |
247 bool is_method (void) const { return rep->is_method (); } | 245 bool is_meta_object (void) const { return rep->is_meta_object (); } |
248 | |
249 bool is_package (void) const { return rep->is_package (); } | |
250 | 246 |
251 Array<cdef_object> array_value (void) const { return rep->array_value (); } | 247 Array<cdef_object> array_value (void) const { return rep->array_value (); } |
252 | 248 |
253 void put (const std::string& pname, const octave_value& val) | 249 void put (const std::string& pname, const octave_value& val) |
254 { rep->put (pname, val); } | 250 { rep->put (pname, val); } |
471 cdef_object_rep* copy (void) const | 467 cdef_object_rep* copy (void) const |
472 { return new handle_cdef_object (*this); } | 468 { return new handle_cdef_object (*this); } |
473 | 469 |
474 bool is_valid (void) const { return true; } | 470 bool is_valid (void) const { return true; } |
475 | 471 |
472 bool is_handle_object (void) const { return true; } | |
473 | |
476 protected: | 474 protected: |
477 // Restricted copying! | 475 // Restricted copying! |
478 handle_cdef_object (const handle_cdef_object& obj) | 476 handle_cdef_object (const handle_cdef_object& obj) |
479 : cdef_object_scalar (obj) { } | 477 : cdef_object_scalar (obj) { } |
480 | 478 |
497 | 495 |
498 cdef_object_rep* copy (void) const { return clone (); } | 496 cdef_object_rep* copy (void) const { return clone (); } |
499 | 497 |
500 bool is_valid (void) const { return true; } | 498 bool is_valid (void) const { return true; } |
501 | 499 |
500 bool is_value_object (void) const { return true; } | |
501 | |
502 private: | 502 private: |
503 // Private copying! | 503 // Private copying! |
504 value_cdef_object (const value_cdef_object& obj) | 504 value_cdef_object (const value_cdef_object& obj) |
505 : cdef_object_scalar (obj) { } | 505 : cdef_object_scalar (obj) { } |
506 | 506 |
507 // No assignment! | 507 // No assignment! |
508 value_cdef_object& operator = (const value_cdef_object&); | 508 value_cdef_object& operator = (const value_cdef_object&); |
509 }; | 509 }; |
510 | 510 |
511 class | 511 class |
512 cdef_class : public cdef_object | 512 cdef_meta_object_rep : public handle_cdef_object |
513 { | |
514 public: | |
515 cdef_meta_object_rep (void) | |
516 : handle_cdef_object () { } | |
517 | |
518 ~cdef_meta_object_rep (void) { } | |
519 | |
520 cdef_object_rep* copy (void) const | |
521 { return new cdef_meta_object_rep (*this); } | |
522 | |
523 bool is_meta_object (void) const { return true; } | |
524 | |
525 virtual bool is_class (void) const { return false; } | |
526 | |
527 virtual bool is_property (void) const { return false; } | |
528 | |
529 virtual bool is_method (void) const { return false; } | |
530 | |
531 virtual bool is_package (void) const { return false; } | |
532 | |
533 virtual octave_value_list | |
534 meta_subsref (const std::string& /* type */, | |
535 const std::list<octave_value_list>& /* idx */, | |
536 int /* nargout */) | |
537 { | |
538 ::error ("subsref: invalid meta object"); | |
539 return octave_value_list (); | |
540 } | |
541 | |
542 virtual void meta_release (void) { } | |
543 | |
544 virtual bool meta_is_postfix_index_handled (char /* type */) const | |
545 { return false; } | |
546 | |
547 protected: | |
548 // Restricted copying! | |
549 cdef_meta_object_rep (const cdef_meta_object_rep& obj) | |
550 : handle_cdef_object (obj) { } | |
551 | |
552 private: | |
553 // No assignment! | |
554 cdef_meta_object_rep& operator = (const cdef_meta_object_rep&); | |
555 }; | |
556 | |
557 class | |
558 cdef_meta_object : public cdef_object | |
559 { | |
560 public: | |
561 cdef_meta_object (void) | |
562 : cdef_object () { } | |
563 | |
564 cdef_meta_object (const cdef_meta_object& obj) | |
565 : cdef_object (obj) { } | |
566 | |
567 cdef_meta_object (cdef_meta_object_rep *r) | |
568 : cdef_object (r) { } | |
569 | |
570 // Object consistency is checked in sub-classes. | |
571 cdef_meta_object (const cdef_object& obj) | |
572 : cdef_object (obj) { } | |
573 | |
574 ~cdef_meta_object (void) { } | |
575 | |
576 bool is_class (void) const { return get_rep ()->is_class (); } | |
577 | |
578 bool is_property (void) const { return get_rep ()->is_property (); } | |
579 | |
580 bool is_method (void) const { return get_rep ()->is_method (); } | |
581 | |
582 bool is_package (void) const { return get_rep ()->is_package (); } | |
583 | |
584 octave_value_list | |
585 meta_subsref (const std::string& type, | |
586 const std::list<octave_value_list>& idx, int nargout) | |
587 { return get_rep ()->meta_subsref (type, idx, nargout); } | |
588 | |
589 void meta_release (void) { get_rep ()->meta_release (); } | |
590 | |
591 bool meta_is_postfix_index_handled (char type) const | |
592 { return get_rep ()->meta_is_postfix_index_handled (type); } | |
593 | |
594 private: | |
595 cdef_meta_object_rep* get_rep (void) | |
596 { return dynamic_cast<cdef_meta_object_rep *> (cdef_object::get_rep ()); } | |
597 | |
598 const cdef_meta_object_rep* get_rep (void) const | |
599 { return dynamic_cast<const cdef_meta_object_rep *> (cdef_object::get_rep ()); } | |
600 }; | |
601 | |
602 class | |
603 cdef_class : public cdef_meta_object | |
513 { | 604 { |
514 private: | 605 private: |
515 | 606 |
516 class | 607 class |
517 cdef_class_rep : public handle_cdef_object | 608 cdef_class_rep : public cdef_meta_object_rep |
518 { | 609 { |
519 public: | 610 public: |
520 cdef_class_rep (void) | 611 cdef_class_rep (void) |
521 : handle_cdef_object (), member_count (0), handle_class (false), | 612 : cdef_meta_object_rep (), member_count (0), handle_class (false), |
522 object_count (0), meta (false) { } | 613 object_count (0), meta (false) { } |
523 | 614 |
524 cdef_class_rep (const std::list<cdef_class>& superclasses); | 615 cdef_class_rep (const std::list<cdef_class>& superclasses); |
525 | 616 |
526 cdef_object_rep* copy (void) const { return new cdef_class_rep (*this); } | 617 cdef_object_rep* copy (void) const { return new cdef_class_rep (*this); } |
555 std::string get_directory (void) const { return directory; } | 646 std::string get_directory (void) const { return directory; } |
556 | 647 |
557 void delete_object (cdef_object obj); | 648 void delete_object (cdef_object obj); |
558 | 649 |
559 octave_value_list | 650 octave_value_list |
560 subsref_meta (const std::string& type, | 651 meta_subsref (const std::string& type, |
561 const std::list<octave_value_list>& idx, int nargout); | 652 const std::list<octave_value_list>& idx, int nargout); |
653 | |
654 void meta_release (void); | |
655 | |
656 bool meta_is_postfix_index_handled (char type) const | |
657 { return (type == '(' || type == '.'); } | |
562 | 658 |
563 octave_value construct (const octave_value_list& args); | 659 octave_value construct (const octave_value_list& args); |
564 | 660 |
565 cdef_object construct_object (const octave_value_list& args); | 661 cdef_object construct_object (const octave_value_list& args); |
566 | 662 |
649 typedef std::map<std::string,cdef_property>::iterator property_iterator; | 745 typedef std::map<std::string,cdef_property>::iterator property_iterator; |
650 typedef std::map<std::string,cdef_property>::const_iterator property_const_iterator; | 746 typedef std::map<std::string,cdef_property>::const_iterator property_const_iterator; |
651 | 747 |
652 private: | 748 private: |
653 cdef_class_rep (const cdef_class_rep& c) | 749 cdef_class_rep (const cdef_class_rep& c) |
654 : handle_cdef_object (c), directory (c.directory), | 750 : cdef_meta_object_rep (c), directory (c.directory), |
655 method_map (c.method_map), property_map (c.property_map), | 751 method_map (c.method_map), property_map (c.property_map), |
656 member_count (c.member_count), handle_class (c.handle_class), | 752 member_count (c.member_count), handle_class (c.handle_class), |
657 implicit_ctor_list (c.implicit_ctor_list), | 753 implicit_ctor_list (c.implicit_ctor_list), |
658 object_count (c.object_count), meta (c.meta) { } | 754 object_count (c.object_count), meta (c.meta) { } |
659 }; | 755 }; |
660 | 756 |
661 public: | 757 public: |
662 // Create and invalid class object | 758 // Create and invalid class object |
663 cdef_class (void) | 759 cdef_class (void) |
664 : cdef_object () { } | 760 : cdef_meta_object () { } |
665 | 761 |
666 cdef_class (const std::string& nm, | 762 cdef_class (const std::string& nm, |
667 const std::list<cdef_class>& superclasses) | 763 const std::list<cdef_class>& superclasses) |
668 : cdef_object (new cdef_class_rep (superclasses)) | 764 : cdef_meta_object (new cdef_class_rep (superclasses)) |
669 { get_rep ()->set_name (nm); } | 765 { get_rep ()->set_name (nm); } |
670 | 766 |
671 cdef_class (const cdef_class& cls) | 767 cdef_class (const cdef_class& cls) |
672 : cdef_object (cls) { } | 768 : cdef_meta_object (cls) { } |
673 | 769 |
674 cdef_class (const cdef_object& obj) | 770 cdef_class (const cdef_object& obj) |
675 : cdef_object (obj) | 771 : cdef_meta_object (obj) |
676 { | 772 { |
677 // This should never happen... | 773 // This should never happen... |
678 if (! is_class ()) | 774 if (! is_class ()) |
679 error ("internal error: invalid assignment from %s to meta.class object", | 775 error ("internal error: invalid assignment from %s to meta.class object", |
680 class_name ().c_str ()); | 776 class_name ().c_str ()); |
685 cdef_object::operator= (cls); | 781 cdef_object::operator= (cls); |
686 | 782 |
687 return *this; | 783 return *this; |
688 } | 784 } |
689 | 785 |
690 cdef_class& operator = (const cdef_object& obj) | |
691 { | |
692 if (obj.is_class ()) | |
693 cdef_object::operator= (obj); | |
694 else | |
695 error ("internal error: invalid assignment from %s to meta.class object", | |
696 class_name ().c_str ()); | |
697 | |
698 return *this; | |
699 } | |
700 | |
701 cdef_method find_method (const std::string& nm, bool local = false); | 786 cdef_method find_method (const std::string& nm, bool local = false); |
702 | 787 |
703 void install_method (const cdef_method& meth) | 788 void install_method (const cdef_method& meth) |
704 { get_rep ()->install_method (meth); } | 789 { get_rep ()->install_method (meth); } |
705 | 790 |
730 bool is_builtin (void) const | 815 bool is_builtin (void) const |
731 { return get_directory ().empty (); } | 816 { return get_directory ().empty (); } |
732 | 817 |
733 void delete_object (cdef_object obj) | 818 void delete_object (cdef_object obj) |
734 { get_rep ()->delete_object (obj); } | 819 { get_rep ()->delete_object (obj); } |
735 | |
736 octave_value_list subsref_meta (const std::string& type, | |
737 const std::list<octave_value_list>& idx, | |
738 int nargout) | |
739 { return get_rep ()->subsref_meta (type, idx, nargout); } | |
740 | 820 |
741 static cdef_class make_meta_class (tree_classdef* t); | 821 static cdef_class make_meta_class (tree_classdef* t); |
742 | 822 |
743 octave_function* get_method_function (const std::string& nm); | 823 octave_function* get_method_function (const std::string& nm); |
744 | 824 |
809 inline bool | 889 inline bool |
810 operator < (const cdef_class& clsa, const cdef_class& clsb) | 890 operator < (const cdef_class& clsa, const cdef_class& clsb) |
811 { return clsa.get_rep () < clsb.get_rep (); } | 891 { return clsa.get_rep () < clsb.get_rep (); } |
812 | 892 |
813 class | 893 class |
814 cdef_property : public cdef_object | 894 cdef_property : public cdef_meta_object |
815 { | 895 { |
816 friend class cdef_class; | 896 friend class cdef_class; |
817 | 897 |
818 private: | 898 private: |
819 | 899 |
820 class | 900 class |
821 cdef_property_rep : public handle_cdef_object | 901 cdef_property_rep : public cdef_meta_object_rep |
822 { | 902 { |
823 public: | 903 public: |
824 cdef_property_rep (void) | 904 cdef_property_rep (void) |
825 : handle_cdef_object () { } | 905 : cdef_meta_object_rep () { } |
826 | 906 |
827 cdef_object_rep* copy (void) const { return new cdef_property_rep (*this); } | 907 cdef_object_rep* copy (void) const { return new cdef_property_rep (*this); } |
828 | 908 |
829 bool is_property (void) const { return true; } | 909 bool is_property (void) const { return true; } |
830 | 910 |
849 | 929 |
850 bool check_set_access (void) const; | 930 bool check_set_access (void) const; |
851 | 931 |
852 private: | 932 private: |
853 cdef_property_rep (const cdef_property_rep& p) | 933 cdef_property_rep (const cdef_property_rep& p) |
854 : handle_cdef_object (p) { } | 934 : cdef_meta_object_rep (p) { } |
855 | 935 |
856 bool is_recursive_set (const cdef_object& obj) const; | 936 bool is_recursive_set (const cdef_object& obj) const; |
857 | 937 |
858 cdef_property wrap (void) | 938 cdef_property wrap (void) |
859 { | 939 { |
861 return cdef_property (this); | 941 return cdef_property (this); |
862 } | 942 } |
863 }; | 943 }; |
864 | 944 |
865 public: | 945 public: |
866 cdef_property (void) : cdef_object () { } | 946 cdef_property (void) : cdef_meta_object () { } |
867 | 947 |
868 cdef_property (const std::string& nm) | 948 cdef_property (const std::string& nm) |
869 : cdef_object (new cdef_property_rep ()) | 949 : cdef_meta_object (new cdef_property_rep ()) |
870 { get_rep ()->set_name (nm); } | 950 { get_rep ()->set_name (nm); } |
871 | 951 |
872 cdef_property (const cdef_property& prop) | 952 cdef_property (const cdef_property& prop) |
873 : cdef_object (prop) { } | 953 : cdef_meta_object (prop) { } |
874 | 954 |
875 cdef_property (const cdef_object& obj) | 955 cdef_property (const cdef_object& obj) |
876 : cdef_object (obj) | 956 : cdef_meta_object (obj) |
877 { | 957 { |
878 // This should never happen... | 958 // This should never happen... |
879 if (! is_property ()) | 959 if (! is_property ()) |
880 error ("internal error: invalid assignment from %s to meta.property object", | 960 error ("internal error: invalid assignment from %s to meta.property object", |
881 class_name ().c_str ()); | 961 class_name ().c_str ()); |
918 const cdef_property_rep* get_rep (void) const | 998 const cdef_property_rep* get_rep (void) const |
919 { return dynamic_cast<const cdef_property_rep *> (cdef_object::get_rep ()); } | 999 { return dynamic_cast<const cdef_property_rep *> (cdef_object::get_rep ()); } |
920 }; | 1000 }; |
921 | 1001 |
922 class | 1002 class |
923 cdef_method : public cdef_object | 1003 cdef_method : public cdef_meta_object |
924 { | 1004 { |
925 friend class cdef_class; | 1005 friend class cdef_class; |
926 | 1006 |
927 private: | 1007 private: |
928 | 1008 |
929 class | 1009 class |
930 cdef_method_rep : public handle_cdef_object | 1010 cdef_method_rep : public cdef_meta_object_rep |
931 { | 1011 { |
932 public: | 1012 public: |
933 cdef_method_rep (void) : handle_cdef_object () { } | 1013 cdef_method_rep (void) : cdef_meta_object_rep () { } |
934 | 1014 |
935 cdef_object_rep* copy (void) const { return new cdef_method_rep(*this); } | 1015 cdef_object_rep* copy (void) const { return new cdef_method_rep(*this); } |
936 | 1016 |
937 bool is_method (void) const { return true; } | 1017 bool is_method (void) const { return true; } |
938 | 1018 |
959 | 1039 |
960 bool is_constructor (void) const; | 1040 bool is_constructor (void) const; |
961 | 1041 |
962 private: | 1042 private: |
963 cdef_method_rep (const cdef_method_rep& m) | 1043 cdef_method_rep (const cdef_method_rep& m) |
964 : handle_cdef_object (m), function (m.function) { } | 1044 : cdef_meta_object_rep (m), function (m.function) { } |
965 | 1045 |
966 void check_method (void); | 1046 void check_method (void); |
967 | 1047 |
968 cdef_method wrap (void) | 1048 cdef_method wrap (void) |
969 { | 1049 { |
974 private: | 1054 private: |
975 octave_value function; | 1055 octave_value function; |
976 }; | 1056 }; |
977 | 1057 |
978 public: | 1058 public: |
979 cdef_method (void) : cdef_object () { } | 1059 cdef_method (void) : cdef_meta_object () { } |
980 | 1060 |
981 cdef_method (const std::string& nm) | 1061 cdef_method (const std::string& nm) |
982 : cdef_object (new cdef_method_rep ()) | 1062 : cdef_meta_object (new cdef_method_rep ()) |
983 { get_rep ()->set_name (nm); } | 1063 { get_rep ()->set_name (nm); } |
984 | 1064 |
985 cdef_method (const cdef_property& prop) | 1065 cdef_method (const cdef_method& meth) |
986 : cdef_object (prop) { } | 1066 : cdef_meta_object (meth) { } |
987 | 1067 |
988 cdef_method (const cdef_object& obj) | 1068 cdef_method (const cdef_object& obj) |
989 : cdef_object (obj) | 1069 : cdef_meta_object (obj) |
990 { | 1070 { |
991 // This should never happen... | 1071 // This should never happen... |
992 if (! is_method ()) | 1072 if (! is_method ()) |
993 error ("internal error: invalid assignment from %s to meta.method object", | 1073 error ("internal error: invalid assignment from %s to meta.method object", |
994 class_name ().c_str ()); | 1074 class_name ().c_str ()); |
1110 inline cdef_property | 1190 inline cdef_property |
1111 cdef_class::find_property (const std::string& nm) | 1191 cdef_class::find_property (const std::string& nm) |
1112 { return get_rep ()->find_property (nm); } | 1192 { return get_rep ()->find_property (nm); } |
1113 | 1193 |
1114 class | 1194 class |
1115 cdef_package : public cdef_object | 1195 cdef_package : public cdef_meta_object |
1116 { | 1196 { |
1117 friend class cdef_class; | 1197 friend class cdef_class; |
1118 | 1198 |
1119 private: | 1199 private: |
1120 | 1200 |
1121 class | 1201 class |
1122 cdef_package_rep : public handle_cdef_object | 1202 cdef_package_rep : public cdef_meta_object_rep |
1123 { | 1203 { |
1124 public: | 1204 public: |
1125 cdef_package_rep (void) : handle_cdef_object (), member_count (0) { } | 1205 cdef_package_rep (void) : cdef_meta_object_rep (), member_count (0) { } |
1126 | 1206 |
1127 cdef_object_rep* copy (void) const { return new cdef_package_rep (*this); } | 1207 cdef_object_rep* copy (void) const { return new cdef_package_rep (*this); } |
1128 | 1208 |
1129 bool is_package (void) const { return true; } | 1209 bool is_package (void) const { return true; } |
1130 | 1210 |
1177 typedef std::map<std::string, cdef_package>::iterator package_iterator; | 1257 typedef std::map<std::string, cdef_package>::iterator package_iterator; |
1178 typedef std::map<std::string, cdef_package>::const_iterator package_const_iterator; | 1258 typedef std::map<std::string, cdef_package>::const_iterator package_const_iterator; |
1179 | 1259 |
1180 private: | 1260 private: |
1181 cdef_package_rep (const cdef_package_rep& p) | 1261 cdef_package_rep (const cdef_package_rep& p) |
1182 : handle_cdef_object (p), class_map (p.class_map), | 1262 : cdef_meta_object_rep (p), class_map (p.class_map), |
1183 function_map (p.function_map), package_map (p.package_map), | 1263 function_map (p.function_map), package_map (p.package_map), |
1184 member_count (p.member_count) { } | 1264 member_count (p.member_count) { } |
1185 }; | 1265 }; |
1186 | 1266 |
1187 public: | 1267 public: |
1188 cdef_package (void) : cdef_object () { } | 1268 cdef_package (void) : cdef_meta_object () { } |
1189 | 1269 |
1190 cdef_package (const std::string& nm) | 1270 cdef_package (const std::string& nm) |
1191 : cdef_object (new cdef_package_rep ()) | 1271 : cdef_meta_object (new cdef_package_rep ()) |
1192 { get_rep ()->set_name (nm); } | 1272 { get_rep ()->set_name (nm); } |
1193 | 1273 |
1274 cdef_package (const cdef_package& pack) | |
1275 : cdef_meta_object (pack) { } | |
1276 | |
1194 cdef_package (const cdef_object& obj) | 1277 cdef_package (const cdef_object& obj) |
1195 : cdef_object (obj) | 1278 : cdef_meta_object (obj) |
1196 { | 1279 { |
1197 // This should never happen... | 1280 // This should never happen... |
1198 if (! is_package ()) | 1281 if (! is_package ()) |
1199 error ("internal error: invalid assignment from %s to meta.package object", | 1282 error ("internal error: invalid assignment from %s to meta.package object", |
1200 class_name ().c_str ()); | 1283 class_name ().c_str ()); |