Aleph-w  1.9
General library for algorithms and data structures
Aleph::BitArray Class Reference

#include <bitArray.H>

Public Types

using Item_Type = unsigned char
 

Public Member Functions

 BitArray (const size_t dim=0)
 
void reserve (size_t dim)
 
size_t size () const noexcept
 Retorna la dimensión del arreglo de bits.
 
void set_size (const size_t sz)
 Reajusta la dimensión del arreglo.
 
BitProxy operator[] (const size_t i) const noexcept
 
BitProxy operator[] (const size_t i) noexcept
 
int read_bit_ne (const size_t i) const noexcept
 
int read_bit (const size_t i) const
 
int operator() (const size_t i) const
 
void write_bit (const size_t i, const unsigned int value)
 
int read (const size_t i) const
 
void write (const size_t i, const unsigned int value)
 
int fast_read (const size_t i) const noexcept
 
void fast_write (const size_t i, const unsigned int value)
 
void push (const unsigned int value)
 Inserta al final del arreglo el valor value.
 
void pop ()
 Elimina el último bit del arreglo.
 
void empty () noexcept
 Elimina todos los bits insertados.
 
 BitArray (const BitArray &array)
 
void swap (BitArray &array) noexcept
 
 BitArray (BitArray &&array) noexcept
 
BitArrayoperator= (BitArray &&array) noexcept
 
DynList< char > bits_list ()
 Lo convierte a una lista.
 
BitArrayoperator= (const BitArray &array)
 
void save (std::ostream &output)
 
void load (std::istream &input)
 
 BitArray (std::ifstream &input)
 
void save_in_array_of_chars (const string &name, std::ostream &output)
 
void load_from_array_of_chars (const unsigned char str[], const size_t num_bits)
 
void left_shift (const size_t n=1) noexcept
 
void right_shift (const size_t n=1) noexcept
 
void dyn_left_shift (const size_t n=1)
 
void dyn_right_shift (const size_t n=1)
 
void circular_left_shift (const size_t n=1) noexcept
 
void circular_right_shift (const size_t n=1) noexcept
 
template<typename T >
void set_num (T n)
 
void set_num (const char &c)
 
void set_num (const short &c)
 
void set_num (const int &c)
 
void set_num (const long &c)
 
long get_num () noexcept
 
void set_bit_str (const std::string &str)
 
std::string get_bit_str () const
 
 BitArray (const unsigned char str[], const size_t num_bits)
 
BitArrayoperator|= (const BitArray &rhs)
 
BitArrayoperator&= (const BitArray &rhs)
 
template<class Operation >
bool traverse (Operation &operation) const noexcept(noexcept(operation))
 
template<class Operation >
bool traverse (Operation &operation) noexcept(noexcept(operation))
 
template<class Operation >
bool traverse (Operation &&operation=Operation()) const noexcept(noexcept(operation))
 
template<class Operation >
bool traverse (Operation &&operation=Operation()) noexcept(noexcept(operation))
 
 Functional_Methods (unsigned short)
 
 Generic_Items (unsigned char)
 
 STL_ALEPH_ITERATOR (BitArray)
 

Friends

ostream & operator<< (ostream &out, const BitArray &array)
 
BitArray operator| (const BitArray &op1, const BitArray &op2)
 
BitArray operator& (const BitArray &op1, const BitArray &op2)
 

Detailed Description

Arreglo contiguo de bits.

BitArray define una arreglo contiguo de bits. El consumo de memoria es proporcional a la n/8; donde n es la cantidad de bits que se desean manejar.

El arreglo es dinámico, lo que implica que éste puede expandirse dinámicamente según la necesidad.

El acceso al i-ésimo bit puede realizarse mediante el operador []. Sin embargo, puesto que esta clase de acceso está implementada mediante una clase proxy, el acceso puede fallar en algunas expresiones donde el compilador no logre efectuar las transformaciones de tipos adecuadas.

Author
Alejandro Mujica
Leandro Rabindranath Leon

