コード例 #1
0
ファイル: RBuffer.c プロジェクト: tml/RayLanguage
RBuffer* makeRBufferOptions(size_t startSize, size_t objectCount) {
    RBuffer *object = allocator(RBuffer);
    if(object != nil) {
        // allocation of buffer
        master(object, RData) = makeRDataBytes(arrayAllocator(byte, startSize), startSize);
        if(master(object, RData) != nil) {

            // allocation of sizes array
            object->sizesArray = arrayAllocator(RRange, objectCount);

            if(object->sizesArray  != nil) {
                object->classId     = registerClassOnce(toString(RBuffer));
                object->freePlaces  = objectCount;
                object->count       = 0;
                object->totalPlaced = 0;
#ifdef RAY_BUFFER_THREAD_SAFE
                mutexWithType(&object->mutex, RMutexRecursive);
#endif
            } else {
                RError("RBuffer. Allocation of sizes array failed.", object);
                deleter(master(object, RData), RData);
            }
        } else {
            RError("RBuffer. Allocation of master RData failed.", object);
            deallocator(object);
            object = nil;
        }
    }
    return object;
}
コード例 #2
0
ファイル: RAutoPool.c プロジェクト: kojiba/RayLanguage
RAutoPool* makeRAutoPool(size_t startSize, size_t multiplier) {
    RAutoPool* object = allocator(RAutoPool);
    if(object != nil) {
        object->pointersInWork = makeRArrayOptions(startSize, multiplier, nil);
        if(object->pointersInWork != nil) {
            object->classId      = 5;
            // store current hierarchy lvl memory functions
            object->innerMalloc  = getRMalloc();
            object->innerRealloc = getRRealloc();
            object->innerCalloc  = getRCalloc();
            object->innerFree    = getRFree();
            object->pointersInWork->destructorDelegate = innerFree;
            object->pointersInWork->printerDelegate = poolPrinter;

#if defined(RAY_POOL_THREAD_SAFE)
            mutexWithType(&object->mutex, RMutexErrorCheck);
#endif
        } elseError(
                RError("RAutoPool. Bad workers RArray allocation.", object)
        );

    }
    return object;
}