void DataReader::read_one(){ // could block here when pre-buffer enough Datum Datum *datum = pair->free.pop(); datum->Clear(); DataParameter data_param = param.data_param(); if (data_param.shuffle()) cur_idx = Dragon::get_random_value() % indices.size(); else cur_idx = (cur_idx + 1) % indices.size(); IplImage *img = cvLoadImage((data_param.source() + "/" + indices[cur_idx].data()).c_str()); DataTransformer<float>::transform(img, datum); cvReleaseImage(&img); datum->set_label(indices[cur_idx].label()); pair->full.push(datum); }