001// Copyright (c) FIRST and other WPILib contributors.
002// Open Source Software; you can modify and/or share it under the terms of
003// the WPILib BSD license file in the root directory of this project.
004
005package edu.wpi.first.networktables;
006
007/** NetworkTables Double topic. */
008public final class DoubleTopic extends Topic {
009  /** The default type string for this topic type. */
010  public static final String kTypeString = "double";
011
012  /**
013   * Construct from a generic topic.
014   *
015   * @param topic Topic
016   */
017  public DoubleTopic(Topic topic) {
018    super(topic.m_inst, topic.m_handle);
019  }
020
021  /**
022   * Constructor; use NetworkTableInstance.getDoubleTopic() instead.
023   *
024   * @param inst Instance
025   * @param handle Native handle
026   */
027  public DoubleTopic(NetworkTableInstance inst, int handle) {
028    super(inst, handle);
029  }
030
031  /**
032   * Create a new subscriber to the topic.
033   *
034   * <p>The subscriber is only active as long as the returned object
035   * is not closed.
036   *
037   * <p>Subscribers that do not match the published data type do not return
038   * any values. To determine if the data type matches, use the appropriate
039   * Topic functions.
040   *
041   * @param defaultValue default value used when a default is not provided to a
042   *        getter function
043   * @param options subscribe options
044   * @return subscriber
045   */
046  public DoubleSubscriber subscribe(
047      double defaultValue,
048      PubSubOption... options) {
049    return new DoubleEntryImpl(
050        this,
051        NetworkTablesJNI.subscribe(
052            m_handle, NetworkTableType.kDouble.getValue(),
053            "double", options),
054        defaultValue);
055  }
056
057  /**
058   * Create a new subscriber to the topic, with specified type string.
059   *
060   * <p>The subscriber is only active as long as the returned object
061   * is not closed.
062   *
063   * <p>Subscribers that do not match the published data type do not return
064   * any values. To determine if the data type matches, use the appropriate
065   * Topic functions.
066   *
067   * @param typeString type string
068   * @param defaultValue default value used when a default is not provided to a
069   *        getter function
070   * @param options subscribe options
071   * @return subscriber
072   */
073  public DoubleSubscriber subscribeEx(
074      String typeString,
075      double defaultValue,
076      PubSubOption... options) {
077    return new DoubleEntryImpl(
078        this,
079        NetworkTablesJNI.subscribe(
080            m_handle, NetworkTableType.kDouble.getValue(),
081            typeString, options),
082        defaultValue);
083  }
084
085  /**
086   * Create a new publisher to the topic.
087   *
088   * <p>The publisher is only active as long as the returned object
089   * is not closed.
090   *
091   * <p>It is not possible to publish two different data types to the same
092   * topic. Conflicts between publishers are typically resolved by the server on
093   * a first-come, first-served basis. Any published values that do not match
094   * the topic's data type are dropped (ignored). To determine if the data type
095   * matches, use the appropriate Topic functions.
096   *
097   * @param options publish options
098   * @return publisher
099   */
100  public DoublePublisher publish(
101      PubSubOption... options) {
102    return new DoubleEntryImpl(
103        this,
104        NetworkTablesJNI.publish(
105            m_handle, NetworkTableType.kDouble.getValue(),
106            "double", options),
107        0);
108  }
109
110  /**
111   * Create a new publisher to the topic, with type string and initial properties.
112   *
113   * <p>The publisher is only active as long as the returned object
114   * is not closed.
115   *
116   * <p>It is not possible to publish two different data types to the same
117   * topic. Conflicts between publishers are typically resolved by the server on
118   * a first-come, first-served basis. Any published values that do not match
119   * the topic's data type are dropped (ignored). To determine if the data type
120   * matches, use the appropriate Topic functions.
121   *
122   * @param typeString type string
123   * @param properties JSON properties
124   * @param options publish options
125   * @return publisher
126   * @throws IllegalArgumentException if properties is not a JSON object
127   */
128  public DoublePublisher publishEx(
129      String typeString,
130      String properties,
131      PubSubOption... options) {
132    return new DoubleEntryImpl(
133        this,
134        NetworkTablesJNI.publishEx(
135            m_handle, NetworkTableType.kDouble.getValue(),
136            typeString, properties, options),
137        0);
138  }
139
140  /**
141   * Create a new entry for the topic.
142   *
143   * <p>Entries act as a combination of a subscriber and a weak publisher. The
144   * subscriber is active as long as the entry is not closed. The publisher is
145   * created when the entry is first written to, and remains active until either
146   * unpublish() is called or the entry is closed.
147   *
148   * <p>It is not possible to use two different data types with the same
149   * topic. Conflicts between publishers are typically resolved by the server on
150   * a first-come, first-served basis. Any published values that do not match
151   * the topic's data type are dropped (ignored), and the entry will show no new
152   * values if the data type does not match. To determine if the data type
153   * matches, use the appropriate Topic functions.
154   *
155   * @param defaultValue default value used when a default is not provided to a
156   *        getter function
157   * @param options publish and/or subscribe options
158   * @return entry
159   */
160  public DoubleEntry getEntry(
161      double defaultValue,
162      PubSubOption... options) {
163    return new DoubleEntryImpl(
164        this,
165        NetworkTablesJNI.getEntry(
166            m_handle, NetworkTableType.kDouble.getValue(),
167            "double", options),
168        defaultValue);
169  }
170
171  /**
172   * Create a new entry for the topic, with specified type string.
173   *
174   * <p>Entries act as a combination of a subscriber and a weak publisher. The
175   * subscriber is active as long as the entry is not closed. The publisher is
176   * created when the entry is first written to, and remains active until either
177   * unpublish() is called or the entry is closed.
178   *
179   * <p>It is not possible to use two different data types with the same
180   * topic. Conflicts between publishers are typically resolved by the server on
181   * a first-come, first-served basis. Any published values that do not match
182   * the topic's data type are dropped (ignored), and the entry will show no new
183   * values if the data type does not match. To determine if the data type
184   * matches, use the appropriate Topic functions.
185   *
186   * @param typeString type string
187   * @param defaultValue default value used when a default is not provided to a
188   *        getter function
189   * @param options publish and/or subscribe options
190   * @return entry
191   */
192  public DoubleEntry getEntryEx(
193      String typeString,
194      double defaultValue,
195      PubSubOption... options) {
196    return new DoubleEntryImpl(
197        this,
198        NetworkTablesJNI.getEntry(
199            m_handle, NetworkTableType.kDouble.getValue(),
200            typeString, options),
201        defaultValue);
202  }
203
204}