Classe: Mongo::Crypt::Binary Private

Herda:
Objeto
  • Objeto
mostrar tudo
Definido em:
build/ruby-driver-v2.19/lib/mongo/crypt/binary.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Um wrapper em torno do mongocrypt_binary_t, um buffer não proprietário de dados de uint-8 bytes. Cada instância binária mantém uma cópia dos dados passados para ela para manter esses dados vivos.

Recolhimento do Resumo do método de classe

Recolhimento do Resumo do método de instância

Detalhes do construtor

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

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

Ao inicializar um objeto binário com uma string ou um ponteiro,

Criar um novo objeto binário que envolva uma string de bytes

é recomendável usar #auto.from_pointer ou #auto.from_data métodos

Parâmetros:

  • de dados (string) (padrão para: nil)

    A string de dados envolta pelo buffer de bytes (opcional)

  • pointer (FFI::Pointer) (padrão para: nil)

    Um ponteiro para um objeto mongocrypt_binary_t existente



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-v2.19/lib/mongo/crypt/binary.rb', linha 39

def inicializar(dados: nada, ponteiro: nada)
  se de dados
    # Representar string de dados como array de uint-8 bytes
    bytes = de dados.descompactar('C *')

    # FFI::MemoryPointer libera memória automaticamente quando está fora do escopo
    @data_p = FFI::MemoryPointer.Novo(bytes.Tamanho)
              .write_array_of_uint8(bytes)

    # O FFI::AutoPointer usa uma estratégia de liberação personalizada para liberar automaticamente
    # o ponteiro quando esse objeto sair do escopo
    @bin = FFI::AutoPointer.Novo(
      Vinculação.mongocrypt_binary_new_from_data(@data_p, bytes.Tamanho),
      Vinculação.Método(:mongocrypt_binary_destroy)
    )
  elsif pointer
    # Se a classe Binary for usada dessa forma, significa que o ponteiro
    # para o objeto mongocrypt_binary_t subjacente está alocado em algum lugar
    # mais. Não é responsabilidade desta classe desalocar dados.
    @bin = pointer
  mais
    # O FFI::AutoPointer usa uma estratégia de liberação personalizada para liberar automaticamente
    # o ponteiro quando esse objeto sair do escopo
    @bin = FFI::AutoPointer.Novo(
      Vinculação.mongocrypt_binary_new,
      Vinculação.Método(:mongocrypt_binary_destroy)
    )
  end
end

Detalhes do método de classe

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

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Inicialize um objeto binário com uma string. O objeto Binary armazenará uma cópia da string especificada e destruirá a memória alocada quando ela sair do escopo.

Parâmetros:

  • de dados (string)

    Uma string a ser envolvida pelo objeto Binary

Retorna:



87
88
89
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/binary.rb', linha 87

def auto.from_data(de dados)
  auto.Novo(dados: de dados)
end

.from_pointer(pointer) ➤ Mongo::Crypt::Binary

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Inicialize um objeto binário de um ponteiro existente para um objeto mongocrypt_binary_t.

Parâmetros:

  • pointer (FFI::Pointer)

    Um ponteiro para um objeto mongocrypt_binary_t existente

Retorna:



76
77
78
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/binary.rb', linha 76

def auto.from_pointer(pointer)
  auto.Novo(ponteiro: pointer)
end

.wrap_string(str) 3 Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Envolve uma string com um mongocrypt_binary_t, gerando um FFI::Pointer para a estrutura encapsulada.



145
146
147
148
149
150
151
152
153
154
155
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/binary.rb', linha 145

def auto.wrap_string(str)
  binary_p = Vinculação.mongocrypt_binary_new_from_data(
    FFI::MemoryPointer.from_string(str),
    str.bytesize,
  )
  começar
    rendimento binary_p
  garantir
    Vinculação.mongocrypt_binary_destroy(binary_p)
  end
end

Detalhes do método de instância

#refFFI::Pointer

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna a referência ao objeto mongocrypt_binary_t subjacente

Retorna:

  • (FFI::Pointer)

    O objeto mongocrypt_binary_t subjacente



139
140
141
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/binary.rb', linha 139

def ref
  @bin
end

#to_s ➤ string

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna os dados armazenados como uma string

Retorna:

  • (string)

    Dados armazenados no mongocrypt_binary_t como uma string



129
130
131
132
133
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/binary.rb', linha 129

def to_s
  str_p = Vinculação.mongocrypt_binary_data(ref)
  len = Vinculação.mongocrypt_binary_ten(ref)
  str_p.read_string(len)
end

#write(data) ➤ true

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

Os dados passados não devem ocupar mais memória do que os

Substituir os dados existentes envolvidos por este objeto binário

memória original alocada para o objeto mongocrypt_binary_t subjacente. NÃO use este método, a menos que seja exigido pela libmongocrypt.

do que foi originalmente alocado ou ao gravar em um objeto que já possui dados.

Parâmetros:

  • de dados (string)

    Os novos dados de string a serem envolvidos por este objeto binário

Retorna:

  • (verdadeiro)

    Sempre verdadeiro

Aumenta:

  • (ArgumentError)

    Aumenta ao tentar escrever mais dados



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-v2.19/lib/mongo/crypt/binary.rb', linha 104

def escrever(de dados)
  se @data
    aumentar ArgumentError, 'Não é possível escrever em um binário de propriedade'
  end

  # Não é possível escrever uma string maior que o espaço alocado atualmente
  # pelo objeto mongocrypt_binary_t
  str_p = Vinculação.mongocrypt_binary_data(ref)
  len = Vinculação.mongocrypt_binary_ten(ref)

  se len < de dados.bytesize
    aumentar ArgumentError.Novo(
      "Não é possível escrever #{data.bytesize} bytes de dados em um objeto binário " +
      "que foi inicializado com #{Binding.mongocrypt_binary_ten(@bin)} bytes."
    )
  end

  str_p.put_bytes(0, de dados)

  true
end