Constructor & Destructor Documentation

◆ BitArray() [1/4]

Aleph::BitArray::BitArray ( const size_t  dim = 0)
inline

Constructor de arreglo de dim bits.

Parameters
[in]dimcantidad de bits. Por omisión es 256.
Exceptions
bad_allocsi no hay suficiente memoria para un bloque continuo de dim/8 bytes.
+ Here is the call graph for this function:

◆ BitArray() [2/4]

Aleph::BitArray::BitArray ( const BitArray array)
inline

Constructor copia.

Instancia un arreglo de bits copia exacta de array.

Parameters
[in]arrayel arreglo de bits a ser copiado.
Exceptions
bad_allocsi no hay suficiente memoria para un bloque continuo de dim/8 bytes.
+ Here is the call graph for this function:

◆ BitArray() [3/4]

Aleph::BitArray::BitArray ( std::ifstream &  input)
inline

Construye un nuevo arreglo de bits a partir de un archivo construido mediante el método save().

◆ BitArray() [4/4]

Aleph::BitArray::BitArray ( const unsigned char  str[],
const size_t  num_bits 
)
inline

Construye un nuevo arreglo de bits a partir de un arreglo de caracteres previamente generado con load_from_array_of_chars

+ Here is the call graph for this function:

Member Function Documentation

◆ circular_left_shift()

void Aleph::BitArray::circular_left_shift ( const size_t  n = 1)
inlinenoexcept

Desplaza los bits n posiciones a la izquierda circularmente.

Los bits son desplazados sin perderse ninguno, los n primeros bits pasan a ocupar las últimas n posiciones del arreglo.

Parameters
[in]nla cantidad de posiciones que se van a desplazar los bits.
+ Here is the call graph for this function:

◆ circular_right_shift()

void Aleph::BitArray::circular_right_shift ( const size_t  n = 1)
inlinenoexcept

Desplaza los bits n posiciones a la derecha circularmente.

Los bits son desplazados sin perderse ninguno, los últimos n bits pasan a ocupar las primeras n posiciones del arreglo.

Parameters
[in]nla cantidad de posiciones que se van a desplazar los bits.
+ Here is the call graph for this function:

◆ dyn_left_shift()

void Aleph::BitArray::dyn_left_shift ( const size_t  n = 1)
inline

Desplaza los bits n posiciones a la izquierda dinámicamente.

Los bits son desplazados sin perderse ninguno y el arreglo crece agregando n ceros a la derecha.

Parameters
[in]nla cantidad de posiciones que se van a desplazar los bits.

◆ dyn_right_shift()

void Aleph::BitArray::dyn_right_shift ( const size_t  n = 1)
inline

Desplaza los bits n posiciones a la derecha dinámicamente.

Los bits son desplazados sin perderse ninguno y el arreglo decrece eliminando los n ceros que quedarían a la izquierda

Parameters
[in]nla cantidad de posiciones que se van a desplazar los bits.
+ Here is the call graph for this function:

◆ left_shift()

void Aleph::BitArray::left_shift ( const size_t  n = 1)
inlinenoexcept

Desplaza los bits n posiciones a la izquierda.

Los bits son desplazados y se considera al arreglo de tamaño fijo, es decir, los n primeros bits se pierden.

Parameters
[in]nla cantidad de posiciones que se van a desplazar los bits.

◆ load()

void Aleph::BitArray::load ( std::istream &  input)
inline

Carga desde un archivo un arreglo de bits.

load(input) toma el archivo abierto en input, previamente guardado con el método load(), y restaura el arreglo al valro guardado.

Parameters
[in]inputstream de entrada donde se encuentra fguarado el arreglo y que debe haber sido previamente guardado con save().
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ load_from_array_of_chars()

void Aleph::BitArray::load_from_array_of_chars ( const unsigned char  str[],
const size_t  num_bits 
)
inline

Lee un arreglo de bits guardado en un arreglo de caracteres.

load_from_array_of_chars(str, num_bits) toma un arreglo str, previamente generado con save_in_array_of_chars, de num_bits de largo, y lo carga.

