You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
2.3 KiB

// ------------------------------------------------------------------------
// 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 }

Powered by TurnKey Linux.