Group.pm 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package Logos::Group;
  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->{EXPLICIT} = 1;
  9. $self->{INITIALIZED} = 0;
  10. $self->{INITLINE} = -1;
  11. $self->{CLASSES} = [];
  12. $self->{FUNCTIONS} = [];
  13. bless($self, $class);
  14. return $self;
  15. }
  16. ##################### #
  17. # Setters and Getters #
  18. # #####################
  19. sub name {
  20. my $self = shift;
  21. if(@_) { $self->{NAME} = shift; }
  22. return $self->{NAME};
  23. }
  24. sub explicit {
  25. my $self = shift;
  26. if(@_) { $self->{EXPLICIT} = shift; }
  27. return $self->{EXPLICIT};
  28. }
  29. sub initialized {
  30. my $self = shift;
  31. if(@_) { $self->{INITIALIZED} = shift; }
  32. return $self->{INITIALIZED};
  33. }
  34. sub initRequired {
  35. my $self = shift;
  36. for(@{$self->{CLASSES}}) {
  37. return 1 if $_->initRequired;
  38. }
  39. for(@{$self->{FUNCTIONS}}) {
  40. return 1 if $_->initRequired;
  41. }
  42. return 0;
  43. }
  44. sub identifier {
  45. my $self = shift;
  46. return main::sanitize($self->{NAME});
  47. }
  48. sub initLine {
  49. my $self = shift;
  50. if(@_) { $self->{INITLINE} = shift; }
  51. return $self->{INITLINE};
  52. }
  53. sub classes {
  54. my $self = shift;
  55. return $self->{CLASSES};
  56. }
  57. sub functions {
  58. my $self = shift;
  59. return $self->{FUNCTIONS};
  60. }
  61. ##### #
  62. # END #
  63. # #####
  64. sub addClass {
  65. my $self = shift;
  66. my $class = shift;
  67. $class->group($self);
  68. push(@{$self->{CLASSES}}, $class);
  69. }
  70. sub addClassNamed {
  71. my $self = shift;
  72. my $name = shift;
  73. my $class = $self->getClassNamed($name);
  74. return $class if defined($class);
  75. $class = ::Class()->new();
  76. $class->name($name);
  77. $self->addClass($class);
  78. return $class;
  79. }
  80. sub getClassNamed {
  81. my $self = shift;
  82. my $name = shift;
  83. foreach(@{$self->{CLASSES}}) {
  84. return $_ if $_->name eq $name;
  85. }
  86. return undef;
  87. }
  88. sub addFunction {
  89. my $self = shift;
  90. my $args = shift;
  91. my $functionRetval = undef;
  92. my $functionName = undef;
  93. my $functionArgs = [];
  94. my $argIdx = 0;
  95. for (@$args) {
  96. if ($argIdx == 0) {
  97. $argIdx++;
  98. $functionRetval = $_;
  99. } elsif ($argIdx == 1) {
  100. $argIdx++;
  101. $functionName = $_;
  102. } else {
  103. push(@$functionArgs, $_);
  104. }
  105. }
  106. my $function = ::Function()->new();
  107. $function->retval($functionRetval);
  108. $function->name($functionName);
  109. for(@$functionArgs) {
  110. $function->addArg($_);
  111. }
  112. $function->group($self);
  113. push(@{$self->{FUNCTIONS}}, $function);
  114. return $function;
  115. }
  116. 1;