类:Mongo::Crypt::Binary Private

继承:
对象
  • 对象
显示全部
定义于:
构建/ruby-driver-v2.19/lib/ mongo /crypt/binary.rb

Overview

此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。

mongocrypt_binary_t 的包装器,而 mongocrypt_binary_t 是 uint- 8字节数据的非拥有缓冲区。 每个 Binary 实例都会保留传递给它的数据的副本,以使该数据保持活动状态。

类方法摘要折叠

实例方法摘要折叠

构造函数详情

#initialize(data: nil, pointer: nil) ⇒ Binary

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

使用string或指针初始化 Binary 对象时,

创建包装字节string的新 Binary 对象

建议您使用 #self.from_pointer 或 #self.from_data 方法

参数:

  • 数据 string (默认为: nil

    由字节缓冲区包装的数据string (可选)

  • 指针 ( FFI::Pointer ) (默认为: nil

    指向现有 mongocrypt_binary_t对象的指针



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/binary.rb', 第39行

def 初始化(数据: nil, 指针: nil)
  if 数据
    # 将数据string表示为 uint-8 字节的大量
    字节 = 数据.unpack(' C* ')

    # FFI::MemoryPointer 超出作用域时会自动释放内存
    @data_p = FFI::内存指针.new(字节.长度)
              .write_array_of_uint 8(字节)

    # FFI::AutoPointer 使用自定义发布策略来自动释放
    # 当此对象超出作用域时的指针
    @bin = FFI::AutoPointer.new(
      绑定.mongocrypt_binary_new_from_data(@data_p, 字节.长度),
      绑定.方法(:mongocrypt_binary_destroy)
    )
  elsif 指针
    # 如果 Binary 类以这种方式使用,则意味着该指针
    # 用于在某处分配根本的mongocrypt_binary_t对象
    # else. 此类没有责任取消数据分配。
    @bin = 指针
  else
    # FFI::AutoPointer 使用自定义发布策略来自动释放
    # 当此对象超出作用域时的指针
    @bin = FFI::AutoPointer.new(
      绑定.mongocrypt_binary_new,
      绑定.方法(:mongocrypt_binary_destroy)
    )
  end
end

类方法详细信息

from_data (data) ⇒ Mongo::Crypt::Binary

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

使用string初始化 Binary对象。 二进制对象将存储指定string的副本,并在超出范围时销毁分配的内存。

参数:

  • 数据 ( string )

    要由 Binary对象包装的string

返回:



87
88
89
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/binary.rb', 第87行

def self.from_data(数据)
  self.new(数据: 数据)
end

from_pointer (指针)→ Mongo::Crypt::Binary

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

从指向 mongocrypt_binary_t 对象的现有指针初始化二进制对象。

参数:

  • 指针 ( FFI::Pointer )

    指向现有 mongocrypt_binary_t对象的指针

返回:



76
77
78
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/binary.rb', 第76行

def self.from_pointer(指针)
  self.new(指针: 指针)
end

wrapp_string (str) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

使用 mongocrypt_binary_t 包装string ,生成指向包装结构体的 FFI::Pointer。



145
146
147
148
149
150
151
152
153
154
155
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/binary.rb', 第145行

def self.wrapp_string(str)
  binary_p = 绑定.mongocrypt_binary_new_from_data(
    FFI::内存指针.from_string(str),
    str.bytesize,
  )
  开始
    产量 binary_p
  确保
    绑定.mongocrypt_binary_destroy(binary_p)
  end
end

实例方法详细信息

# refFFI::Pointer

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回对根本的mongocrypt_binary_t对象的引用

返回:

  • ( FFI::Pointer )

    根本的mongocrypt_binary_t对象



139
140
141
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/binary.rb', 第139行

def ref
  @bin
end

# to_sstring

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回以string形式存储的数据

返回:

  • ( string )

    以string形式存储在 mongocrypt_binary_t 中的数据



129
130
131
132
133
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/binary.rb', 第129行

def to_s
  str_p = 绑定.mongocrypt_binary_data(ref)
  len = 绑定.mongocrypt_binary_len(ref)
  str_p.read_string(len)
end

# 写入 (data) ⇒ true

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

传入的数据占用的内存不得超过

覆盖由此 Binary 对象包装的现有数据

分配给底层 mongocrypt_binary_t 对象的原始内存。 除非 libmongocrypt 要求,否则请勿使用此方法。

超过最初分配的大小或写入已拥有数据的对象时。

参数:

  • 数据 ( string )

    此二进制对象要包装的新string数据

返回:

  • ( true )

    始终为 true

引发:

  • ( ArgumentError )

    尝试写入更多数据时引发



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/binary.rb', 第104行

def (数据)
  if @data
    提高 ArgumentError, '无法写入拥有的二进制文件'
  end

  #写入的string不能长于当前分配的空间
  # 通过 mongocrypt_binary_t对象
  str_p = 绑定.mongocrypt_binary_data(ref)
  len = 绑定.mongocrypt_binary_len(ref)

  if len < 数据.bytesize
    提高 ArgumentError.new(
      " Cannot write #{ data . bytesize } bytes of data to a Binary object " +
      使用#{ Binding . mongocrypt_binary_len ( @bin ) }字节初始化。 
    )
  end

  str_p.put_bytes(0, 数据)

  true
end