// ------------------------------------------------------------------------ // â„šī¸ 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 }