]> mj.ucw.cz Git - pciids.git/blob - PciIds/Address/Toplevel.pm
55e50394994aa3ae2fc4ac261204087bb51d937a
[pciids.git] / PciIds / Address / Toplevel.pm
1 package PciIds::Address::Toplevel;
2 use strict;
3 use warnings;
4 use base 'PciIds::Address::Base';
5
6 sub new( $ ) {
7         my( $value ) = @_;
8         if( $value =~ /^P[CD]\/?/ ) {
9                 return bless PciIds::Address::Base::new( $value );
10         } else {
11                 return undef;
12         }
13 }
14
15 sub pretty( $ ) {
16         my $self = shift;
17         if( $self->{'value'} =~ /^PC/ ) {
18                 return 'PCI Devices';
19         } else {
20                 return 'PCI Device Classes';
21         }
22 }
23
24 sub restrictRex( $$ ) {
25         my( $self, $restrict ) = @_;
26         return PciIds::Address::new( $self->get().'/0000' )->restrictRex( $restrict );#Nasty trick, get the right address of any subnode and try it there
27 }
28
29 sub leaf( $ ) {
30         return 0;
31 }
32
33 sub append( $$ ) {
34         my( $self, $suffix ) = @_;
35         $suffix = lc $suffix;
36         if( $self->{'value'} =~ /^PC/ ) {#PCI
37                 return ( undef, "Invalid ID syntax" ) unless ( $suffix =~ /^[0-9a-f]{4,4}$/ );
38         } else {#PCI Device Class
39                 return ( undef, "Invalid ID syntax" ) unless ( $suffix =~ /^[0-9a-f]{2,2}$/ );
40         }
41         return ( PciIds::Address::Base::new( $self->{'value'} . ( ( $self->{'value'} =~ /\/$/ ) ? '' : '/' ) . $suffix ), undef );
42 }
43
44 sub canAddComment( $ ) { return 0; }
45
46 sub defaultRestrict( $ ) {
47         my( $self ) = @_;
48         if( $self->get() =~ /PC/ ) {
49                 return "0";
50         } else {
51                 return "";
52         }
53 }
54
55 sub defaultRestrictList( $ ) {
56         my( $self ) = @_;
57         if( $self->get() =~ /PC/ ) {
58                 my @result;
59                 for(my $i = '0'; $i < '10'; ++ $i ) {
60                         push @result, $i;
61                 }
62                 push @result, ( 'a', 'b', 'c', 'd', 'e', 'f' );
63                 my @final;
64                 push @final, [ $_, $_ ] foreach( @result );
65                 push @final, [ "", "all" ];
66                 return \@final;
67         } else {
68                 return [];
69         }
70 }
71
72 sub parent( $ ) {
73         return undef;
74 }
75
76 1;