Exemple #1
0
//returns false on failure
bool Database::readDevice(DataHandler& data, DEVICE& dev) {
	//address
	TEST(data.read(&dev.address, BTADDR_LEN));

	//name
	int strLen;
	TEST(data.read(&strLen, sizeof(int)));
	StringData<char>* sd = new StringData<char>(strLen);
	dev.name.setData(sd);
	MAASSERT(sd->getRefCount() == 1);
	TEST(data.read(sd->pointer(), strLen));
	dev.name[strLen] = 0;

	//services
	int nServ;
	TEST(data.read(&nServ, sizeof(int)));
	dev.services.resize(nServ);
	for(int i=0; i<nServ; i++) {
		BtService& serv(dev.services[i]);
		TEST(data.read(&serv.port, sizeof(int)));
		TEST(data.read(&strLen, sizeof(int)));
		sd = new StringData<char>(strLen);
		serv.name.setData(sd);
		MAASSERT(sd->getRefCount() == 1);
		TEST(data.read(sd->pointer(), strLen));
		serv.name[strLen] = 0;
	}
	mNServices += nServ;
	return true;
}