1+ /////////////////////////////////////////////////////////////////////////////////////////////
2+ // Copyright 2024 Garmin International, Inc.
3+ // Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you
4+ // may not use this file except in compliance with the Flexible and Interoperable Data
5+ // Transfer (FIT) Protocol License.
6+ /////////////////////////////////////////////////////////////////////////////////////////////
7+ // ****WARNING**** This file is auto-generated! Do NOT edit this file.
8+ // Profile Version = 21.158.0Release
9+ // Tag = production/release/21.158.0-0-gc9428aa
10+ /////////////////////////////////////////////////////////////////////////////////////////////
11+
12+
13+ package com .garmin .fit ;
14+
15+ import java .util .ArrayList ;
16+
17+ class Accumulator {
18+ // Index by Mesg# and DestField#
19+ ArrayList <AccumulatedField > accumulatedFields ;
20+
21+ Accumulator () {
22+ accumulatedFields = new ArrayList <AccumulatedField >();
23+ }
24+
25+ public void set (int mesgNum , int destFieldNum , long value ) {
26+ AccumulatedField accumField = null ;
27+ int i ;
28+
29+ for (i = 0 ; i < accumulatedFields .size (); i ++) {
30+ accumField = accumulatedFields .get (i );
31+
32+ if ((accumField .mesgNum == mesgNum ) && (accumField .destFieldNum == destFieldNum )) {
33+ break ;
34+ }
35+ }
36+
37+ if (i == accumulatedFields .size ()) {
38+ accumField = new AccumulatedField (mesgNum , destFieldNum );
39+ accumulatedFields .add (accumField );
40+ }
41+
42+ accumField .set (value );
43+ }
44+
45+ public long accumulate (int mesgNum , int destFieldNum , long value , int bits ) {
46+ AccumulatedField accumField = null ;
47+ int i ;
48+
49+ for (i = 0 ; i < accumulatedFields .size (); i ++) {
50+ accumField = accumulatedFields .get (i );
51+
52+ if ((accumField .mesgNum == mesgNum ) && (accumField .destFieldNum == destFieldNum )) {
53+ break ;
54+ }
55+ }
56+
57+ if (i == accumulatedFields .size ()) {
58+ accumField = new AccumulatedField (mesgNum , destFieldNum );
59+ accumulatedFields .add (accumField );
60+ }
61+
62+ return accumField .accumulate (value , bits );
63+
64+ }
65+
66+ private class AccumulatedField {
67+ int mesgNum ;
68+ int destFieldNum ; //Field# to accumulate into
69+ long lastValue ;
70+ long accumulatedValue ;
71+
72+ AccumulatedField (int mesgNum , int destFieldNum ) {
73+ this .mesgNum = mesgNum ;
74+ this .destFieldNum = destFieldNum ;
75+ this .lastValue = 0 ;
76+ this .accumulatedValue = 0 ;
77+ }
78+
79+ public long accumulate (long value , int bits ) {
80+ long mask = ((long ) 1 << bits ) - 1 ;
81+
82+ accumulatedValue += (value - lastValue ) & mask ;
83+ lastValue = value ;
84+
85+ return accumulatedValue ;
86+ }
87+
88+ public long set (long value ) {
89+ accumulatedValue = value ;
90+ this .lastValue = value ;
91+ return accumulatedValue ;
92+ }
93+ }
94+ }
0 commit comments