- IORangeScalar data, dataEnd;
- IORangeScalar thisStart, thisEnd;
- UInt32 index;
- bool ok = false;
-
- if( !size || !result)
- return( false );
-
- if( 0 == alignment)
- alignment = defaultAlignmentMask;
- else
- alignment--;
-
- size = (size + defaultAlignmentMask) & ~defaultAlignmentMask;
-
- LOCK();
-
- for( index = 0; index < numElements; index++ ) {
-
- thisStart = elements[index].start;
- thisEnd = elements[index].end;
- data = (thisStart + alignment) & ~alignment;
- dataEnd = (data + size - 1);
-
- ok = (dataEnd <= thisEnd);
- if( ok) {
- if( data != thisStart) {
- if( dataEnd != thisEnd) {
- if( allocElement( index + 1 )) {
- elements[index++].end = data - 1;
- elements[index].start = dataEnd + 1;
- elements[index].end = thisEnd;
- } else
- ok = false;
- } else
- elements[index].end = data - 1;
- } else {
- if( dataEnd != thisEnd)
- elements[index].start = dataEnd + 1;
- else
- deallocElement( index );
- }
- if( ok)
- *result = data;
- break;
- }
- }
-
- UNLOCK();
-
- return( ok );
-}
+ IORangeScalar data, dataEnd;
+ IORangeScalar thisStart, thisEnd;
+ UInt32 index;
+ bool ok = false;