package Vertex; use strict; sub new { my ($class, %params) = @_; bless { '_x' => $params{'x'} || 0, '_y' => $params{'y'} || 0, '_label' => $params{'label'} || '', '_edges' => {}, # Neighbouring verteces connected through an edge. '_verteces' => {}, # Neighbouring verteces not connected through an edge. '_fx' => 0, '_fy' => 0, '_dx' => 0, '_dy' => 0, }, $class; } # new sub print_vertex { my ($class, $i) = @_; my $is; if (!defined($i)) { $is = ''; } else { $is = sprintf('%' . $i . 's', ''); } print $is, 'label=', $_[0]->{'_label'}, "\n"; print $is, 'x=' , $_[0]->{'_x'}, "\n"; print $is, 'y=' , $_[0]->{'_y'}, "\n"; print $is, 'fx=' , $_[0]->{'_fx'}, "\n"; print $is, 'fy=' , $_[0]->{'_fy'}, "\n"; my @tmp = keys %{$_[0]->{'_edges'}}; my $tmp; if ($#tmp >= 0) { print $is, 'Edges: (', 1+$#tmp, ") \n"; for $tmp ( @tmp ) { print " ", $tmp->query_label(), "\n"; ### ERROR OCCURS HERE. } } else { print $is, "No edges.\n"; } @tmp = keys %{$_[0]->{'_verteces'}}; if ($#tmp >= 0) { print $is, 'Verteces:', "\n"; for ( @tmp ) { print $is, " ", $_->query_label(), "\n"; } } else { print $is, "No verteces.\n"; } } # print_vertex # Only neighbours not connected through an edge should be added here. sub add_neighbour_reference { my ($self, @params) = @_; my $key; for $key ( @params ) { $self->{_neighbours}[$key] = 1; } } # add_neighbour sub add_edge_reference { my ($self, @params) = @_; my $key; for $key ( @params ) { $self->{_edges}{$key} = 1; } } # add_edge_references sub query_x { $_[0]->{_x}; } # query_x sub set_x { $_[0]->{_x} = $_[1] if defined($_[1]); } # set_x sub query_y { $_[0]->{_y}; } # query_y sub set_y { $_[0]->{_y} = $_[1] if defined($_[1]); } # set_y sub query_label { $_[0]->{_label}; } # query_label sub set_label { $_[0]->{_label} = $_[1] if defined($_[1]); } # set_label 1;