BitMagicC++Library
Enumerations | Functions
Binary-distance metrics
Collaboration diagram for Binary-distance metrics:

Enumerations

enum  bm::distance_metric {
  bm::COUNT_AND = set_COUNT_AND, bm::COUNT_XOR = set_COUNT_XOR, bm::COUNT_OR = set_COUNT_OR, bm::COUNT_SUB_AB = set_COUNT_SUB_AB,
  bm::COUNT_SUB_BA = set_COUNT_SUB_BA, bm::COUNT_A = set_COUNT_A, bm::COUNT_B = set_COUNT_B
}
 Distance metrics codes defined for vectors A and B. More...
 

Functions

distance_metric bm::operation2metric (set_operation op)
 Convert set operation into compatible distance metric. More...
 
template<class BV >
void bm::distance_operation (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance computing template function. More...
 
template<class BV >
unsigned bm::distance_and_operation (const BV &bv1, const BV &bv2)
 Distance AND computing template function. More...
 
template<class BV >
void bm::distance_operation_any (const BV &bv1, const BV &bv2, distance_metric_descriptor *dmit, distance_metric_descriptor *dmit_end)
 Distance screening template function. More...
 
template<class BV >
bm::id_t bm::count_and (const BV &bv1, const BV &bv2)
 Computes bitcount of AND operation of two bitsets. More...
 
template<class BV >
bm::id_t bm::any_and (const BV &bv1, const BV &bv2)
 Computes if there is any bit in AND operation of two bitsets. More...
 
template<class BV >
bm::id_t bm::count_xor (const BV &bv1, const BV &bv2)
 Computes bitcount of XOR operation of two bitsets. More...
 
template<class BV >
bm::id_t bm::any_xor (const BV &bv1, const BV &bv2)
 Computes if there is any bit in XOR operation of two bitsets. More...
 
template<class BV >
bm::id_t bm::count_sub (const BV &bv1, const BV &bv2)
 Computes bitcount of SUB operation of two bitsets. More...
 
template<class BV >
bm::id_t bm::any_sub (const BV &bv1, const BV &bv2)
 Computes if there is any bit in SUB operation of two bitsets. More...
 
template<class BV >
bm::id_t bm::count_or (const BV &bv1, const BV &bv2)
 Computes bitcount of OR operation of two bitsets. More...
 
template<class BV >
bm::id_t bm::any_or (const BV &bv1, const BV &bv2)
 Computes if there is any bit in OR operation of two bitsets. More...
 

Detailed Description

Distance metrics and algorithms to compute binary distances

Enumeration Type Documentation

◆ distance_metric

Distance metrics codes defined for vectors A and B.

Enumerator
COUNT_AND 

(A & B).count()

COUNT_XOR 

(A ^ B).count()

COUNT_OR 

(A | B).count()

COUNT_SUB_AB 

(A - B).count()

COUNT_SUB_BA 

(B - A).count()

COUNT_A 

A.count()

COUNT_B 

B.count()

Definition at line 51 of file bmalgo_impl.h.

Function Documentation

◆ any_and()

template<class BV >
bm::id_t bm::any_and ( const BV &  bv1,
const BV &  bv2 
)

Computes if there is any bit in AND operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
non zero value if there is any bit

Definition at line 1002 of file bmalgo_impl.h.

References bm::COUNT_AND, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

◆ any_or()

template<class BV >
bm::id_t bm::any_or ( const BV &  bv1,
const BV &  bv2 
)

Computes if there is any bit in OR operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
non zero value if there is any bit

Definition at line 1104 of file bmalgo_impl.h.

References bm::COUNT_OR, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

◆ any_sub()

template<class BV >
bm::id_t bm::any_sub ( const BV &  bv1,
const BV &  bv2 
)

Computes if there is any bit in SUB operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
non zero value if there is any bit

Definition at line 1071 of file bmalgo_impl.h.

References bm::COUNT_SUB_AB, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

◆ any_xor()

template<class BV >
bm::id_t bm::any_xor ( const BV &  bv1,
const BV &  bv2 
)

Computes if there is any bit in XOR operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
non zero value if there is any bit

Definition at line 1036 of file bmalgo_impl.h.

References bm::COUNT_XOR, bm::distance_operation_any(), and bm::distance_metric_descriptor::result.

◆ count_and()

template<class BV >
bm::id_t bm::count_and ( const BV &  bv1,
const BV &  bv2 
)

Computes bitcount of AND operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
bitcount of the result
Examples:
sample11.cpp, and sample9.cpp.

Definition at line 989 of file bmalgo_impl.h.

References bm::distance_and_operation().

Referenced by bv_count_and(), and main().

◆ count_or()

template<class BV >
bm::id_t bm::count_or ( const BV &  bv1,
const BV &  bv2 
)

Computes bitcount of OR operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
bitcount of the result

Definition at line 1088 of file bmalgo_impl.h.

References bm::COUNT_OR, bm::distance_operation(), and bm::distance_metric_descriptor::result.

Referenced by bm::operation_deserializer< BV >::deserialize().

◆ count_sub()

template<class BV >
bm::id_t bm::count_sub ( const BV &  bv1,
const BV &  bv2 
)

Computes bitcount of SUB operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
bitcount of the result

Definition at line 1054 of file bmalgo_impl.h.

References bm::COUNT_SUB_AB, bm::distance_operation(), and bm::distance_metric_descriptor::result.

◆ count_xor()

template<class BV >
bm::id_t bm::count_xor ( const BV &  bv1,
const BV &  bv2 
)

Computes bitcount of XOR operation of two bitsets.

Parameters
bv1- Argument bit-vector.
bv2- Argument bit-vector.
Returns
bitcount of the result
Examples:
sample9.cpp.

Definition at line 1020 of file bmalgo_impl.h.

References bm::COUNT_XOR, bm::distance_operation(), and bm::distance_metric_descriptor::result.

Referenced by bm::operation_deserializer< BV >::deserialize(), and main().

◆ distance_and_operation()

template<class BV >
unsigned bm::distance_and_operation ( const BV &  bv1,
const BV &  bv2 
)

Distance AND computing template function.

Parameters
bv1- argument bitvector 1 (A)
bv2- argument bitvector 2 (B)

Definition at line 789 of file bmalgo_impl.h.

References BLOCK_ADDR_SAN, BM_SET_MMX_GUARD, bm::combine_count_and_operation_with_block(), bm::min_value(), and bm::set_array_size.

Referenced by bm::count_and().

◆ distance_operation()

template<class BV >
void bm::distance_operation ( const BV &  bv1,
const BV &  bv2,
distance_metric_descriptor dmit,
distance_metric_descriptor dmit_end 
)

Distance computing template function.

Function receives two bitvectors and an array of distance metrics (metrics pipeline). Function computes all metrics saves result into corresponding pipeline results (distance_metric_descriptor::result) An important detail is that function reuses metric descriptors, incrementing received values. It allows you to accumulate results from different calls in the pipeline.

Parameters
bv1- argument bitvector 1 (A)
bv2- argument bitvector 2 (B)
dmit- pointer to first element of metric descriptors array Input-Output parameter, receives metric code as input, computation is added to "result" field
dmit_end- pointer to (last+1) element of metric descriptors array
Examples:
sample9.cpp.

Definition at line 699 of file bmalgo_impl.h.

References BLOCK_ADDR_SAN, BM_SET_MMX_GUARD, bm::combine_count_operation_with_block(), bm::distance_stage(), and bm::set_array_size.

Referenced by bm::count_or(), bm::count_sub(), bm::count_xor(), and main().

◆ distance_operation_any()

template<class BV >
void bm::distance_operation_any ( const BV &  bv1,
const BV &  bv2,
distance_metric_descriptor dmit,
distance_metric_descriptor dmit_end 
)

Distance screening template function.

Function receives two bitvectors and an array of distance metrics (metrics pipeline). Function computes possybility of a metric(any bit) saves result into corresponding pipeline results (distance_metric_descriptor::result) An important detail is that function reuses metric descriptors, incrementing received values. It allows you to accumulate results from different calls in the pipeline.

Parameters
bv1- argument bitvector 1 (A)
bv2- argument bitvector 2 (B)
dmit- pointer to first element of metric descriptors array Input-Output parameter, receives metric code as input, computation is added to "result" field
dmit_end- pointer to (last+1) element of metric descriptors array

Definition at line 861 of file bmalgo_impl.h.

References BLOCK_ADDR_SAN, BM_IS_GAP, BM_SET_MMX_GUARD, bm::combine_any_operation_with_block(), bm::distance_stage(), bm::distance_metric_descriptor::result, and bm::set_array_size.

Referenced by bm::any_and(), bm::any_or(), bm::any_sub(), and bm::any_xor().

◆ operation2metric()

distance_metric bm::operation2metric ( set_operation  op)
inline

Convert set operation into compatible distance metric.

Definition at line 67 of file bmalgo_impl.h.

References BM_ASSERT, bm::is_const_set_operation(), bm::set_COUNT, and bm::set_COUNT_B.

Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize().