5656Create the object representing an SPK segment of type 2.
5757"""
5858function SPKSegmentType2 (daf:: DAF , desc:: DAFSegmentDescriptor )
59-
6059 # Initialise the segment header and cache
6160 header = SPKSegmentHeader2 (daf, desc)
62- caches = [SPKSegmentCache2 (header) for _ in 1 : Threads. nthreads ()]
63-
64- SPKSegmentType2 (header, caches)
65-
61+ nbuffers = Threads. nthreads ()
62+ caches = Channel {SPKSegmentCache2} (nbuffers)
63+ foreach (1 : nbuffers) do _
64+ put! (caches, SPKSegmentCache2 (header))
65+ end
66+ return SPKSegmentType2 (header, caches)
6667end
6768
6869@inline spk_field (:: SPKSegmentType2 ) = SPK_SEGMENTLIST_MAPPING[2 ]
6970
7071function spk_vector3 (daf:: DAF , seg:: SPKSegmentType2 , time:: Number )
7172
7273 head = header (seg)
73- data = cache (seg)
74+ data = take! (seg)
7475
7576 # Retrieve Chebyshev coefficients
7677 get_coefficients! (daf, head, data, time)
@@ -79,6 +80,8 @@ function spk_vector3(daf::DAF, seg::SPKSegmentType2, time::Number)
7980 t = normalise_time (data, time)
8081
8182 x, y, z = chebyshev (data. buff, data. A, t, 0 , head. N)
83+ put! (seg, data)
84+
8285 return SVector {3} (x, y, z)
8386
8487end
8790function spk_vector6 (daf:: DAF , seg:: SPKSegmentType2 , time:: Number )
8891
8992 head = header (seg)
90- data = cache (seg)
93+ data = take! (seg)
9194
9295 # Retrieve Chebyshev coefficients
9396 get_coefficients! (daf, head, data, time)
@@ -101,6 +104,7 @@ function spk_vector6(daf::DAF, seg::SPKSegmentType2, time::Number)
101104 x, y, z = chebyshev (data. buff, data. A, t, 0 , head. N)
102105 vx, vy, vz = chebyshev (data. buff, data. A, t, 3 , head. N)
103106 end
107+ put! (seg, data)
104108
105109 return SVector {6} (x, y, z, vx, vy, vz)
106110
109113function spk_vector9 (daf:: DAF , seg:: SPKSegmentType2 , time:: Number )
110114
111115 head = header (seg)
112- data = cache (seg)
116+ data = take! (seg)
113117
114118 # Retrieve Chebyshev coefficients
115119 get_coefficients! (daf, head, data, time)
@@ -126,6 +130,7 @@ function spk_vector9(daf::DAF, seg::SPKSegmentType2, time::Number)
126130 x, y, z = chebyshev (data. buff, data. A, t, 0 , head. N)
127131 vx, vy, vz, ax, ay, az = ∂chebyshev (data. buff, data. A, t, 3 , head. N, data. p[3 ])
128132 end
133+ put! (seg, data)
129134
130135 return SVector {9} (x, y, z, vx, vy, vz, ax, ay, az)
131136
134139function spk_vector12 (daf:: DAF , seg:: SPKSegmentType2 , time:: Number )
135140
136141 head = header (seg)
137- data = cache (seg)
142+ data = take! (seg)
138143
139144 # Retrieve Chebyshev coefficients
140145 get_coefficients! (daf, head, data, time)
@@ -153,6 +158,7 @@ function spk_vector12(daf::DAF, seg::SPKSegmentType2, time::Number)
153158 data. buff, data. A, t, 3 , head. N, data. p[3 ]
154159 )
155160 end
161+ put! (seg, data)
156162
157163 return SVector {12} (x, y, z, vx, vy, vz, ax, ay, az, jx, jy, jz)
158164
0 commit comments