コード例 #1
0
static inline void XXHashInsert(RefCountTable *table, RefCountBucket *insert) {
    objc_uinteger hash = hashObject(insert->object);
    objc_uinteger i = hash % table->nBuckets;

    if(table->count >= table->nBuckets) {
        objc_integer oldnBuckets = table->nBuckets;
        RefCountBucket **buckets = table->buckets;

        table->nBuckets = oldnBuckets * 2;
        table->buckets = calloc(table->nBuckets, sizeof(RefCountBucket *));
        for(i = 0; i < oldnBuckets; i++) {
            RefCountBucket *check, *next;

            for(check = buckets[i]; check != NULL; check = next) {
                objc_uinteger newi = hashObject(check->object) % table->nBuckets;
                next = check->next;
                check->next = table->buckets[newi];
                table->buckets[newi] = check;
            }
        }
        free(buckets);
        i = hash % table->nBuckets;
    }

    insert->next = table->buckets[i];
    table->buckets[i] = insert;
    table->count++;
}
コード例 #2
0
static inline RefCountBucket *XXHashGet(RefCountTable *table, id object) {
    objc_uinteger i = hashObject(object) % table->nBuckets;
    RefCountBucket *check;

    for(check = table->buckets[i]; check != NULL; check = check->next)
        if(check->object == object)
            return check;

    return NULL;
}
コード例 #3
0
static inline void XXHashRemove(RefCountTable *table, RefCountBucket *remove) {
    objc_uinteger i = hashObject(remove->object) % table->nBuckets;
    RefCountBucket *check = table->buckets[i], *prev = check;

    for(; check != NULL; check = check->next) {
        if(check == remove) {
            if(prev == check)
                table->buckets[i] = check->next;
            else
                prev->next = check->next;

            FreeBucketFromTable(table, check);
            table->count--;
            return;
        }
        prev = check;
    }
}
コード例 #4
0
/**
 * Generate scez file menu slot function.
 */
void CreateSceFile::generateCompressedFileSlot()
{
    bool success = false;
    QString sceFileName = ui->fileLineEdit->text() + "/" + QFileInfo(ui->fileLineEdit->text()).fileName() + ".sce";
    ScriptFile fileHelper(this, sceFileName, false);
    QStringList copiedFiles;

    if(!isExecutableScriptInFilesTable())
    {
        QMessageBox::information(this, "could not start generation", "No executable script defined.");
        return;
    }

    setEnabled(false);

    ui->progressBar->setValue(0);
    ui->progressBar->setMinimum(0);
    ui->progressBar->setMaximum(ui->filesTableWidget->rowCount() * 2);

    statusBar()->showMessage("generating scez file", 0);

    generateSlot(&copiedFiles, ui->progressBar, &success);
    if(success)
    {
        copiedFiles << sceFileName;
        QString zipFileName = ui->fileLineEdit->text() + ".scez";

        (void)fileHelper.deleteFile(zipFileName, false);

        QList<QStringList> fileList;
        QString rootDir = QDir(QFileInfo(sceFileName).path()).absolutePath();
        for(auto el : copiedFiles)
        {
            QStringList entry;
            entry << el;
            entry << QFileInfo(el).filePath().remove(0, rootDir.length() + 1);
            fileList << entry;
        }

        success = ScriptFile::zipFiles(zipFileName, fileList, ui->progressBar);
        if(!success)
        {
            (void)QFile::remove(zipFileName);
        }
        else
        {
            QFile inFile;
            inFile.setFileName(zipFileName);

            success = inFile.open(QIODevice::ReadOnly);
            if(success)
            {
                QCryptographicHash hashObject(QCryptographicHash::Sha512);
                success = hashObject.addData(&inFile);
                if(success)
                {   inFile.close();
                    success = inFile.open(QIODevice::Append);
                    if(success)
                    {
                        (void)inFile.seek(inFile.size());
                        QByteArray hash = hashObject.result();
                        success = (inFile.write(hash) == hash.length()) ? true : false;
                    }
                }

                inFile.close();
            }
        }
    }

    //Delete the sce folder.
    (void)QDir(ui->fileLineEdit->text()).removeRecursively();

    if(success)
    {
        QMessageBox::information(this, "information", "scez file creation succeeded");
        statusBar()->showMessage("scez file created", 5000);
    }
    else
    {
        statusBar()->showMessage("scez file creation failed", 5000);
    }

    setEnabled(true);
}