Parameters
[in]strel arreglo de caracteres donde se encuentra el de bits.
[in]num_bitsla cantidad de bits del arreglo. Note que no es la misma que la cantidad de bytes.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator=()

BitArray& Aleph::BitArray::operator= ( const BitArray array)
inline

Asignación de arreglo de bits.

Libera toda la memoria de this, aparta nueva memoria para albergar array y copia exactamente los bits de array a this.

Parameters
[in]arrayel arreglo de bits a ser copiado.
Exceptions
bad_allocsi no hay suficiente memoria para un bloque continuo de dim/8 bytes.
Note
Si ocurre esta excepción, el estado de this permanece el mismo anterior a la asignación.

◆ read()

int Aleph::BitArray::read ( const size_t  i) const
inline

Lectura rápida del bit i.

Lee el bit i sin verificar memoria

Parameters
[in]iíndice del bit a ser leído.
Returns
el valor del bit i
Note
No se verifica fuera de rango.
+ Here is the call graph for this function:

◆ read_bit()

int Aleph::BitArray::read_bit ( const size_t  i) const
inline

Lee el bit i.

Parameters
[in]iíndice del bit a ser leído.
Returns
el valor del bit i
Note
No se verifica fuera de rango.
+ Here is the caller graph for this function:

◆ reserve()

void Aleph::BitArray::reserve ( size_t  dim)
inline

Reserva por adelantado memoria para el arreglo de bits a la dimensión dim.

reserve() aparta por adelantado la memoria suficiente para guardar dim bits. De este modo, los accesos de escritura o lectura pueden hacerse directa y más rápidamente mediante los métodos read() y write().

Exceptions
bad_allocsi no hay suficiente memoria
+ Here is the call graph for this function:

◆ right_shift()

void Aleph::BitArray::right_shift ( const size_t  n = 1)
inlinenoexcept

Desplaza los bits n posiciones a la derecha.

Los bits son desplazados y se considera al arreglo de tamaño fijo, es decir, los últimos n bits se pierden.

Parameters
[in]nla cantidad de posiciones que se van a desplazar los bits.

◆ save()

void Aleph::BitArray::save ( std::ostream &  output)
inline

Guarda en un archivo texto la secuencia de bits.

save() almacena en el archivo texto output, ya abierto, la secuencia de bits en formato decimal.

La primera línea siempre guarda el tamaño en bytes y en bits. Seguidamente se guardan en valor decimal los bytes secuenciales correspondientes al arreglo.

Parameters
[in]outputstream de salida abierto donde se guardaría el arreglo.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ save_in_array_of_chars()

void Aleph::BitArray::save_in_array_of_chars ( const string &  name,
std::ostream &  output 
)
inline

Guarda en un archivo texto una declaración estática de cadena de carateres que representa el arreglo.

save_in_array_of_chars(name, output) genera una declaración del tipo:

char name [ size ] = { valores del arreglo separados con comas };

La declaración es guardada en el stream de salida output y el nombre del arreglo es name.

Parameters
[in]namenombre de la variable arreglo.
[in]outputstream de salida donde se desea guardar la declaración.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ write()

void Aleph::BitArray::write ( const size_t  i,
const unsigned int  value 
)
inline

Escribe el bit i con el valor value sin verificación de memoria.

Parameters
[in]iíndice del bit a ser escrito.
[in]valuevalor a ser escrito en la posición i.
Note
No se verifica fuera de rango y no verifica que value tenga un valor binario.
+ Here is the call graph for this function:

◆ write_bit()

void Aleph::BitArray::write_bit ( const size_t  i,
const unsigned int  value 
)
inline

Escribe el bit i con el valor value

Parameters
[in]iíndice del bit a ser escrito.
[in]valuevalor a ser escrito en la posición i.
Note
No se verifica fuera de rango y no verifica que value tenga un valor binario.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

The documentation for this class was generated from the following file:

Leandro Rabindranath León