zoukankan      html  css  js  c++  java
  • compare.go


    package clientv3

    import (
        pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
    )

    type CompareTarget int
    type CompareResult int

    const (
        CompareVersion CompareTarget = iota
        CompareCreated
        CompareModified
        CompareValue
    )

    type Cmp pb.Compare

    func Compare(cmp Cmp, result string, v interface{}) Cmp {
        var r pb.Compare_CompareResult

        switch result {
        case "=":
            r = pb.Compare_EQUAL
        case "!=":
            r = pb.Compare_NOT_EQUAL
        case ">":
            r = pb.Compare_GREATER
        case "<":
            r = pb.Compare_LESS
        default:
            panic("Unknown result op")
        }

        cmp.Result = r
        switch cmp.Target {
        case pb.Compare_VALUE:
            val, ok := v.(string)
            if !ok {
                panic("bad compare value")
            }
            cmp.TargetUnion = &pb.Compare_Value{Value: []byte(val)}
        case pb.Compare_VERSION:
            cmp.TargetUnion = &pb.Compare_Version{Version: mustInt64(v)}
        case pb.Compare_CREATE:
            cmp.TargetUnion = &pb.Compare_CreateRevision{CreateRevision: mustInt64(v)}
        case pb.Compare_MOD:
            cmp.TargetUnion = &pb.Compare_ModRevision{ModRevision: mustInt64(v)}
        default:
            panic("Unknown compare type")
        }
        return cmp
    }

    func Value(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_VALUE}
    }

    func Version(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_VERSION}
    }

    func CreateRevision(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_CREATE}
    }

    func ModRevision(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_MOD}
    }

    func mustInt64(val interface{}) int64 {
        if v, ok := val.(int64); ok {
            return v
        }
        if v, ok := val.(int); ok {
            return int64(v)
        }
        panic("bad value")
    }

  • 相关阅读:
    利用NewID()生成随机数
    ie下取得iframe里面内容
    [转]linux下动态库安装问题
    【转】基于OpenCV的人脸识别设计方案
    [转]Vim中的记录功能
    [转]opencv中facedetect例子浅析
    [转]vc中 error LNK2001:unresolved external symbol _WinMain@16的解决方法
    转VS2010解决方案转换到VS2008
    JavaScript面向对象程序设计(8): 优雅的封装还是执行的效率?
    用DLL生成LIB文件
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452671.html
Copyright © 2011-2022 走看看