Skip to content

Commit

Permalink
更新readme
Browse files Browse the repository at this point in the history
  • Loading branch information
lvyahui8 committed Dec 17, 2023
1 parent dcdca92 commit ed7383b
Showing 1 changed file with 57 additions and 1 deletion.
58 changes: 57 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,9 @@ func TestHelpers(t *testing.T) {
}
```

### 进阶:复杂枚举初始化
### 更多特性支持

#### 复杂枚举初始化

枚举struct 实现Init方法即可,NewEnum方法中的args参数,会完整透传给Init方法,注意,**Init方法需要将receiver返回以确保初始化生效**

Expand Down Expand Up @@ -137,6 +139,60 @@ var (
)
```

#### EnumSet

api声明
```go
// EnumSet 枚举set,一般在枚举非常多时使用
type EnumSet[E EnumDefinition] interface {
// Stringer 支持标准输出及格式化
fmt.Stringer
// Marshaler 支持json序列化
json.Marshaler
// Add 往set添加元素,添加成功则返回true,如果已经存在则返回false
Add(e E) bool
// AddRange 按照枚举的序数,连续添加一段枚举,返回实际添加的数量(排除已经存在的)
AddRange(begin, end E) int
// Remove 删除元素,删除成功则返回true,如果元素原本不存在则返回false
Remove(e E) bool
// RemoveRange 按照枚举的序数,连续删除一段枚举,返回实际删除的数量(排除原本不存在的)
RemoveRange(begin, end E) int
// IsEmpty set是否为空
IsEmpty() bool
// Clear 清理set
Clear()
// Len set内当前的枚举数量
Len() int
// Contains 是否包含指定的枚举,只要有1个不存在则返回false
Contains(enums ...E) bool
// ContainsAll 判断是否包含另外一个enumSet(子集关系)
ContainsAll(set EnumSet[E]) bool
// Equals 判断两个EnumSet是否相同
Equals(set EnumSet[E]) bool
// Each set迭代方法, f方法如果返回false,则中止迭代
Each(f func(e E) bool)
// Names 返回set中已有枚举的Name表示
Names() []string
// Clone 深拷贝一份set
Clone() EnumSet[E]
}
```

EnumSet usage

```go
stmtSet := NewUnsafeEnumSet[Statement]()

stmtSet.Add(Decl)
stmtSet.IsEmpty()
stmtSet.Contains(Decl)
stmtSet.Len() == 1
stmtSet.AddRange(Comm, Range)
stmtSet.Remove(Decl)
```

完整例子请看 [enum_set_test](enum_set_test.go)

### ValueOf性能测试

不用担心任何性能问题,反射调用基本集中在NewEnum方法中,其他方法尽量避免反射调用。
Expand Down

0 comments on commit ed7383b

Please sign in to comment.