mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Split the FluxmapReader and FluxPattern files.
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "lib/core/crc.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/sector.h"
|
||||
#include "lib/core/bytes.h"
|
||||
#include "fmt/format.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "lib/core/crc.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/sector.h"
|
||||
#include "lib/core/bytes.h"
|
||||
#include "fmt/format.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/encoders/encoders.h"
|
||||
#include "brother.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "lib/core/crc.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/sector.h"
|
||||
#include "arch/ibm/ibm.pb.h"
|
||||
#include "lib/proto.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
#include "micropolis.h"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "lib/core/crc.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/sector.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
#include "northstar.h"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "lib/core/crc.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/sector.h"
|
||||
#include "lib/core/bytes.h"
|
||||
#include "rolandd20.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "lib/core/crc.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/sector.h"
|
||||
#include <string.h>
|
||||
|
||||
@@ -14,7 +15,10 @@ constexpr uint64_t DATA_BITS = 0xaaaaaaaa44895545LL;
|
||||
static const FluxPattern HEADER_PATTERN(64, HEADER_BITS);
|
||||
static const FluxPattern DATA_PATTERN(64, DATA_BITS);
|
||||
|
||||
const FluxMatchers ANY_RECORD_PATTERN{&HEADER_PATTERN, &DATA_PATTERN};
|
||||
const FluxMatchers ANY_RECORD_PATTERN {
|
||||
&HEADER_PATTERN,
|
||||
&DATA_PATTERN
|
||||
};
|
||||
|
||||
class TartuDecoder : public Decoder
|
||||
{
|
||||
@@ -25,7 +29,9 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
void beginTrack() override {}
|
||||
void beginTrack() override
|
||||
{
|
||||
}
|
||||
|
||||
nanoseconds_t advanceToNextRecord() override
|
||||
{
|
||||
@@ -66,8 +72,7 @@ public:
|
||||
|
||||
uint8_t wantChecksum = bytes.reader().seek(128).read_8();
|
||||
uint8_t gotChecksum = ~sumBytes(_sector->data);
|
||||
_sector->status =
|
||||
(wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
|
||||
_sector->status = (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -78,3 +83,4 @@ std::unique_ptr<Decoder> createTartuDecoder(const DecoderProto& config)
|
||||
{
|
||||
return std::unique_ptr<Decoder>(new TartuDecoder(config));
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "lib/core/crc.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/sector.h"
|
||||
#include <string.h>
|
||||
#include <fmt/format.h>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "protocol.h"
|
||||
#include "lib/decoders/decoders.h"
|
||||
#include "lib/sector.h"
|
||||
|
||||
2
build.py
2
build.py
@@ -29,6 +29,7 @@ cxxlibrary(
|
||||
"./lib/decoders/decoders.cc",
|
||||
"./lib/decoders/fluxdecoder.cc",
|
||||
"./lib/decoders/fluxmapreader.cc",
|
||||
"./lib/decoders/fluxpattern.cc",
|
||||
"./lib/decoders/fmmfm.cc",
|
||||
"./lib/encoders/encoders.cc",
|
||||
"./lib/fl2.cc",
|
||||
@@ -159,6 +160,7 @@ cxxlibrary(
|
||||
"lib/decoders/decoders.h": "./lib/decoders/decoders.h",
|
||||
"lib/decoders/fluxdecoder.h": "./lib/decoders/fluxdecoder.h",
|
||||
"lib/decoders/fluxmapreader.h": "./lib/decoders/fluxmapreader.h",
|
||||
"lib/decoders/fluxpattern.h": "./lib/decoders/fluxpattern.h",
|
||||
"lib/decoders/rawbits.h": "./lib/decoders/rawbits.h",
|
||||
"lib/encoders/encoders.h": "./lib/encoders/encoders.h",
|
||||
"lib/scp.h": "./lib/scp.h",
|
||||
|
||||
@@ -220,3 +220,17 @@ uint32_t unbcd(uint32_t bcd)
|
||||
|
||||
return dec;
|
||||
}
|
||||
|
||||
int findLowestSetBit(uint64_t value)
|
||||
{
|
||||
if (!value)
|
||||
return 0;
|
||||
int bit = 1;
|
||||
while (!(value & 1))
|
||||
{
|
||||
value >>= 1;
|
||||
bit++;
|
||||
}
|
||||
return bit;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ extern std::string tohex(const std::string& s);
|
||||
extern bool doesFileExist(const std::string& filename);
|
||||
extern int countSetBits(uint32_t word);
|
||||
extern uint32_t unbcd(uint32_t bcd);
|
||||
extern int findLowestSetBit(uint64_t value);
|
||||
|
||||
template <class K, class V>
|
||||
std::map<V, K> reverseMap(const std::map<K, V>& map)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
class Sector;
|
||||
class Fluxmap;
|
||||
class FluxMatcher;
|
||||
class FluxmapReader;
|
||||
class RawBits;
|
||||
class DecoderProto;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include "lib/config.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/flags.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/proto.h"
|
||||
#include "protocol.h"
|
||||
#include <numeric>
|
||||
@@ -81,110 +81,6 @@ unsigned FluxmapReader::readInterval(nanoseconds_t clock)
|
||||
return ticks;
|
||||
}
|
||||
|
||||
static int findLowestSetBit(uint64_t value)
|
||||
{
|
||||
if (!value)
|
||||
return 0;
|
||||
int bit = 1;
|
||||
while (!(value & 1))
|
||||
{
|
||||
value >>= 1;
|
||||
bit++;
|
||||
}
|
||||
return bit;
|
||||
}
|
||||
|
||||
FluxPattern::FluxPattern(unsigned bits, uint64_t pattern): _bits(bits)
|
||||
{
|
||||
const uint64_t TOPBIT = 1ULL << 63;
|
||||
|
||||
assert(pattern != 0);
|
||||
|
||||
unsigned lowbit = findLowestSetBit(pattern) - 1;
|
||||
|
||||
pattern <<= 64 - bits;
|
||||
_highzeroes = 0;
|
||||
while (!(pattern & TOPBIT))
|
||||
{
|
||||
pattern <<= 1;
|
||||
_highzeroes++;
|
||||
}
|
||||
|
||||
_length = 0;
|
||||
while (pattern != TOPBIT)
|
||||
{
|
||||
unsigned interval = 0;
|
||||
do
|
||||
{
|
||||
pattern <<= 1;
|
||||
interval++;
|
||||
} while (!(pattern & TOPBIT));
|
||||
_intervals.push_back(interval);
|
||||
_length += interval;
|
||||
}
|
||||
|
||||
if (lowbit)
|
||||
{
|
||||
_lowzero = true;
|
||||
/* Note that length does *not* include this interval. */
|
||||
_intervals.push_back(lowbit + 1);
|
||||
}
|
||||
}
|
||||
|
||||
bool FluxPattern::matches(const unsigned* end, FluxMatch& match) const
|
||||
{
|
||||
const double clockDecodeThreshold =
|
||||
globalConfig()->decoder().bit_error_threshold();
|
||||
const unsigned* start = end - _intervals.size();
|
||||
unsigned candidatelength = std::accumulate(start, end - _lowzero, 0);
|
||||
if (!candidatelength)
|
||||
return false;
|
||||
match.clock = (double)candidatelength / (double)_length;
|
||||
|
||||
unsigned exactIntervals = _intervals.size() - _lowzero;
|
||||
for (unsigned i = 0; i < exactIntervals; i++)
|
||||
{
|
||||
double ii = match.clock * (double)_intervals[i];
|
||||
double ci = (double)start[i];
|
||||
double error = fabs((ii - ci) / match.clock);
|
||||
if (error > clockDecodeThreshold)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_lowzero)
|
||||
{
|
||||
double ii = match.clock * (double)_intervals[exactIntervals];
|
||||
double ci = (double)start[exactIntervals];
|
||||
double error = (ii - ci) / match.clock;
|
||||
if (error > clockDecodeThreshold)
|
||||
return false;
|
||||
}
|
||||
|
||||
match.matcher = this;
|
||||
match.intervals = _intervals.size();
|
||||
match.zeroes = _highzeroes;
|
||||
return true;
|
||||
}
|
||||
|
||||
FluxMatchers::FluxMatchers(
|
||||
const std::initializer_list<const FluxMatcher*> matchers):
|
||||
_matchers(matchers)
|
||||
{
|
||||
_intervals = 0;
|
||||
for (const auto* matcher : matchers)
|
||||
_intervals = std::max(_intervals, matcher->intervals());
|
||||
}
|
||||
|
||||
bool FluxMatchers::matches(const unsigned* intervals, FluxMatch& match) const
|
||||
{
|
||||
for (const auto* matcher : _matchers)
|
||||
{
|
||||
if (matcher->matches(intervals, match))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void FluxmapReader::seek(nanoseconds_t ns)
|
||||
{
|
||||
unsigned ticks = ns / NS_PER_TICK;
|
||||
|
||||
@@ -5,67 +5,8 @@
|
||||
#include "lib/flags.h"
|
||||
#include "protocol.h"
|
||||
|
||||
class FluxMatcher;
|
||||
class DecoderProto;
|
||||
|
||||
struct FluxMatch
|
||||
{
|
||||
const FluxMatcher* matcher;
|
||||
unsigned intervals;
|
||||
double clock;
|
||||
unsigned zeroes;
|
||||
};
|
||||
|
||||
class FluxMatcher
|
||||
{
|
||||
public:
|
||||
virtual ~FluxMatcher() {}
|
||||
|
||||
/* Returns the number of intervals matched */
|
||||
virtual bool matches(const unsigned* intervals, FluxMatch& match) const = 0;
|
||||
virtual unsigned intervals() const = 0;
|
||||
};
|
||||
|
||||
class FluxPattern : public FluxMatcher
|
||||
{
|
||||
public:
|
||||
FluxPattern(unsigned bits, uint64_t patterns);
|
||||
|
||||
bool matches(const unsigned* intervals, FluxMatch& match) const override;
|
||||
|
||||
unsigned intervals() const override
|
||||
{
|
||||
return _intervals.size();
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<unsigned> _intervals;
|
||||
unsigned _length;
|
||||
unsigned _bits;
|
||||
unsigned _highzeroes;
|
||||
bool _lowzero = false;
|
||||
|
||||
public:
|
||||
friend void test_patternconstruction();
|
||||
friend void test_patternmatching();
|
||||
};
|
||||
|
||||
class FluxMatchers : public FluxMatcher
|
||||
{
|
||||
public:
|
||||
FluxMatchers(const std::initializer_list<const FluxMatcher*> matchers);
|
||||
|
||||
bool matches(const unsigned* intervals, FluxMatch& match) const override;
|
||||
|
||||
unsigned intervals() const override
|
||||
{
|
||||
return _intervals;
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned _intervals;
|
||||
std::vector<const FluxMatcher*> _matchers;
|
||||
};
|
||||
class FluxMatcher;
|
||||
|
||||
class FluxmapReader
|
||||
{
|
||||
|
||||
100
lib/decoders/fluxpattern.cc
Normal file
100
lib/decoders/fluxpattern.cc
Normal file
@@ -0,0 +1,100 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/config.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include "lib/proto.h"
|
||||
#include "protocol.h"
|
||||
#include <numeric>
|
||||
#include <math.h>
|
||||
#include <strings.h>
|
||||
|
||||
FluxPattern::FluxPattern(unsigned bits, uint64_t pattern): _bits(bits)
|
||||
{
|
||||
const uint64_t TOPBIT = 1ULL << 63;
|
||||
|
||||
assert(pattern != 0);
|
||||
|
||||
unsigned lowbit = findLowestSetBit(pattern) - 1;
|
||||
|
||||
pattern <<= 64 - bits;
|
||||
_highzeroes = 0;
|
||||
while (!(pattern & TOPBIT))
|
||||
{
|
||||
pattern <<= 1;
|
||||
_highzeroes++;
|
||||
}
|
||||
|
||||
_length = 0;
|
||||
while (pattern != TOPBIT)
|
||||
{
|
||||
unsigned interval = 0;
|
||||
do
|
||||
{
|
||||
pattern <<= 1;
|
||||
interval++;
|
||||
} while (!(pattern & TOPBIT));
|
||||
_intervals.push_back(interval);
|
||||
_length += interval;
|
||||
}
|
||||
|
||||
if (lowbit)
|
||||
{
|
||||
_lowzero = true;
|
||||
/* Note that length does *not* include this interval. */
|
||||
_intervals.push_back(lowbit + 1);
|
||||
}
|
||||
}
|
||||
|
||||
bool FluxPattern::matches(const unsigned* end, FluxMatch& match) const
|
||||
{
|
||||
const double clockDecodeThreshold =
|
||||
globalConfig()->decoder().bit_error_threshold();
|
||||
const unsigned* start = end - _intervals.size();
|
||||
unsigned candidatelength = std::accumulate(start, end - _lowzero, 0);
|
||||
if (!candidatelength)
|
||||
return false;
|
||||
match.clock = (double)candidatelength / (double)_length;
|
||||
|
||||
unsigned exactIntervals = _intervals.size() - _lowzero;
|
||||
for (unsigned i = 0; i < exactIntervals; i++)
|
||||
{
|
||||
double ii = match.clock * (double)_intervals[i];
|
||||
double ci = (double)start[i];
|
||||
double error = fabs((ii - ci) / match.clock);
|
||||
if (error > clockDecodeThreshold)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_lowzero)
|
||||
{
|
||||
double ii = match.clock * (double)_intervals[exactIntervals];
|
||||
double ci = (double)start[exactIntervals];
|
||||
double error = (ii - ci) / match.clock;
|
||||
if (error > clockDecodeThreshold)
|
||||
return false;
|
||||
}
|
||||
|
||||
match.matcher = this;
|
||||
match.intervals = _intervals.size();
|
||||
match.zeroes = _highzeroes;
|
||||
return true;
|
||||
}
|
||||
|
||||
FluxMatchers::FluxMatchers(
|
||||
const std::initializer_list<const FluxMatcher*> matchers):
|
||||
_matchers(matchers)
|
||||
{
|
||||
_intervals = 0;
|
||||
for (const auto* matcher : matchers)
|
||||
_intervals = std::max(_intervals, matcher->intervals());
|
||||
}
|
||||
|
||||
bool FluxMatchers::matches(const unsigned* intervals, FluxMatch& match) const
|
||||
{
|
||||
for (const auto* matcher : _matchers)
|
||||
{
|
||||
if (matcher->matches(intervals, match))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
68
lib/decoders/fluxpattern.h
Normal file
68
lib/decoders/fluxpattern.h
Normal file
@@ -0,0 +1,68 @@
|
||||
#pragma once
|
||||
|
||||
#include "lib/core/utils.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/flags.h"
|
||||
#include "protocol.h"
|
||||
|
||||
class FluxMatcher;
|
||||
class DecoderProto;
|
||||
|
||||
struct FluxMatch
|
||||
{
|
||||
const FluxMatcher* matcher;
|
||||
unsigned intervals;
|
||||
double clock;
|
||||
unsigned zeroes;
|
||||
};
|
||||
|
||||
class FluxMatcher
|
||||
{
|
||||
public:
|
||||
virtual ~FluxMatcher() {}
|
||||
|
||||
/* Returns the number of intervals matched */
|
||||
virtual bool matches(const unsigned* intervals, FluxMatch& match) const = 0;
|
||||
virtual unsigned intervals() const = 0;
|
||||
};
|
||||
|
||||
class FluxPattern : public FluxMatcher
|
||||
{
|
||||
public:
|
||||
FluxPattern(unsigned bits, uint64_t patterns);
|
||||
|
||||
bool matches(const unsigned* intervals, FluxMatch& match) const override;
|
||||
|
||||
unsigned intervals() const override
|
||||
{
|
||||
return _intervals.size();
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<unsigned> _intervals;
|
||||
unsigned _length;
|
||||
unsigned _bits;
|
||||
unsigned _highzeroes;
|
||||
bool _lowzero = false;
|
||||
|
||||
public:
|
||||
friend void test_patternconstruction();
|
||||
friend void test_patternmatching();
|
||||
};
|
||||
|
||||
class FluxMatchers : public FluxMatcher
|
||||
{
|
||||
public:
|
||||
FluxMatchers(const std::initializer_list<const FluxMatcher*> matchers);
|
||||
|
||||
bool matches(const unsigned* intervals, FluxMatch& match) const override;
|
||||
|
||||
unsigned intervals() const override
|
||||
{
|
||||
return _intervals;
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned _intervals;
|
||||
std::vector<const FluxMatcher*> _matchers;
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "lib/core/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/decoders/fluxmapreader.h"
|
||||
#include "lib/decoders/fluxpattern.h"
|
||||
#include <sstream>
|
||||
|
||||
typedef std::vector<unsigned> ivector;
|
||||
|
||||
Reference in New Issue
Block a user