Beispiel #1
0
float OctreeHash::Node::getZ(){
	float shift_factor = this->parent->initialD/4;
	float result = this->parent->initialD/2;
	unsigned char bitscount = numberOfBits();
	if ( bitscount < 4 )
		return result;
	for( unsigned long i = 1 << (bitscount-3), bits = 2; bits < bitscount; i >>= 3, bits += 3, shift_factor /= 2){
		if ( i & id ){
			result += shift_factor;
		}
		else{
			result -= shift_factor;
		}
	}
	return result;
}
Beispiel #2
0
bool bit_test(unsigned int x, int n)
{
	/*algorithm:
	 *1. j = numberOfBits(x) 
	 *2.temp = 1 << j (left shift 1 j times to place bit on the left)
	 *3.temp = temp >> n
	 *3.temp & x == temp if n bit is set
	 */
	int j = numberOfBits(x);
	unsigned int temp = 1 << (j - 1);
	temp = temp >> n;
	if ((temp & x) == temp) //nbit is set
		return true;
	else  
		return false;
}
Beispiel #3
0
int main (void)
{
	unsigned int x, n;
	printf("Number of bits for u int : %i\n", int_size());	
	printf("Enter int x and bit number to test: ");
	scanf("%u %u", &x, &n);

	printf("Number of bits in %i is %i\n", x, numberOfBits(x) );
	
	if (bit_test(x,n))
		printf("Bit %i is set on %i\n", n,x);
	else {
		printf("Bit %i is not set, setting...\n", n);
		x = bit_set(x,n);
		printf("New value of x: %i\n", x);
	}
	
	return 0;
}
Beispiel #4
0
inline T floorPowerOf2(T x)
{
  for (T i = 1; i < numberOfBits(x); i += i)
    x |= (x >> i);
  return x - (x >> 1);
}
Beispiel #5
0
void QSslKeyPrivate::decodeDer(const QByteArray &der, bool deepClear)
{
    clear(deepClear);

    if (der.isEmpty())
        return;

    QAsn1Element elem;
    if (!elem.read(der) || elem.type() != QAsn1Element::SequenceType)
        return;

    if (type == QSsl::PublicKey) {
        // key info
        QDataStream keyStream(elem.value());
        if (!elem.read(keyStream) || elem.type() != QAsn1Element::SequenceType)
            return;
        QVector<QAsn1Element> infoItems = elem.toVector();
        if (infoItems.size() < 2 || infoItems[0].type() != QAsn1Element::ObjectIdentifierType)
            return;
        if (algorithm == QSsl::Rsa) {
            if (infoItems[0].toObjectId() != RSA_ENCRYPTION_OID)
                return;
            // key data
            if (!elem.read(keyStream) || elem.type() != QAsn1Element::BitStringType || elem.value().isEmpty())
                return;
            if (!elem.read(elem.value().mid(1)) || elem.type() != QAsn1Element::SequenceType)
                return;
            if (!elem.read(elem.value()) || elem.type() != QAsn1Element::IntegerType)
                return;
            keyLength = numberOfBits(elem.value());
        } else if (algorithm == QSsl::Dsa) {
            if (infoItems[0].toObjectId() != DSA_ENCRYPTION_OID)
                return;
            if (infoItems[1].type() != QAsn1Element::SequenceType)
                return;
            // key params
            QVector<QAsn1Element> params = infoItems[1].toVector();
            if (params.isEmpty() || params[0].type() != QAsn1Element::IntegerType)
                return;
            keyLength = numberOfBits(params[0].value());
        }

    } else {
        QVector<QAsn1Element> items = elem.toVector();
        if (items.isEmpty())
            return;

        // version
        if (items[0].type() != QAsn1Element::IntegerType || items[0].value().toHex() != "00")
            return;

        if (algorithm == QSsl::Rsa) {
            if (items.size() != 9 || items[1].type() != QAsn1Element::IntegerType)
                return;
            keyLength = numberOfBits(items[1].value());
        } else if (algorithm == QSsl::Dsa) {
            if (items.size() != 6 || items[1].type() != QAsn1Element::IntegerType)
                return;
            keyLength = numberOfBits(items[1].value());
        }
    }

    derData = der;
    isNull = false;
}