16c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler/*
26c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * Copyright (C) 2011 The Android Open Source Project
36c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler *
46c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * Licensed under the Apache License, Version 2.0 (the "License");
56c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * you may not use this file except in compliance with the License.
66c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * You may obtain a copy of the License at
76c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler *
86c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler *      http://www.apache.org/licenses/LICENSE-2.0
96c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler *
106c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * Unless required by applicable law or agreed to in writing, software
116c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * distributed under the License is distributed on an "AS IS" BASIS,
126c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * See the License for the specific language governing permissions and
146c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * limitations under the License.
156c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler */
166c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
176c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittlerpackage android.system;
186c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
196c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittlerimport libcore.util.Objects;
206c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
216c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler/**
226c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * Corresponds to C's {@code struct timeval} from
236c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * <a href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_time.h.html">&lt;sys/time.h&gt;</a>
246c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler *
256c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler * @hide
266c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler */
276c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittlerpublic final class StructTimeval {
286c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    /** Seconds. */
296c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    public final long tv_sec;
306c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
316c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    /** Microseconds. */
326c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    public final long tv_usec;
336c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
346c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    private StructTimeval(long tv_sec, long tv_usec) {
356c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler        this.tv_sec = tv_sec;
366c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler        this.tv_usec = tv_usec;
376c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    }
386c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
396c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    public static StructTimeval fromMillis(long millis) {
406c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler        long tv_sec = millis / 1000;
416c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler        long tv_usec = (millis - (tv_sec * 1000)) * 1000;
426c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler        return new StructTimeval(tv_sec, tv_usec);
436c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    }
446c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
456c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    public long toMillis() {
466c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler        return (tv_sec * 1000) + (tv_usec / 1000);
476c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    }
486c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler
496c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    @Override public String toString() {
506c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler        return Objects.toString(this);
516c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler    }
526c291c5b40bc4ae7b23bc332a512133217746fd2Nathan Mittler}
53