示例#1
0
MojErr MojObjectFilter::Node::addChild(MojAutoPtr<Node> child)
{
	MojAssert(child.get());

	MojErr err = this->m_children.push(child.get());
	MojErrCheck(err);
	child.release();

	return MojErrNone;
}
示例#2
0
MojErr MojBuffer::release(MojAutoPtr<Chunk>& chunkOut)
{
	MojErr err = consolidate();
	MojErrCheck(err);
	MojAssert(m_chunks.size() <= 1);
	if (m_chunks.empty()) {
		chunkOut.reset();
	} else {
		chunkOut.reset(m_chunks.popFront());
	}
	return MojErrNone;
}
示例#3
0
void MojLogEngine::updateAppender(MojAutoPtr<MojLogAppender> appender)
{
	MojAssertMutexLocked(m_mutex);

	if (appender.get()) {
		m_configuredAppender = appender;
		m_appender = m_configuredAppender.get();
	} else {
		m_configuredAppender.reset();
		m_appender = &m_defaultAppender;
	}
}
示例#4
0
MojErr MojDbLevelIndex::find(MojAutoPtr<MojDbQueryPlan> plan, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageQuery>& queryOut)
{
    LOG_TRACE("Entering function %s", __FUNCTION__);
    MojAssert(isOpen());
    MojAssert(plan.get() && txn);

    MojRefCountedPtr<MojDbLevelQuery> storageQuery(new MojDbLevelQuery());
    MojAllocCheck(storageQuery.get());
    MojErr err = storageQuery->open(m_db.get(), m_primaryDb.get(), plan, txn);
    MojErrCheck(err);
    queryOut = storageQuery;

    return MojErrNone;
}
示例#5
0
MojErr MojDbIsamQuery::open(MojAutoPtr<MojDbQueryPlan> plan, MojDbStorageTxn* txn)
{
	MojAssert(!m_isOpen);
	MojAssert(plan.get() && txn);

	m_isOpen = true;
	m_plan = plan;
	m_iter = m_plan->ranges().begin();
	m_state = StateSeek;
	m_txn = txn;
	m_endKey.clear();
    m_distinct = m_plan->query().distinct();

	return MojErrNone;
}
示例#6
0
MojErr MojDbLevelQuery::open(MojDbLevelDatabase* db, MojDbLevelDatabase* joinDb,
		MojAutoPtr<MojDbQueryPlan> plan, MojDbStorageTxn* txn)
{
	MojAssert(!m_isOpen);
	MojAssert(db && db->impl() && plan.get());

	MojErr err = MojDbIsamQuery::open(plan, txn);
	MojErrCheck(err);
	err = m_cursor.open(db, txn, 0);
	MojErrCheck(err);

	m_db = joinDb;

	return MojErrNone;
}
MojErr MojDbTestStorageIndex::find(MojAutoPtr<MojDbQueryPlan> plan, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageQuery>& queryOut)
{
	MojErr err = m_testEngine->checkErrMap(_T("index.find"));
	MojErrCheck(err);

	MojAssert(m_idx.get());
	MojAssert(plan.get());

	//create the real query
	MojRefCountedPtr<MojDbStorageQuery> realQuery;
	err = m_idx->find(plan, MojTestTxn(txn), realQuery);
	MojErrCheck(err);

	MojRefCountedPtr<MojDbTestStorageQuery> storageQuery(new MojDbTestStorageQuery(realQuery.get(), m_testEngine));
	MojAllocCheck(storageQuery.get());
	queryOut = storageQuery;

	return MojErrNone;
}
示例#8
0
MojErr MojAutoPtrTest::run()
{
	MojErr err = MojErrNone;
	MojAutoPtr<int> intPtr1;
	MojAutoPtr<MojString> strPtr1;
	MojAutoArrayPtr<MojChar> charPtr1;
	MojAutoPtr<int> intPtr2(new int(5));
	MojAutoPtr<MojString> strPtr2(new MojString());
	MojAutoArrayPtr<MojChar> charPtr2(new MojChar[6]);
	MojAutoPtr<int> intPtr3(new int(5));
	MojAutoPtr<MojString> strPtr3(new MojString());
	MojAutoArrayPtr<MojChar> charPtr3(new MojChar[6]);
	MojAutoPtr<int> intPtr4(intPtr3);
	MojAutoPtr<MojString> strPtr4(strPtr3);
	MojAutoArrayPtr<MojChar> charPtr4(charPtr3);
	MojSharedPtr<int> intSp1;
	MojSharedPtr<int> intSp2(intSp1);
	MojSharedPtr<MojString> strSp1;
	MojSharedPtr<MojString> strSp2(strSp1);
	MojSharedArrayPtr<MojChar> charSp1;
	MojSharedArrayPtr<MojChar> charSp2;

	MojTestAssert(!intPtr1.get());
	MojTestAssert(!strPtr1.get());
	MojTestAssert(!charPtr1.get());
	MojTestAssert(!intPtr3.get());
	MojTestAssert(!strPtr3.get());
	MojTestAssert(!charPtr3.get());
	MojTestAssert(intPtr2.get());
	MojTestAssert(strPtr2.get());
	MojTestAssert(charPtr2.get());
	MojTestAssert(intPtr4.get());
	MojTestAssert(strPtr4.get());
	MojTestAssert(charPtr4.get());
	MojTestAssert(!intPtr1.release());

	intPtr1.reset();
	strPtr1.reset();
	charPtr1.reset();
	MojTestAssert(*intPtr2.get() == 5);
	MojTestAssert(*intPtr2 == 5);
	MojTestAssert(strPtr2->empty());
	MojStrCpy(charPtr2.get(), _T("hello"));
	MojTestAssert(*charPtr2 == _T('h'));
	err = strPtr2->assign(charPtr2.get());
	MojTestErrCheck(err);
	MojTestAssert(*strPtr2 == charPtr2.get());
	intPtr1 = intPtr2;
	strPtr1 = strPtr2;
	charPtr1 = charPtr2;
	MojTestAssert(!intPtr2.get());
	MojTestAssert(!strPtr2.get());
	MojTestAssert(!charPtr2.get());
	MojTestAssert(intPtr1.get());
	MojTestAssert(strPtr1.get());
	MojTestAssert(charPtr1.get());
	MojTestAssert(*intPtr1 == 5);
	MojTestAssert(*strPtr1 == _T("hello"));
	MojTestAssert(*charPtr1 == _T('h'));

	delete intPtr1.release();

	// related type
	MojAutoPtr<FooTest> foop;
	MojAutoPtr<BarTest> barp(new BarTest());
	MojAllocCheck(barp.get());
	BarTest* barraw = barp.get();
	foop = barp;
	MojTestAssert(foop.get() == barraw);
	MojTestAssert(barp.get() == NULL);
	MojAutoPtr<FooTest> foop2(barp);

	MojSharedPtr<FooTest> foosp;
	MojSharedPtr<BarTest> barsp;
	foosp = barsp;
	MojSharedPtr<FooTest> foosp2(barsp);

	// shared ptrs
	MojTestAssert(!intSp1.get());
	MojTestAssert(intSp1.refcount() == 0);
	MojTestAssert(!intSp2.get());
	MojTestAssert(intSp2.refcount() == 0);
	MojTestAssert(!strSp1.get());
	MojTestAssert(strSp1.refcount() == 0);
	MojTestAssert(!strSp2.get());
	MojTestAssert(strSp2.refcount() == 0);
	MojTestAssert(!charSp1.get());
	MojTestAssert(charSp1.refcount() == 0);
	MojTestAssert(!charSp2.get());
	MojTestAssert(charSp2.refcount() == 0);

	err = intSp1.reset(new int(10));
	MojTestErrCheck(err);
	MojTestAssert(intSp1.get() && *intSp1 == 10);
	MojTestAssert(!intSp2.get());
	MojTestAssert(intSp1.refcount() == 1);
	intSp2 = intSp1;
	MojTestAssert(intSp1.get() && *intSp1 == 10);
	MojTestAssert(intSp2.get() && *intSp2 == 10);
	MojTestAssert(intSp1.refcount() == 2);
	MojTestAssert(intSp2.refcount() == 2);
	err = intSp1.reset(new int(20));
	MojTestErrCheck(err);
	MojTestAssert(intSp1.get() && *intSp1 == 20);
	MojTestAssert(intSp2.get() && *intSp2 == 10);
	MojTestAssert(intSp1.refcount() == 1);
	MojTestAssert(intSp2.refcount() == 1);
	intSp2 = intSp1;
	MojTestAssert(intSp1.get() && *intSp1 == 20);
	MojTestAssert(intSp2.get() && *intSp2 == 20);
	MojTestAssert(intSp1.refcount() == 2);
	MojTestAssert(intSp2.refcount() == 2);
	err = intSp1.reset(NULL);
	MojTestErrCheck(err);
	MojTestAssert(!intSp1.get());
	MojTestAssert(intSp1.refcount() == 0);
	MojTestAssert(intSp2.get() && *intSp2 == 20);
	MojTestAssert(intSp2.refcount() == 1);
	err = strSp1.reset(new MojString);
	MojTestErrCheck(err);
	MojTestAssert(strSp1.get());
	MojTestAssert(strSp1->empty());
	MojTestAssert(*strSp1 == _T(""));
	strSp2 = strSp1;
	MojTestAssert(*strSp2 == _T(""));
	err = charSp1.reset(new MojChar[100]);
	MojErrCheck(err);
	MojTestAssert(charSp1.get());
	charSp2 = charSp1;
	MojTestAssert(charSp1.get() == charSp2.get());
	err = charSp1.resetChecked(new MojChar[100]);
	MojErrCheck(err);
	err = charSp1.resetChecked(NULL);
	MojTestErrExpected(err, MojErrNoMem);

	// refs
	MojAutoPtr<FooTest> foop3 = makeFooAuto();
	takeFooAuto(foop3);
	takeFooAuto(makeFooAuto());
	MojSharedPtr<FooTest> foosp3 = makeFooShared();
	takeFooShared(foosp3);
	takeFooShared(makeFooShared());

	return MojErrNone;
}
示例#9
0
static MojErr takeFooAuto(MojAutoPtr<FooTest> p)
{
	MojTestAssert(p.get());
	return MojErrNone;
}