NICType.pm 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package NIC::NICType;
  2. use strict;
  3. use warnings;
  4. use constant {
  5. TYPE_UNKNOWN => 0,
  6. TYPE_DIRECTORY => 1,
  7. TYPE_FILE => 2,
  8. TYPE_SYMLINK => 3
  9. };
  10. use overload '""' => sub {
  11. my $self = shift;
  12. my $ref = ref($self);
  13. $ref =~ s/^.*::(\w+)$/$1/g;
  14. return '"'.$self->name."\" ($ref, mode ".sprintf("%4.04o", $self->mode).")";
  15. };
  16. sub new {
  17. my $proto = shift;
  18. my $class = ref($proto) || $proto;
  19. my $self = {};
  20. $self->{OWNER} = shift // undef;
  21. $self->{NAME} = shift // undef;
  22. $self->{MODE} = undef;
  23. $self->{CONSTRAINTS} = [];
  24. bless($self, $class);
  25. return $self;
  26. }
  27. sub _take_init {
  28. }
  29. sub take {
  30. my $proto = shift;
  31. my $class = ref($proto) || $proto;
  32. my $obj = shift;
  33. bless($obj, $class);
  34. $obj->_take_init(@_);
  35. }
  36. sub name {
  37. my $self = shift;
  38. if(@_) { $self->{NAME} = shift; }
  39. return $self->{NAME};
  40. }
  41. sub _mode {
  42. return 0;
  43. }
  44. sub mode {
  45. my $self = shift;
  46. if(@_) { $self->{MODE} = shift; }
  47. return $self->{MODE} // $self->_mode;
  48. }
  49. sub type {
  50. my $self = shift;
  51. return TYPE_UNKNOWN;
  52. }
  53. sub constraints {
  54. my $self = shift;
  55. return @{$self->{CONSTRAINTS}};
  56. }
  57. sub addConstraint {
  58. my $self = shift;
  59. my $constraint = shift;
  60. push(@{$self->{CONSTRAINTS}}, $constraint);
  61. }
  62. sub create {
  63. return 0;
  64. }
  65. 1;