@@ -199,8 +199,6 @@ enum AxisEnum : uint8_t {
199
199
, ALL_AXES_ENUM = 0xFE , NO_AXIS_ENUM = 0xFF
200
200
};
201
201
202
- typedef bits_t (NUM_AXIS_ENUMS) axis_bits_t;
203
-
204
202
//
205
203
// Loop over axes
206
204
//
@@ -789,6 +787,156 @@ struct XYZEval {
789
787
FI bool operator !=(const XYZEval<T> &rs) const { return !operator ==(rs); }
790
788
};
791
789
790
+ #include < string.h> // for memset
791
+
792
+ class AxisBits ;
793
+
794
+ class AxisBits {
795
+ public:
796
+ typedef bits_t (NUM_AXIS_ENUMS) el;
797
+ union {
798
+ el bits;
799
+ struct {
800
+ union {
801
+ bool NUM_AXIS_LIST (x:1 , y:1 , z:1 , i:1 , j:1 , k:1 , u:1 , v:1 , w:1 );
802
+ bool NUM_AXIS_LIST (X:1 , Y:1 , Z:1 , I:1 , J:1 , K:1 , U:1 , V:1 , W:1 );
803
+ bool NUM_AXIS_LIST (a:1 , b:1 , c:1 , _i:1 , _j:1 , _k:1 , _u:1 , _v:1 , _w:1 );
804
+ bool NUM_AXIS_LIST (A:1 , B:1 , C:1 , _I:1 , _J:1 , _K:1 , _U:1 , _V:1 , _W:1 );
805
+ };
806
+ #if HAS_EXTRUDERS
807
+ union { bool e:1 ; bool e0 :1 ; };
808
+ #define _EN_ITEM (N ) bool e##N:1 ;
809
+ REPEAT_S (1 ,EXTRUDERS,_EN_ITEM)
810
+ #undef _EN_ITEM
811
+ #endif
812
+ #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX)
813
+ bool hx:1 , hy:1 , hz:1 ;
814
+ #endif
815
+ };
816
+ };
817
+
818
+ AxisBits () { bits = 0 ; }
819
+
820
+ // Constructor, setter, and operator= for bit mask
821
+ AxisBits (const el p) { set (p); }
822
+ void set (const el p) { bits = el (p); }
823
+ FI AxisBits& operator =(const el p) { set (p); return *this ; }
824
+
825
+ #define MSET (pE,pX,pY,pZ,pI,pJ,pK,pU,pV,pW ) LOGICAL_AXIS_CODE(e=pE, x=pX, y=pY, z=pZ, i=pI, j=pJ, k=pK, u=pU, v=pV, w=pW)
826
+
827
+ // Constructor, setter, and operator= for XYZE type
828
+ AxisBits (const xyze_bool_t &p) { set (p); }
829
+ void set (const xyze_bool_t &p) {
830
+ MSET (p.e , p.x , p.y , p.z , p.i , p.j , p.k , p.u , p.v , p.w );
831
+ }
832
+ FI AxisBits& operator =(const xyze_bool_t &p) { set (p); return *this ; }
833
+
834
+ // Constructor, setter, and operator= for bool array
835
+ AxisBits (const bool (&p)[LOGICAL_AXES]) { set (p); }
836
+ void set (const bool (&p)[LOGICAL_AXES]) {
837
+ MSET (p[E_AXIS], p[X_AXIS], p[Y_AXIS], p[Z_AXIS],
838
+ p[I_AXIS], p[J_AXIS], p[K_AXIS],
839
+ p[U_AXIS], p[V_AXIS], p[W_AXIS]);
840
+ }
841
+ FI AxisBits& operator =(const bool (&p)[LOGICAL_AXES]) { set (p); return *this ; }
842
+
843
+ // Constructor, setter, and operator= for undersized bool arrays
844
+ #if LOGICAL_AXES > 1
845
+ AxisBits (const bool (&p)[1]) { set (p); }
846
+ FI void set (const bool (&p)[1]) {
847
+ MSET (0 , p[X_AXIS], 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
848
+ }
849
+ FI AxisBits& operator =(const bool (&p)[1]) { set (p); return *this ; }
850
+ #endif
851
+ #if LOGICAL_AXES > 2
852
+ AxisBits (const bool (&p)[2]) { set (p); }
853
+ FI void set (const bool (&p)[2]) {
854
+ MSET (0 , p[X_AXIS], p[Y_AXIS], 0 , 0 , 0 , 0 , 0 , 0 , 0 );
855
+ }
856
+ FI AxisBits& operator =(const bool (&p)[2]) { set (p); return *this ; }
857
+ #endif
858
+ #if LOGICAL_AXES > 3
859
+ AxisBits (const bool (&p)[3]) { set (p); }
860
+ FI void set (const bool (&p)[3]) {
861
+ MSET (0 , p[X_AXIS], p[Y_AXIS], p[Z_AXIS], 0 , 0 , 0 , 0 , 0 , 0 );
862
+ }
863
+ FI AxisBits& operator =(const bool (&p)[3]) { set (p); return *this ; }
864
+ #endif
865
+ #if LOGICAL_AXES > 4
866
+ AxisBits (const bool (&p)[4]) { set (p); }
867
+ FI void set (const bool (&p)[4]) {
868
+ MSET (0 , p[X_AXIS], p[Y_AXIS], p[Z_AXIS], p[I_AXIS], 0 , 0 , 0 , 0 , 0 );
869
+ }
870
+ FI AxisBits& operator =(const bool (&p)[4]) { set (p); return *this ; }
871
+ #endif
872
+ #if LOGICAL_AXES > 5
873
+ AxisBits (const bool (&p)[5]) { set (p); }
874
+ FI void set (const bool (&p)[5]) {
875
+ MSET (0 , p[X_AXIS], p[Y_AXIS], p[Z_AXIS], p[I_AXIS], p[J_AXIS], 0 , 0 , 0 , 0 );
876
+ }
877
+ FI AxisBits& operator =(const bool (&p)[5]) { set (p); return *this ; }
878
+ #endif
879
+ #if LOGICAL_AXES > 6
880
+ AxisBits (const bool (&p)[6]) { set (p); }
881
+ FI void set (const bool (&p)[6]) {
882
+ MSET (0 , p[X_AXIS], p[Y_AXIS], p[Z_AXIS], p[I_AXIS], p[J_AXIS], p[K_AXIS], 0 , 0 , 0 );
883
+ }
884
+ FI AxisBits& operator =(const bool (&p)[6]) { set (p); return *this ; }
885
+ #endif
886
+ #if LOGICAL_AXES > 7
887
+ AxisBits (const bool (&p)[7]) { set (p); }
888
+ FI void set (const bool (&p)[7]) {
889
+ MSET (0 , p[X_AXIS], p[Y_AXIS], p[Z_AXIS], p[I_AXIS], p[J_AXIS], p[K_AXIS], p[U_AXIS], 0 , 0 );
890
+ }
891
+ FI AxisBits& operator =(const bool (&p)[7]) { set (p); return *this ; }
892
+ #endif
893
+ #if LOGICAL_AXES > 8
894
+ AxisBits (const bool (&p)[8]) { set (p); }
895
+ FI void set (const bool (&p)[8]) {
896
+ MSET (0 , p[X_AXIS], p[Y_AXIS], p[Z_AXIS], p[I_AXIS], p[J_AXIS], p[K_AXIS], p[U_AXIS], p[V_AXIS], 0 );
897
+ }
898
+ FI AxisBits& operator =(const bool (&p)[8]) { set (p); return *this ; }
899
+ #endif
900
+ #if LOGICAL_AXES > 9
901
+ AxisBits (const bool (&p)[9]) { set (p); }
902
+ FI void set (const bool (&p)[9]) {
903
+ MSET (0 , p[X_AXIS], p[Y_AXIS], p[Z_AXIS], p[I_AXIS], p[J_AXIS], p[K_AXIS], p[U_AXIS], p[V_AXIS], p[W_AXIS]);
904
+ }
905
+ FI AxisBits& operator =(const bool (&p)[9]) { set (p); return *this ; }
906
+ #endif
907
+ #undef MSET
908
+
909
+ FI const bool toggle (const AxisEnum n) { return TBI (bits, n); }
910
+
911
+ // Accessor via an AxisEnum (or any integer) [index]
912
+ FI const bool operator [](const int n) const { return TEST (bits, n); }
913
+ FI const bool operator [](const AxisEnum n) const { return TEST (bits, n); }
914
+
915
+ FI AxisBits& operator |=(const el &p) { bits |= el (p); return *this ; }
916
+ FI AxisBits& operator &=(const el &p) { bits &= el (p); return *this ; }
917
+ FI AxisBits& operator ^=(const el &p) { bits ^= el (p); return *this ; }
918
+
919
+ FI AxisBits& operator |=(const AxisBits &p) { bits |= p.bits ; return *this ; }
920
+ FI AxisBits& operator &=(const AxisBits &p) { bits &= p.bits ; return *this ; }
921
+ FI AxisBits& operator ^=(const AxisBits &p) { bits ^= p.bits ; return *this ; }
922
+
923
+ FI bool operator ==(const AxisBits &p) const { return p.bits == bits; }
924
+ FI bool operator !=(const AxisBits &p) const { return p.bits != bits; }
925
+
926
+ FI el operator |(const el &p) const { return bits | el (p); }
927
+ FI el operator &(const el &p) const { return bits & el (p); }
928
+ FI el operator ^(const el &p) const { return bits ^ el (p); }
929
+
930
+ FI AxisBits operator |(const AxisBits &p) const { return AxisBits (bits | p.bits ); }
931
+ FI AxisBits operator &(const AxisBits &p) const { return AxisBits (bits & p.bits ); }
932
+ FI AxisBits operator ^(const AxisBits &p) const { return AxisBits (bits ^ p.bits ); }
933
+
934
+ FI operator bool () const { return !!bits; }
935
+ FI operator uint16_t () const { return uint16_t (bits & 0xFFFF ); }
936
+ FI operator uint32_t () const { return uint32_t (bits); }
937
+
938
+ };
939
+
792
940
#undef _RECIP
793
941
#undef _ABS
794
942
#undef _LS
0 commit comments