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.

145 lines
2.8 KiB

// ------------------------------------------------------------------------
// ℹ️ Project active3
// Active Thing (activething.com) git.activething.com/go
//
// File name att.go
// ✍️ Created by DEV
// 📅 Modified 01/05/2024
//
// 🔒 COPYRIGHT 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 acache
import "math/bits"
const(
KindAny Kind = 1 << iota
KindBool
KindBinary
KindString
KindInt
KindUint
KindFloat
KindTime
KindDuration
KindError
KindReflect
KindDefer Kind = 16384
)
const(
KindDeferAny = KindDefer|KindAny
KindDeferBool = KindDefer|KindBool
KindDeferString = KindDefer|KindString
KindDeferBinary = KindDefer|KindBinary
KindDeferInt = KindDefer|KindInt
KindDeferUint = KindDefer|KindUint
KindDeferFloat = KindDefer|KindFloat
KindDeferTime = KindDefer|KindTime
KindDeferDuration = KindDefer|KindDuration
KindDeferError = KindDefer|KindError
KindDeferReflect = KindDefer|KindReflect
)
type (
Kind uint16
)
func (k Kind) IsAny() bool {
return k&KindAny != 0 }
func (k Kind) IsBool() bool {
return k&KindBool != 0 }
func (k Kind) IsInt() bool {
return k&KindInt != 0 }
func (k Kind) IsUint() bool {
return k&KindUint != 0 }
func (k Kind) IsFloat() bool {
return k&KindFloat != 0 }
func (k Kind) IsString() bool {
return k&KindString != 0 }
func (k Kind) IsTime() bool {
return k&KindTime != 0 }
func (k Kind) IsDuration() bool {
return k&KindDuration != 0 }
func (k Kind) IsBinary() bool {
return k&KindBinary != 0 }
func (k Kind) IsError() bool {
return k&KindError != 0 }
func (k Kind) IsReflect() bool {
return k&KindReflect != 0 }
func (k Kind) IsDefer() bool {
return k&KindDefer != 0 }
func (k Kind) Count () int {
return bits.OnesCount16(uint16(k)) }
func (k Kind) Kinds () []Kind {
if k == 0 {
return nil
}
var ls []Kind
c := Kind(1)
for i:=0; i< kindBits; i++ {
c = 1 << i
if c&k != 0 {
ls = append(ls,c)
}
}
return ls
}
func (k Kind) KindNames () []string {
if k==0 {
return []string{""}
}
var ls []string
c := Kind(1)
for i:=0; i< kindBits; i++ {
c = 1 << i
if c&k != 0 {
ls = append(ls, g.kindNames[i])
}
}
return ls
}

Powered by TurnKey Linux.