From a39b9e5ae3e30b6df37e2f3d3497117ef8e07392 Mon Sep 17 00:00:00 2001 From: "Tsung-Han Ho (Miles Ho)" Date: Thu, 3 Jul 2025 14:46:43 +0800 Subject: [PATCH] feat: add new Bitop operations: Diff, Diff1, Andor, and One --- hack/cmds/commands.json | 6 ++- internal/cmds/gen_bitmap.go | 68 ++++++++++++++++++++++++++++++++ internal/cmds/gen_bitmap_test.go | 4 ++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/hack/cmds/commands.json b/hack/cmds/commands.json index e35fb7ee..bc381216 100644 --- a/hack/cmds/commands.json +++ b/hack/cmds/commands.json @@ -363,7 +363,11 @@ "AND", "OR", "XOR", - "NOT" + "NOT", + "DIFF", + "DIFF1", + "ANDOR", + "ONE" ] }, { diff --git a/internal/cmds/gen_bitmap.go b/internal/cmds/gen_bitmap.go index e62efa17..4be2fdb7 100644 --- a/internal/cmds/gen_bitmap.go +++ b/internal/cmds/gen_bitmap.go @@ -373,6 +373,26 @@ func (c Bitop) Not() BitopOperationNot { return (BitopOperationNot)(c) } +func (c Bitop) Diff() BitopOperationDiff { + c.cs.s = append(c.cs.s, "DIFF") + return (BitopOperationDiff)(c) +} + +func (c Bitop) Diff1() BitopOperationDiff1 { + c.cs.s = append(c.cs.s, "DIFF1") + return (BitopOperationDiff1)(c) +} + +func (c Bitop) Andor() BitopOperationAndor { + c.cs.s = append(c.cs.s, "ANDOR") + return (BitopOperationAndor)(c) +} + +func (c Bitop) One() BitopOperationOne { + c.cs.s = append(c.cs.s, "ONE") + return (BitopOperationOne)(c) +} + type BitopDestkey Incomplete func (c BitopDestkey) Key(key ...string) BitopKey { @@ -424,6 +444,42 @@ func (c BitopOperationAnd) Destkey(destkey string) BitopDestkey { return (BitopDestkey)(c) } +type BitopOperationAndor Incomplete + +func (c BitopOperationAndor) Destkey(destkey string) BitopDestkey { + if c.ks&NoSlot == NoSlot { + c.ks = NoSlot | slot(destkey) + } else { + c.ks = check(c.ks, slot(destkey)) + } + c.cs.s = append(c.cs.s, destkey) + return (BitopDestkey)(c) +} + +type BitopOperationDiff Incomplete + +func (c BitopOperationDiff) Destkey(destkey string) BitopDestkey { + if c.ks&NoSlot == NoSlot { + c.ks = NoSlot | slot(destkey) + } else { + c.ks = check(c.ks, slot(destkey)) + } + c.cs.s = append(c.cs.s, destkey) + return (BitopDestkey)(c) +} + +type BitopOperationDiff1 Incomplete + +func (c BitopOperationDiff1) Destkey(destkey string) BitopDestkey { + if c.ks&NoSlot == NoSlot { + c.ks = NoSlot | slot(destkey) + } else { + c.ks = check(c.ks, slot(destkey)) + } + c.cs.s = append(c.cs.s, destkey) + return (BitopDestkey)(c) +} + type BitopOperationNot Incomplete func (c BitopOperationNot) Destkey(destkey string) BitopDestkey { @@ -436,6 +492,18 @@ func (c BitopOperationNot) Destkey(destkey string) BitopDestkey { return (BitopDestkey)(c) } +type BitopOperationOne Incomplete + +func (c BitopOperationOne) Destkey(destkey string) BitopDestkey { + if c.ks&NoSlot == NoSlot { + c.ks = NoSlot | slot(destkey) + } else { + c.ks = check(c.ks, slot(destkey)) + } + c.cs.s = append(c.cs.s, destkey) + return (BitopDestkey)(c) +} + type BitopOperationOr Incomplete func (c BitopOperationOr) Destkey(destkey string) BitopDestkey { diff --git a/internal/cmds/gen_bitmap_test.go b/internal/cmds/gen_bitmap_test.go index df17ee21..985bc8f1 100644 --- a/internal/cmds/gen_bitmap_test.go +++ b/internal/cmds/gen_bitmap_test.go @@ -38,6 +38,10 @@ func bitmap0(s Builder) { s.Bitop().Or().Destkey("1").Key("1").Key("1").Build() s.Bitop().Xor().Destkey("1").Key("1").Key("1").Build() s.Bitop().Not().Destkey("1").Key("1").Key("1").Build() + s.Bitop().Diff().Destkey("1").Key("1").Key("1").Build() + s.Bitop().Diff1().Destkey("1").Key("1").Key("1").Build() + s.Bitop().Andor().Destkey("1").Key("1").Key("1").Build() + s.Bitop().One().Destkey("1").Key("1").Key("1").Build() s.Bitpos().Key("1").Bit(1).Start(1).End(1).Byte().Build() s.Bitpos().Key("1").Bit(1).Start(1).End(1).Byte().Cache() s.Bitpos().Key("1").Bit(1).Start(1).End(1).Bit().Build()