123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- package Logos::Group;
- use strict;
- sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- $self->{NAME} = undef;
- $self->{EXPLICIT} = 1;
- $self->{INITIALIZED} = 0;
- $self->{INITLINE} = -1;
- $self->{CLASSES} = [];
- $self->{FUNCTIONS} = [];
- bless($self, $class);
- return $self;
- }
- ##################### #
- # Setters and Getters #
- # #####################
- sub name {
- my $self = shift;
- if(@_) { $self->{NAME} = shift; }
- return $self->{NAME};
- }
- sub explicit {
- my $self = shift;
- if(@_) { $self->{EXPLICIT} = shift; }
- return $self->{EXPLICIT};
- }
- sub initialized {
- my $self = shift;
- if(@_) { $self->{INITIALIZED} = shift; }
- return $self->{INITIALIZED};
- }
- sub initRequired {
- my $self = shift;
- for(@{$self->{CLASSES}}) {
- return 1 if $_->initRequired;
- }
- for(@{$self->{FUNCTIONS}}) {
- return 1 if $_->initRequired;
- }
- return 0;
- }
- sub identifier {
- my $self = shift;
- return main::sanitize($self->{NAME});
- }
- sub initLine {
- my $self = shift;
- if(@_) { $self->{INITLINE} = shift; }
- return $self->{INITLINE};
- }
- sub classes {
- my $self = shift;
- return $self->{CLASSES};
- }
- sub functions {
- my $self = shift;
- return $self->{FUNCTIONS};
- }
- ##### #
- # END #
- # #####
- sub addClass {
- my $self = shift;
- my $class = shift;
- $class->group($self);
- push(@{$self->{CLASSES}}, $class);
- }
- sub addClassNamed {
- my $self = shift;
- my $name = shift;
- my $class = $self->getClassNamed($name);
- return $class if defined($class);
- $class = ::Class()->new();
- $class->name($name);
- $self->addClass($class);
- return $class;
- }
- sub getClassNamed {
- my $self = shift;
- my $name = shift;
- foreach(@{$self->{CLASSES}}) {
- return $_ if $_->name eq $name;
- }
- return undef;
- }
- sub addFunction {
- my $self = shift;
- my $args = shift;
- my $functionRetval = undef;
- my $functionName = undef;
- my $functionArgs = [];
- my $argIdx = 0;
- for (@$args) {
- if ($argIdx == 0) {
- $argIdx++;
- $functionRetval = $_;
- } elsif ($argIdx == 1) {
- $argIdx++;
- $functionName = $_;
- } else {
- push(@$functionArgs, $_);
- }
- }
-
- my $function = ::Function()->new();
- $function->retval($functionRetval);
- $function->name($functionName);
- for(@$functionArgs) {
- $function->addArg($_);
- }
- $function->group($self);
- push(@{$self->{FUNCTIONS}}, $function);
- return $function;
- }
- 1;
|