+package ID3FS::Path::Node;
+
+use strict;
+use warnings;
+
+sub new
+{
+ my $proto=shift;
+ my $class=ref($proto) || $proto;
+ my $self={};
+ bless($self,$class);
+
+ $self->left(shift);
+ $self->op(shift);
+ $self->right(shift);
+
+ return $self;
+}
+
+sub set
+{
+ my($self, $name, $val)=@_;
+ if(defined($val))
+ {
+ $self->{$name}=$val;
+ }
+ return $self->{$name};
+}
+
+sub left { return shift->set("left", shift); }
+sub right { return shift->set("right", shift); }
+sub op { return shift->set("op", shift); }
+
+sub print
+{
+ my($self)=@_;
+ my $op=$self->op();
+ my $left=$self->left();
+ my $right=$self->right();
+ return undef unless($left || $right);
+ my $str .= $self->print_node($left);
+ $str .= " $op " if($op);
+ $str .= $self->print_node($right);
+ if($op || ($left && $right))
+ {
+ $str="(" . $str . ")";
+ }
+ return $str;
+}
+
+sub print_node
+{
+ my($self, $node)=@_;
+ return "" unless(defined($node));
+ return $node->print() if(ref($node) eq "ID3FS::Path::Node");
+ return $node;
+}
+
+1;