Class.pm 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package Logos::Class;
  2. use strict;
  3. sub new {
  4. my $proto = shift;
  5. my $class = ref($proto) || $proto;
  6. my $self = {};
  7. $self->{NAME} = undef;
  8. $self->{EXPR} = undef;
  9. $self->{METAEXPR} = undef;
  10. $self->{TYPE} = undef;
  11. $self->{META} = 0;
  12. $self->{INST} = 0;
  13. $self->{OVERRIDDEN} = 0;
  14. $self->{REQUIRED} = 0;
  15. $self->{METHODS} = [];
  16. $self->{NUM_METHODS} = 0;
  17. $self->{PROPERTIES} = [];
  18. $self->{NUM_PROPERTIES} = 0;
  19. $self->{GROUP} = undef;
  20. bless($self, $class);
  21. return $self;
  22. }
  23. ##################### #
  24. # Setters and Getters #
  25. # #####################
  26. sub name {
  27. my $self = shift;
  28. if(@_) { $self->{NAME} = shift; }
  29. return $self->{NAME};
  30. }
  31. sub expression {
  32. my $self = shift;
  33. if(@_) {
  34. $self->{EXPR} = shift;
  35. $self->type("id");
  36. $self->{OVERRIDDEN} = 1;
  37. }
  38. return $self->{EXPR};
  39. }
  40. sub metaexpression {
  41. my $self = shift;
  42. if(@_) {
  43. $self->{METAEXPR} = shift;
  44. $self->{OVERRIDDEN} = 1;
  45. }
  46. return $self->{METAEXPR};
  47. }
  48. sub type {
  49. my $self = shift;
  50. if(@_) { $self->{TYPE} = shift; }
  51. return $self->{TYPE} if $self->{TYPE};
  52. return $self->{NAME}."*";
  53. }
  54. sub hasmetahooks {
  55. my $self = shift;
  56. if(@_) { $self->{META} = shift; }
  57. return $self->{META};
  58. }
  59. sub hasinstancehooks {
  60. my $self = shift;
  61. if(@_) { $self->{INST} = shift; }
  62. return $self->{INST};
  63. }
  64. sub group {
  65. my $self = shift;
  66. if(@_) { $self->{GROUP} = shift; }
  67. return $self->{GROUP};
  68. }
  69. sub required {
  70. my $self = shift;
  71. if(@_) { $self->{REQUIRED} = shift; }
  72. return $self->{REQUIRED};
  73. }
  74. sub overridden {
  75. my $self = shift;
  76. return $self->{OVERRIDDEN};
  77. }
  78. sub methods {
  79. my $self = shift;
  80. return $self->{METHODS};
  81. }
  82. sub properties {
  83. my $self = shift;
  84. return $self->{PROPERTIES};
  85. }
  86. sub initRequired {
  87. my $self = shift;
  88. return $self->required || scalar @{$self->{METHODS}} > 0;
  89. }
  90. ##### #
  91. # END #
  92. # #####
  93. sub addMethod {
  94. my $self = shift;
  95. my $hook = shift;
  96. push(@{$self->{METHODS}}, $hook);
  97. $self->{NUM_METHODS}++;
  98. }
  99. sub addProperty {
  100. my $self = shift;
  101. my $property = shift;
  102. push(@{$self->{PROPERTIES}}, $property);
  103. $self->{NUM_PROPERTIES}++;
  104. }
  105. 1;