// ------------------------------------------------------------------------ // Project atila // Active Thing (activething.com) git.activething.com/go // // File name bweek.go // Created by DEV // Modified 21/02/2024 // // Copyright 2024 activething.com // ------------------------------------------------------------------------ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ------------------------------------------------------------------------ package bdates import "math/bits" const( BWeekDaysMon BWeekDays = 1 << iota BWeekDaysTue BWeekDaysWed BWeekDaysThu BWeekDaysFri BWeekDaysSat BWeekDaysSun _BWeekFlag BWeekDaysAll = 0x1111111 ) type ( // BWeekDays // Type: uint8 // Desc: Representa una lista de los dias de la semana // a través de un byte BWeekDays uint8 ) func (w BWeekDays) GetFlag() bool { return w&_BWeekFlag==_BWeekFlag } func (w BWeekDays) SetFlag(val bool) BWeekDays { if val { return w|_BWeekFlag } return w&^_BWeekFlag } func (w BWeekDays) SetDay (num int, val bool) BWeekDays { if num < 0 || num > 7 { return w } if val { w |= 1 << num-1 } else { w &^= 1 << num-1 } return w } func (w BWeekDays) GetDay (num int) bool { if num < 0 || num > 7 { return false } c := BWeekDays(1 << num-1) return (w&c)==c } func (w BWeekDays) Invert () BWeekDays { return ^w } func (w BWeekDays) Count () int { return bits.OnesCount8(uint8(w)) } func (w BWeekDays) List () []int { c := BWeekDays(1) r := make([]int,0,7) for i:=1; i<=7; i++ { if c&w == c { r = append(r,i) } c <<=1 } return r } func (w BWeekDays) ToSlice () []bool { c := BWeekDays(1) r := make([]bool,7) for i:=0; i<7; i++ { r[i]=c&w == c c <<=1 } return r } func (w BWeekDays) Common (dst BWeekDays) BWeekDays { return w & dst }