Clase: Mongo::Crypt::Binary Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Definido en:
lib/mongo/crypt/binary.rb

Overview

Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.

Un contenedor alrededor de mongocrypt_binary_t, un búfer no propietario de datos de bytes de8 uint. Cada instancia de Binario conserva una copia de los datos que se le hayan pasado para asegurarse de que los datos se mantengan disponibles.

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

Detalles del Constructor

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

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Al inicializar un objeto Binario con un string o un puntero,

Crea un nuevo objeto binario que envuelva una string de bytes

se recomienda que utilices #self.from_pointer o #self.from_data métodos

Parámetros:

  • Datos (string) (valor por defecto: nil)

    La string de datos envuelta por el búfer de bytes (opcional)

  • puntero (FFI::Pointer) (valor por defecto: nil)

    Un puntero a un objeto mongocrypt_binary_t existente



37
38
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
# Archivo 'lib/mongo/crypt/binary.rb', línea 37

def inicializar(datos: nulo, puntero: nulo)
  si Datos
    # Representar la data string como un arreglo de bytes uint-8
    bytes = Datos.desempaquetar('C*')

    # FFI::MemoryPointer libera automáticamente la memoria cuando sale del alcance
    @data_p = FFI::MemoryPointer.Nuevo(bytes.longitud)
                                .escribir_array_de_uint8(bytes)

    # FFI::AutoPointer utiliza una estrategia de liberación personalizada para liberar automáticamente
    # el puntero una vez que este objeto salga del alcance
    @bin = FFI::Apuntador automático.Nuevo(
      Vinculante.mongocrypt_binary_new_from_data(@data_p, bytes.longitud),
      Vinculante.Método(destroy_binary_mongocrypt)
    )
  elsif puntero
    # Si se utiliza la clase Binary de esta forma, significa que el puntero
    # para el objeto subyacente mongocrypt_binary_t se asigna en algún lugar
    # else. No es responsabilidad de esta clase desasignar datos.
    @bin = puntero
  else
    # FFI::AutoPointer utiliza una estrategia de liberación personalizada para liberar automáticamente
    # el puntero una vez que este objeto salga del alcance
    @bin = FFI::Apuntador automático.Nuevo(
      Vinculante.mongocrypt_binary_new,
      Vinculante.Método(destroy_binary_mongocrypt)
    )
  end
end

Detalles del método de clase

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

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Inicializa un objeto binario con una string. El objeto Binario almacenará una copia de la string especificada y destruirá la memoria asignada cuando salga del alcance.

Parámetros:

  • Datos (string)

    Una string que debe ser envuelta por el objeto Binary

Devuelve:



85
86
87
# Archivo 'lib/mongo/crypt/binary.rb', línea 85

def sí mismo.from_data(Datos)
  Nuevo(datos: Datos)
end

.from_pointer(apuntador) ⇒ Mongo::Crypt::Binary

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Inicializa un objeto binario desde un puntero existente a un objeto mongocrypt_binary_t.

Parámetros:

  • puntero (FFI::Pointer)

    Un puntero a un objeto mongocrypt_binary_t existente

Devuelve:



74
75
76
# Archivo 'lib/mongo/crypt/binary.rb', línea 74

def sí mismo.from_pointer(puntero)
  Nuevo(puntero: puntero)
end

.wrap_string(str) ⇒ Object

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Envuelve un String con un mongocrypt_binary_t, produciendo un FFI::Pointer a la estructura envuelta.



141
142
143
144
145
146
147
148
149
150
151
# Archivo 'lib/mongo/crypt/binary.rb', línea 141

def sí mismo.wrap_string(str)
  binario_p = Vinculante.mongocrypt_binary_new_from_data(
    FFI::MemoryPointer.from_string(str),
    str.bytesize
  )
  begin
    rendimiento binario_p
  asegurar
    Vinculante.mongocrypt_binary_destroy(binario_p)
  end
end

Detalles del método de instancia

#refFFI::Pointer

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve la referencia al objeto subyacente mongocrypt_binary_t

Devuelve:

  • (FFI::Pointer)

    El objeto mongocrypt_binary_t subyacente



135
136
137
# Archivo 'lib/mongo/crypt/binary.rb', línea 135

def ref
  @bin
end

#to_sString

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve los datos almacenados como una string

Devuelve:

  • (string)

    Datos almacenados en el mongocrypt_binary_t como una string



125
126
127
128
129
# Archivo 'lib/mongo/crypt/binary.rb', línea 125

def to_s
  str_p = Vinculante.get_binary_data_direct(ref)
  len = Vinculante.get_binary_len_direct(ref)
  str_p.read_string(len)
end

#guardar(datos) ⇒ true

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Los datos ingresados no deben ocupar más memoria que la

Sobrescribir los datos existentes cubiertos por este objeto binario

memoria original asignada al objeto subyacente mongocrypt_binary_t. NO utilizes este método a menos que así lo requiera libmongocrypt.

de lo que se asignó originalmente o al escribir en un objeto que ya posee datos.

Parámetros:

  • Datos (string)

    El nuevo string que se va a envolver en este objeto binario

Devuelve:

  • (cierto)

    Siempre cierto

Aumenta:

  • (ArgumentError)

    Se genera al intentar guardar más datos



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Archivo 'lib/mongo/crypt/binary.rb', línea 102

def guardar(Datos)
  propagar ArgumentError, 'No se puede guardar en un binario propio' si @data

  # No se puede escribir una string más larga que el espacio actualmente asignado
  # por el objeto mongocrypt_binary_t
  str_p = Vinculante.get_binary_data_direct(ref)
  len = Vinculante.get_binary_len_direct(ref)

  si len < Datos.bytesize
    propagar ArgumentError.Nuevo(
      "No se puede guardar #{data.bytesize} bytes de datos en un objeto Binario " +
      "que se inicializó con #{Binding.get_binary_len_direct(@bin)} bytes."
    )
  end

  str_p.put_bytes(0, Datos)

  true
end