001 package org.bridj;
002 import org.bridj.ann.*;
003 import java.util.List;
004 import java.util.Date;
005
006 /**
007 * Wraps a value which size is the same as the 'time_t' C type (defined in time.h)
008 * @author Olivier
009 */
010 public final class TimeT extends AbstractIntegral {
011
012 public static final int SIZE = Platform.TIME_T_SIZE;
013 static {
014 BridJ.register();
015 }
016
017 public TimeT(long value) {
018 super(value);
019 }
020
021 public Date toDate() {
022 return new Date(value);
023 }
024
025 public static TimeT valueOf(long value) {
026 return new TimeT(value);
027 }
028
029 public static TimeT valueOf(Date value) {
030 return valueOf(value.getTime());
031 }
032
033 @Override
034 public String toString() {
035 return "TimeT(value = " + value + ", time = " + toDate() + ")";
036 }
037
038 @Struct(customizer = timeval_customizer.class)
039 public static class timeval extends StructObject {
040
041 public long getTime() {
042 return seconds() * 1000 + milliseconds();
043 }
044
045 @Field(0)
046 public long seconds() {
047 return this.io.getCLongField(this, 0);
048 }
049 @Field(0)
050 public timeval seconds(long seconds) {
051 this.io.setCLongField(this, 0, seconds);
052 return this;
053 }
054 public final long seconds_$eq(long seconds) {
055 seconds(seconds);
056 return seconds;
057 }
058 @Field(1)
059 public int milliseconds() {
060 return this.io.getIntField(this, 1);
061 }
062 @Field(1)
063 public timeval milliseconds(int milliseconds) {
064 this.io.setIntField(this, 1, milliseconds);
065 return this;
066 }
067 public final int milliseconds_$eq(int milliseconds) {
068 milliseconds(milliseconds);
069 return milliseconds;
070 }
071 }
072
073 public static class timeval_customizer extends StructIO.DefaultCustomizer {
074 @Override
075 public void beforeLayout(StructIO io, List<StructIO.AggregatedFieldDesc> aggregatedFields) {
076 StructIO.AggregatedFieldDesc secondsField = aggregatedFields.get(0);
077 if (Platform.isWindows() || !Platform.is64Bits())
078 secondsField.byteLength = 4;
079 else
080 secondsField.byteLength = 8;
081
082 secondsField.alignment = secondsField.byteLength;
083 }
084 }
085 }