# This file was automatically generated by SWIG
package gettime;
require Exporter;
require DynaLoader;
@ISA = qw(Exporter DynaLoader);
package gettimec;
bootstrap gettime;
var_gettime_init();
@EXPORT = qw( );

# ---------- BASE METHODS -------------

package gettime;

sub TIEHASH {
    my ($classname,$obj) = @_;
    return bless $obj, $classname;
}

sub CLEAR { }


############# Class : timeval ##############

package timeval;
@ISA = qw( gettime );
%OWNER = ();
%BLESSEDMEMBERS = (
);

%ITERATORS = ();
sub new {
    my $self = shift;
    my @args = @_;
    $self = gettimec::new_timeval(@args);
    return undef if (!defined($self));
    bless $self, "timeval";
    $OWNER{$self} = 1;
    my %retval;
    tie %retval, "timeval", $self;
    return bless \%retval,"timeval";
}

sub DESTROY {
    my $self = tied(%{$_[0]});
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        gettimec::delete_timeval($self);
        delete $OWNER{$self};
    }
}

sub DISOWN {
    my $self = shift;
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
    };

sub ACQUIRE {
    my $self = shift;
    my $ptr = tied(%$self);
    $OWNER{$ptr} = 1;
    };

sub FETCH {
    my ($self,$field) = @_;
    my $member_func = "gettimec::timeval_${field}_get";
    my $val = &$member_func($self);
    if (exists $BLESSEDMEMBERS{$field}) {
        return undef if (!defined($val));
        my %retval;
        tie %retval,$BLESSEDMEMBERS{$field},$val;
        return bless \%retval, $BLESSEDMEMBERS{$field};
    }
    return $val;
}

sub STORE {
    my ($self,$field,$newval) = @_;
    my $member_func = "gettimec::timeval_${field}_set";
    if (exists $BLESSEDMEMBERS{$field}) {
        &$member_func($self,tied(%{$newval}));
    } else {
        &$member_func($self,$newval);
    }
}

sub FIRSTKEY {
    my $self = shift;
    $ITERATORS{$self} = ['tv_sec', 'tv_usec', ];
    my $first = shift @{$ITERATORS{$self}};
    return $first;
}

sub NEXTKEY {
    my $self = shift;
    $nelem = scalar @{$ITERATORS{$self}};
    if ($nelem > 0) {
        my $member = shift @{$ITERATORS{$self}};
        return $member;
    } else {
        $ITERATORS{$self} = ['tv_sec', 'tv_usec', ];
        return ();
    }
}


############# Class : timezone ##############

package timezone;
@ISA = qw( gettime );
%OWNER = ();
%BLESSEDMEMBERS = (
);

%ITERATORS = ();
sub new {
    my $self = shift;
    my @args = @_;
    $self = gettimec::new_timezone(@args);
    return undef if (!defined($self));
    bless $self, "timezone";
    $OWNER{$self} = 1;
    my %retval;
    tie %retval, "timezone", $self;
    return bless \%retval,"timezone";
}

sub DESTROY {
    my $self = tied(%{$_[0]});
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        gettimec::delete_timezone($self);
        delete $OWNER{$self};
    }
}

sub DISOWN {
    my $self = shift;
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
    };

sub ACQUIRE {
    my $self = shift;
    my $ptr = tied(%$self);
    $OWNER{$ptr} = 1;
    };

sub FETCH {
    my ($self,$field) = @_;
    my $member_func = "gettimec::timezone_${field}_get";
    my $val = &$member_func($self);
    if (exists $BLESSEDMEMBERS{$field}) {
        return undef if (!defined($val));
        my %retval;
        tie %retval,$BLESSEDMEMBERS{$field},$val;
        return bless \%retval, $BLESSEDMEMBERS{$field};
    }
    return $val;
}

sub STORE {
    my ($self,$field,$newval) = @_;
    my $member_func = "gettimec::timezone_${field}_set";
    if (exists $BLESSEDMEMBERS{$field}) {
        &$member_func($self,tied(%{$newval}));
    } else {
        &$member_func($self,$newval);
    }
}

sub FIRSTKEY {
    my $self = shift;
    $ITERATORS{$self} = ['tz_minuteswest', 'tz_dsttime', ];
    my $first = shift @{$ITERATORS{$self}};
    return $first;
}

sub NEXTKEY {
    my $self = shift;
    $nelem = scalar @{$ITERATORS{$self}};
    if ($nelem > 0) {
        my $member = shift @{$ITERATORS{$self}};
        return $member;
    } else {
        $ITERATORS{$self} = ['tz_minuteswest', 'tz_dsttime', ];
        return ();
    }
}


# ------- FUNCTION WRAPPERS --------

package gettime;

sub gettimeofday {
    my @args = @_;
    $args[0] = tied(%{$args[0]});
    $args[1] = tied(%{$args[1]});
    my $result = gettimec::gettimeofday(@args);
    return $result;
}
sub settimeofday {
    my @args = @_;
    $args[0] = tied(%{$args[0]});
    $args[1] = tied(%{$args[1]});
    my $result = gettimec::settimeofday(@args);
    return $result;
}

# ------- VARIABLE STUBS --------

package gettime;

*errno = *gettimec::errno;
1;

