コード例 #1
0
ファイル: Deque.cpp プロジェクト: cheekiatng/webkit
TEST(WTF_Deque, Remove)
{
    Deque<int> deque;
    deque.append(11);
    deque.prepend(10);
    deque.append(12);
    deque.append(13);

    EXPECT_EQ(10, deque.first());
    EXPECT_EQ(13, deque.last());

    deque.removeLast();
    EXPECT_EQ(10, deque.first());
    EXPECT_EQ(12, deque.last());

    deque.removeFirst();
    EXPECT_EQ(11, deque.first());
    EXPECT_EQ(12, deque.last());

    deque.removeFirst();
    EXPECT_EQ(12, deque.first());
    EXPECT_EQ(12, deque.last());

    deque.removeLast();
    EXPECT_TRUE(deque.isEmpty());
}
コード例 #2
0
ファイル: main.cpp プロジェクト: xintongxia/dataStructure
void main ( void )
{
	Deque<int> intQ;

	printf ( "isEmpty(1): %d\n", intQ.isEmpty ( ) ? 1 : 0 );
	intQ.insertFirst ( 4 );
	cout << intQ <<endl;
	printf ( "removeLast(4): %d\n", intQ.removeLast ( ) );
	cout << intQ <<endl;
	intQ.insertFirst ( 5 );
	intQ.insertFirst ( 12 );
	intQ.insertLast ( 7 );
	intQ.insertLast ( 13 );
	cout << intQ <<endl;
	printf ( "first(12): %d\n", intQ.first ( ) );
	printf ( "last(13): %d\n", intQ.last ( ) );
	printf ( "size(4): %d\n", intQ.size ( ) );
	printf ( "isEmpty(0): %d\n", intQ.isEmpty ( ) ? 1 : 0 );
	printf ( "removeLast(13) :%d\n", intQ.removeLast ( ) );
	printf ( "removeLast(7) :%d\n", intQ.removeLast ( ) );
	printf ( "removeLast(5) :%d\n", intQ.removeLast ( ) );
	cout << intQ <<endl;
	printf ( "removeFirst(12) :%d\n", intQ.removeFirst ( ) );
	cout << intQ <<endl;
	printf ( "size(0): %d\n", intQ.size ( ) );
	printf ( "isEmpty(1): %d\n", intQ.isEmpty ( ) ? 1 : 0 );
	intQ.removeLast ( );

}
コード例 #3
0
ファイル: UniqueIDBDatabase.cpp プロジェクト: nicroto/webkit
RefPtr<UniqueIDBDatabaseTransaction> UniqueIDBDatabase::takeNextRunnableTransaction(bool& hadDeferredTransactions)
{
    Deque<RefPtr<UniqueIDBDatabaseTransaction>> deferredTransactions;
    RefPtr<UniqueIDBDatabaseTransaction> currentTransaction;

    while (!m_pendingTransactions.isEmpty()) {
        currentTransaction = m_pendingTransactions.takeFirst();

        switch (currentTransaction->info().mode()) {
        case IndexedDB::TransactionMode::ReadOnly:
            // If there are any deferred transactions, the first one is a read-write transaction we need to unblock.
            // Therefore, skip this read-only transaction if its scope overlaps with that read-write transaction.
            if (!deferredTransactions.isEmpty()) {
                ASSERT(deferredTransactions.first()->info().mode() == IndexedDB::TransactionMode::ReadWrite);
                if (scopesOverlap(deferredTransactions.first()->objectStoreIdentifiers(), currentTransaction->objectStoreIdentifiers()))
                    deferredTransactions.append(WTF::move(currentTransaction));
            }

            break;
        case IndexedDB::TransactionMode::ReadWrite:
            // If this read-write transaction's scope overlaps with running transactions, it must be deferred.
            if (scopesOverlap(m_objectStoreTransactionCounts, currentTransaction->objectStoreIdentifiers()))
                deferredTransactions.append(WTF::move(currentTransaction));

            break;
        case IndexedDB::TransactionMode::VersionChange:
            // Version change transactions should never be scheduled in the traditional manner.
            RELEASE_ASSERT_NOT_REACHED();
        }

        // If we didn't defer the currentTransaction above, it can be run now.
        if (currentTransaction)
            break;
    }

    hadDeferredTransactions = !deferredTransactions.isEmpty();
    if (!hadDeferredTransactions)
        return WTF::move(currentTransaction);

    // Prepend the deferred transactions back on the beginning of the deque for future scheduling passes.
    while (!deferredTransactions.isEmpty())
        m_pendingTransactions.prepend(deferredTransactions.takeLast());

    return WTF::move(currentTransaction);
}
コード例 #4
0
ファイル: Deque.cpp プロジェクト: cheekiatng/webkit
TEST(WTF_Deque, MoveOnly)
{
    Deque<MoveOnly> deque;

    deque.append(MoveOnly(1));
    deque.prepend(MoveOnly(0));

    EXPECT_EQ(0U, deque.first().value());
    EXPECT_EQ(1U, deque.last().value());

    auto first = deque.takeFirst();
    EXPECT_EQ(0U, first.value());

    auto last = deque.takeLast();
    EXPECT_EQ(1U, last.value());
}
コード例 #5
0
ファイル: DatabaseThread.cpp プロジェクト: Chingliu/EAWebkit
void DatabaseThread::unscheduleDatabaseTasks(Database* database)
{
    // Note that the thread loop is running, so some tasks for the database
    // may still be executed. This is unavoidable.

    Deque<RefPtr<DatabaseTask> > filteredReverseQueue;
    RefPtr<DatabaseTask> task;
    while (m_queue.tryGetMessage(task)) {
        if (task->database() != database)
            filteredReverseQueue.append(task);
    }

    while (!filteredReverseQueue.isEmpty()) {
        m_queue.append(filteredReverseQueue.first());
        filteredReverseQueue.removeFirst();
    }
}
コード例 #6
0
void CSSStyleSheet::addSubresourceStyleURLs(ListHashSet<KURL>& urls)
{
    Deque<CSSStyleSheet*> styleSheetQueue;
    styleSheetQueue.append(this);

    while (!styleSheetQueue.isEmpty()) {
        CSSStyleSheet* styleSheet = styleSheetQueue.first();
        styleSheetQueue.removeFirst();

        RefPtr<CSSRuleList> ruleList = styleSheet->cssRules();

        for (unsigned i = 0; i < ruleList->length(); ++i) {
            CSSRule* rule = ruleList->item(i);
            if (rule->isImportRule()) {
                if (CSSStyleSheet* ruleStyleSheet = static_cast<CSSImportRule*>(rule)->styleSheet())
                    styleSheetQueue.append(ruleStyleSheet);
            }
            rule->addSubresourceStyleURLs(urls);
        }
    }
}