File: TimeC.cpp

package info (click to toggle)
soapysdr 0.8.1-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 948 kB
  • sloc: cpp: 5,378; ansic: 471; python: 311; sh: 21; makefile: 18
file content (38 lines) | stat: -rw-r--r-- 1,078 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Copyright (c) 2015-2015 Josh Blum
// SPDX-License-Identifier: BSL-1.0

#include <SoapySDR/Time.h>
#include <cmath>

extern "C" {

#if defined(_MSC_VER) && (_MSC_VER < 1800)

static inline long long int llround(const double x)
{
    return (long long int)((x < (0.0)) ? (x - (0.5)) : (x + (0.5)));
}

#endif

long long SoapySDR_ticksToTimeNs(const long long ticks, const double rate)
{
    const long long ratell = (long long)(rate);
    const long long full = (long long)(ticks/ratell);
    const long long err = ticks - (full*ratell);
    const double part = full*(rate - ratell);
    const double frac = ((err - part)*1000000000)/rate;
    return (full*1000000000) + llround(frac);
}

long long SoapySDR_timeNsToTicks(const long long timeNs, const double rate)
{
    const long long ratell = (long long)(rate);
    const long long full = (long long)(timeNs/1000000000);
    const long long err = timeNs - (full*1000000000);
    const double part = full*(rate - ratell);
    const double frac = part + ((err*rate)/1000000000);
    return (full*ratell) + llround(frac);
}

}