Coverage Report

Created: 2026-11-12 07:19

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/dcmtk/dcmjpls/libcharls/ctxtrmod.h
Line
Count
Source
1
// 
2
// (C) Jan de Vaan 2007-2010, all rights reserved. See the accompanying "License.txt" for licensed use. 
3
// 
4
5
6
#ifndef CHARLS_CONTEXTRUNMODE
7
#define CHARLS_CONTEXTRUNMODE
8
9
// Implements statistical modelling for the run mode context.
10
// Computes model dependent parameters like the golomb code lengths
11
12
struct CContextRunMode 
13
{
14
  CContextRunMode(LONG a, LONG nRItype, LONG nReset) :
15
0
    A(a),
16
0
    N(1),  
17
0
    Nn(0),
18
0
    _nRItype(nRItype),
19
0
    _nReset((BYTE)nReset)
20
0
  {
21
0
  }
22
23
  LONG A;
24
  BYTE N;
25
  BYTE Nn;
26
  LONG _nRItype;
27
  BYTE _nReset;
28
29
  CContextRunMode()
30
0
  {}
31
32
33
  inlinehint LONG GetGolomb() const
34
0
  {
35
0
    LONG Ntest  = N;
36
0
    LONG TEMP = A + (N >> 1) * _nRItype;
37
0
    LONG k = 0;
38
0
    for(; Ntest < TEMP; k++) 
39
0
    { 
40
0
      Ntest <<= 1;
41
0
      ASSERT(k <= 32); 
42
0
    };
43
0
    return k;
44
0
  }
45
46
47
  void UpdateVariables(LONG Errval, LONG EMErrval)
48
0
  {   
49
0
    if (Errval < 0)
50
0
    {
51
0
      Nn = Nn + 1;
52
0
    }
53
0
    A = A + ((EMErrval + 1 - _nRItype) >> 1);
54
0
    if (N == _nReset) 
55
0
    {
56
0
      A = A >> 1;
57
0
      N = N >> 1;
58
0
      Nn = Nn >> 1;
59
0
    }
60
0
    N = N + 1;
61
0
  }
62
63
  inlinehint LONG ComputeErrVal(LONG temp, LONG k)
64
0
  {
65
0
    bool map = temp & 1;
66
67
0
    LONG errvalabs = (temp + map) / 2;
68
69
0
    if ((k != 0 || (2 * Nn >= N)) == map)
70
0
    {
71
0
      ASSERT(map == ComputeMap(-errvalabs, k));
72
0
      return -errvalabs;
73
0
    }
74
75
0
    ASSERT(map == ComputeMap(errvalabs, k));  
76
0
    return errvalabs;
77
0
  }
78
79
80
  bool ComputeMap(LONG Errval, LONG k) const
81
0
  {
82
0
    if ((k == 0) && (Errval > 0) && (2 * Nn < N))
83
0
      return 1;
84
85
0
    else if ((Errval < 0) && (2 * Nn >= N))
86
0
      return 1;    
87
88
0
    else if ((Errval < 0) && (k != 0))
89
0
      return 1;
90
91
0
    return 0;
92
0
  }
93
94
95
  inlinehint LONG ComputeMapNegativeE(LONG k) const
96
0
  {
97
0
    return  k != 0 || (2 * Nn >= N );
98
0
  }
99
};
100
101
#endif