某F面试

class DeviceReader {
 public:
  // Reads upto 4 bytes of data into the given buffer.
  // Returns the number of bytes read (zero if no more data).
  virtual int read4(char *buffer) = 0;
};


/*
---  simple example ---
data -> a b c d e f g h i j

read4 - buffer = a b c d = > return 4
read4 - e f g h => 4
read4 - i j  => 2

*/

class Reader {
 public:
  Reader(DeviceReader *deviceReader) : deviceReader_(deviceReader) {}

  // Reads up to bufSize bytes of data into buffer.
  // Returns the number of bytes read (zero if no more data).
  // TODO: Implement, buffer allocated by caller, bufSize can be <4, 4 or > 4
  int read(char *buffer, int bufSize) {
    // use deviceReader_.read4
  }
  char temp[4];

 private:
  DeviceReader *deviceReader_;
  // TODO: Any additional members
};

int Reader::read(char* buffer, int bufSize){
	if(buffer==NULL)
		return 0;
	char* p = buffer;
	int cnt = bufSize;
	
	//before read4, I shall move the chars in temp to buffer
	while(cnt>=4){
		int len = deviceReader_->read4(temp);
		p+=len;
		if(len<4)
			return bufSize-cnt+len;
		cnt-=4;
	}
	char s[4];
	int len = deviceReader_->read4(temp);
	
	
	int i=0;
	//cnt=3 len=2
  	for(;i<len && i<cnt;i++)
		p[i] = s[i];
	p[i] = '\0';
	return bufSize-cnt+min(len,cnt);
}



------ test case 1 ---
// assume device reader is reading over ->  a b c d e f g h i j
Reader r; 
char buf[1024];

char temp[4];

int x;

x = r.read(buf, 2); 
EXPECT(x == 2);
EXPECT(buf[0] == 'a');
EXPECT(buf[1] == 'b');


x = r.read(buf, 5); 
EXPECT(x == 5);
EXPECT(buf[0] == 'c');
EXPECT(buf[1] == 'd');
EXPECT(buf[2] == 'e');
EXPECT(buf[3] == 'f');
EXPECT(buf[4] == 'g');

x = r.read(buf, 1024); 
EXPECT(x == 3);
EXPECT(buf[0] == 'h');
EXPECT(buf[1] == 'i');
EXPECT(buf[2] == 'j');

x = r.read(buf, 4);
EXPECT(x == 0);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值