FastLED 3.9.7
Loading...
Searching...
No Matches
qfx.h
1#pragma once
2
3#include <stdint.h>
4#include "fl/namespace.h"
5
7
8
11
16template<class T, int F, int I> class qfx {
17 T i:I;
18 T f:F;
19public:
21 qfx(float fx) { i = fx; f = (fx-i) * (1<<F); }
23 qfx(uint8_t _i, uint8_t _f) {i=_i; f=_f; }
24
26 uint32_t operator*(uint32_t v) { return (v*i) + ((v*f)>>F); }
28 uint16_t operator*(uint16_t v) { return (v*i) + ((v*f)>>F); }
30 int32_t operator*(int32_t v) { return (v*i) + ((v*f)>>F); }
32 int16_t operator*(int16_t v) { return (v*i) + ((v*f)>>F); }
33#if defined(FASTLED_ARM) | defined(FASTLED_RISCV) | defined(FASTLED_APOLLO3)
35 int operator*(int v) { return (v*i) + ((v*f)>>F); }
36#endif
37};
38
39template<class T, int F, int I> static uint32_t operator*(uint32_t v, qfx<T,F,I> & q) { return q * v; }
40template<class T, int F, int I> static uint16_t operator*(uint16_t v, qfx<T,F,I> & q) { return q * v; }
41template<class T, int F, int I> static int32_t operator*(int32_t v, qfx<T,F,I> & q) { return q * v; }
42template<class T, int F, int I> static int16_t operator*(int16_t v, qfx<T,F,I> & q) { return q * v; }
43#if defined(FASTLED_ARM) | defined(FASTLED_RISCV) | defined(FASTLED_APOLLO3)
44template<class T, int F, int I> static int operator*(int v, qfx<T,F,I> & q) { return q * v; }
45#endif
46
55
57
Template class for representing fractional ints.
Definition qfx.h:16
qfx(uint8_t _i, uint8_t _f)
Constructor, storing a fractional int directly.
Definition qfx.h:23
int16_t operator*(int16_t v)
Multiply the fractional int by a value.
Definition qfx.h:32
uint16_t operator*(uint16_t v)
Multiply the fractional int by a value.
Definition qfx.h:28
uint32_t operator*(uint32_t v)
Multiply the fractional int by a value.
Definition qfx.h:26
qfx(float fx)
Constructor, storing a float as a fractional int.
Definition qfx.h:21
int32_t operator*(int32_t v)
Multiply the fractional int by a value.
Definition qfx.h:30
qfx< uint8_t, 4, 4 > q44
A 4.4 integer (4 bits integer, 4 bits fraction)
Definition qfx.h:48
qfx< uint8_t, 6, 2 > q62
A 6.2 integer (6 bits integer, 2 bits fraction)
Definition qfx.h:50
qfx< uint16_t, 12, 4 > q124
A 12.4 integer (12 bits integer, 4 bits fraction)
Definition qfx.h:54
qfx< uint16_t, 8, 8 > q88
A 8.8 integer (8 bits integer, 8 bits fraction)
Definition qfx.h:52
FASTLED_FORCE_INLINE CRGB operator*(const CRGB &p1, uint8_t d)
Multiply each of the channels by a constant, saturating each channel at 0xFF.
Definition crgb.hpp:221
Implements the FastLED namespace macros.
#define FASTLED_NAMESPACE_END
End of the FastLED namespace.
Definition namespace.h:16
#define FASTLED_NAMESPACE_BEGIN
Start of the FastLED namespace.
Definition namespace.h:14