示例#1
0
OID VStore::Object::keys() {
	OID nobj = OID::create();
	for (int i=0; i<m_keys.size(); i++) {
		nobj.set(i, m_keys[i], true);
	}
	nobj.set(Size, m_keys.size(), true);
	return nobj;
}
示例#2
0
void test_tostring_nest(Test &test) {
	dstring str("nest _ hohoho");
	OID strobj = str;
	strobj.set(5, 66666);
	char buf[100];
	str.toString(buf,100);
	CHECK(strcmp(buf,"nest 66666 hohoho") == 0);
	DONE
}
示例#3
0
void VStore::Object::copy(const OID &nobj) {
	//OID nobj = OID::create();
	OID res, value;
	int flags = 0;
	Attribute *attrib;
	char *dbuf = new char [5000];
	char *dbuf2;
	DASM *dasm = (DASM*)(root.get("notations").get("dasm"));

	for (int i=0; i<m_keys.size(); i++) {
		if (m_keys[i] == This) continue;
		attrib = Attribute::get(m_oid, m_keys[i]);
		if (attrib == 0) {
			res = Null;
			value = Null;
		} else {
			flags = attrib->getFlags();
			res = attrib->getDefinition();
		}

		/*if (flags & OID::FLAG_OUT_OF_DATE) {
			attrib->setFlags(flags & (0xFF - OID::FLAG_OUT_OF_DATE));
			flags = attrib->getFlags();
			attrib->setValue(Definition(res).evaluate(m_oid, m_keys[i], false));
			value = attrib->getValue();
		}*/
		
		if (res != Null) {
			
			//Clone the definition
			//value = res;
			//res = s_alloc;
			//s_alloc++;
			//value.copy(res);
			//std::cout << "CLONING DEF\n";
			
			dbuf2 = dbuf;
			
			Definition d = res;
			nobj.toString(dbuf2, 100);
			dbuf2 += strlen(dbuf2);
			strcpy(dbuf2, " ");
			dbuf2 += strlen(dbuf2);
			m_keys[i].toString(dbuf2,100);
			dbuf2 += strlen(dbuf2);
			
			if (flags && 0x01) {
				//nobj.define(m_keys[i], res, true);
				strcpy(dbuf2, " is { ");
				dbuf2 += strlen(dbuf2);
			} else {
				value = attrib->getValue();
				//nobj.set(m_keys[i], value, true);
				//nobj.definefuture(m_keys[i], res, true);
				strcpy(dbuf2, " = ");
				dbuf2 += strlen(dbuf2);
				value.toString(dbuf2, 100);
				dbuf2 += strlen(dbuf2);
				strcpy(dbuf2, "\n");
				dbuf2 += strlen(dbuf2);
				m_keys[i].toString(dbuf2, 100);
				dbuf2 += strlen(dbuf2);
				strcpy(dbuf2, " := { ");
				dbuf2 += strlen(dbuf2);
			}
			
			d.toString(dbuf2, 4000);
			dbuf2 += strlen(dbuf2);
			strcpy(dbuf2, " }\n");
			
			//std::cout << "DBUF: " << dbuf << "\n";
			
			//Execute
			dasm->execute(dbuf);
		} else {
			if (flags && OID::FLAG_DEEP) {

				//#ifdef LINUX
				//SPINLOCK
				//pthread_mutex_lock(&oid_lock);
				//#endif
				res = s_alloc;
				s_alloc++;
				//#ifdef LINUX
				//SPINLOCK
				//pthread_mutex_unlock(&oid_lock);
				//#endif

				value = attrib->getValue();
				value.copy(res);
				res.set(This, nobj, true);
				nobj.set(m_keys[i], res, true);
			} else {
				value = attrib->getValue();
				if (value != Null) nobj.set(m_keys[i], value, true);
			}
			nobj.flags(m_keys[i],flags, true);
		}

		//delete evt;
	}
	
	delete [] dbuf;
}