Exemple #1
0
OctreeElement* OctreeElement::getChildAtIndex(int childIndex) const {
#ifdef SIMPLE_CHILD_ARRAY
    return _simpleChildArray[childIndex];
#endif // SIMPLE_CHILD_ARRAY

#ifdef SIMPLE_EXTERNAL_CHILDREN
    int childCount = getChildCount();

    switch (childCount) {
        case 0: {
            return NULL;
        } break;

        case 1: {
            // if our single child is the one being requested, return it, otherwise
            // return null
            int firstIndex = getNthBit(_childBitmask, 1);
            if (firstIndex == childIndex) {
                return _children.single;
            } else {
                return NULL;
            }
        } break;

        default : {
            return _children.external[childIndex];
        } break;
    }
#endif // def SIMPLE_EXTERNAL_CHILDREN
}
Exemple #2
0
// Récupérer le degré d'un polynôme
int getDegre(CodeWord_t * cw)
{
	int i;
	for(i = 15 ; i >= 0 ; i--)
		if(getNthBit(cw[0], i))
			return i;
	return 0;
}
Exemple #3
0
void numToBits(uint32_t * nums, int nNums, int * bits, int nBits) {
  if (nNums*32 != nBits){
    printf("Invalid call to numToBits! nBits is %d, nNums is %d\n", nBits, nNums);
    return;
  }
  for(int i=0; i<nNums; i++){
    for(int j=0; j<32; j++){
      bits[i*32+j]=getNthBit(nums[i],31-j);
    }
  }
}
Exemple #4
0
void computeCtrlBits(CodeWord_t *cw, int size)
{
	int nombre_de_un, i, j;
	for(i = 0 ; i < size ; i++)
	{
		nombre_de_un = 0;
	//	printBits(cw[i], "avant");
		for(j = 1 ; j <= 8 ; j++) 
			if(getNthBit(cw[i],j))
				nombre_de_un++;

		setNthBitCW(&cw[i], 9, nombre_de_un%2);
	//	printBits(cw[i], "après");
	}
}
Exemple #5
0
void
copyDataBitsCoding (char *message, CodeWord_t * cw, int size)
{
  int i = 0;

  for (i = 0; i < size; i++)
  {
    setNthBitCW (&(cw[i]), 1, getNthBit (message[i], 1));
    setNthBitCW (&(cw[i]), 2, getNthBit (message[i], 2));
    setNthBitCW (&(cw[i]), 3, getNthBit (message[i], 3));
    setNthBitCW (&(cw[i]), 4, getNthBit (message[i], 4));
    setNthBitCW (&(cw[i]), 5, getNthBit (message[i], 5));
    setNthBitCW (&(cw[i]), 6, getNthBit (message[i], 6));
    setNthBitCW (&(cw[i]), 7, getNthBit (message[i], 7));
    setNthBitCW (&(cw[i]), 8, getNthBit (message[i], 8));
  }

  return;
}
Exemple #6
0
void OctreeElement::setChildAtIndex(int childIndex, OctreeElement* child) {
#ifdef SIMPLE_CHILD_ARRAY
    int previousChildCount = getChildCount();
    if (child) {
        setAtBit(_childBitmask, childIndex);
    } else {
        clearAtBit(_childBitmask, childIndex);
    }
    int newChildCount = getChildCount();

    // store the child in our child array
    _simpleChildArray[childIndex] = child;

    // track our population data
    if (previousChildCount != newChildCount) {
        _childrenCount[previousChildCount]--;
        _childrenCount[newChildCount]++;
    }
#endif

#ifdef SIMPLE_EXTERNAL_CHILDREN

    int firstIndex = getNthBit(_childBitmask, 1);
    int secondIndex = getNthBit(_childBitmask, 2);

    int previousChildCount = getChildCount();
    if (child) {
        setAtBit(_childBitmask, childIndex);
    } else {
        clearAtBit(_childBitmask, childIndex);
    }
    int newChildCount = getChildCount();

    // track our population data
    if (previousChildCount != newChildCount) {
        _childrenCount[previousChildCount]--;
        _childrenCount[newChildCount]++;
    }

    if ((previousChildCount == 0 || previousChildCount == 1) && newChildCount == 0) {
        _children.single = NULL;
    } else if (previousChildCount == 0 && newChildCount == 1) {
        _children.single = child;
    } else if (previousChildCount == 1 && newChildCount == 2) {
        OctreeElement* previousChild = _children.single;
        _children.external = new OctreeElement*[NUMBER_OF_CHILDREN];
        memset(_children.external, 0, sizeof(OctreeElement*) * NUMBER_OF_CHILDREN);
        _children.external[firstIndex] = previousChild;
        _children.external[childIndex] = child;

        _childrenExternal = true;

        _externalChildrenMemoryUsage += NUMBER_OF_CHILDREN * sizeof(OctreeElement*);

    } else if (previousChildCount == 2 && newChildCount == 1) {
        assert(!child); // we are removing a child, so this must be true!
        OctreeElement* previousFirstChild = _children.external[firstIndex];
        OctreeElement* previousSecondChild = _children.external[secondIndex];

        delete[] _children.external;
        _childrenExternal = false;

        _externalChildrenMemoryUsage -= NUMBER_OF_CHILDREN * sizeof(OctreeElement*);
        if (childIndex == firstIndex) {
            _children.single = previousSecondChild;
        } else {
            _children.single = previousFirstChild;
        }
    } else {
        _children.external[childIndex] = child;
    }

#endif // def SIMPLE_EXTERNAL_CHILDREN
}