BOOST_AUTO_TEST_CASE_TEMPLATE(GetLimit, T, InMemoryStoragesLimited) { T ims(10000); BOOST_CHECK_EQUAL(ims.getLimit(), 10000); T ims2(4); BOOST_CHECK_EQUAL(ims2.getLimit(), 4); }
BOOST_AUTO_TEST_CASE_TEMPLATE(InsertAndDouble, T, InMemoryStoragesLimited) { T ims(40); for (int i = 0; i < 11; i++) { std::ostringstream convert; convert << i; Name name("/" + convert.str()); shared_ptr<Data> data = makeData(name); data->setFreshnessPeriod(time::milliseconds(5000)); signData(data); ims.insert(*data); } BOOST_CHECK_EQUAL(ims.size(), 11); BOOST_CHECK_EQUAL(ims.getCapacity(), 20); }
BOOST_AUTO_TEST_CASE_TEMPLATE(InsertAndEvict, T, InMemoryStoragesLimited) { T ims(2); Name name("/insert/1"); shared_ptr<Data> data = makeData(name); ims.insert(*data); Name name2("/insert/2"); shared_ptr<Data> data2 = makeData(name2); ims.insert(*data2); Name name3("/insert/3"); shared_ptr<Data> data3 = makeData(name3); ims.insert(*data3); BOOST_CHECK_EQUAL(ims.size(), 2); shared_ptr<Interest> interest = makeInterest(name); shared_ptr<const Data> found = ims.find(*interest); BOOST_CHECK(found == nullptr); }
// Main function int main(const int argc, const char **argv) { MYLOGVERB = LOG_INFO; // suppress debug messages // Instantiate a ModelManager: ModelManager manager("Gist Features Extraction"); // we cannot use saveResults() on our various ModelComponent objects // here, so let's not export the related command-line options. manager.allowOptions(OPTEXP_ALL & (~OPTEXP_SAVE)); // Instantiate our various ModelComponents: nub::soft_ref<SimEventQueueConfigurator> seqc(new SimEventQueueConfigurator(manager)); manager.addSubComponent(seqc); nub::soft_ref<InputMPEGStream> ims(new InputMPEGStream(manager, "Input MPEG Stream", "InputMPEGStream")); manager.addSubComponent(ims); nub::soft_ref<StdBrain> brain(new StdBrain(manager)); manager.addSubComponent(brain); nub::ref<SpatialMetrics> metrics(new SpatialMetrics(manager)); manager.addSubComponent(metrics); manager.exportOptions(MC_RECURSE); metrics->setFOAradius(30); // FIXME metrics->setFoveaRadius(30); // FIXME // setting up the GIST ESTIMATOR manager.setOptionValString(&OPT_GistEstimatorType,"Std"); //manager.setOptionValString(&OPT_GistEstimatorType,"FFT"); // Request a bunch of option aliases (shortcuts to lists of options): REQUEST_OPTIONALIAS_NEURO(manager); // Parse command-line: if (manager.parseCommandLine(argc, argv, "<*.mpg or *_gistList.txt>", 1, 1) == false) return(1); nub::soft_ref<SimEventQueue> seq = seqc->getQ(); // if the file passed ends with _gistList.txt // we have a different protocol bool isGistListInput = false; int ifLen = manager.getExtraArg(0).length(); if(ifLen > 13 && manager.getExtraArg(0).find("_gistList.txt",ifLen - 13) != std::string::npos) isGistListInput = true; // NOTE: this could now be controlled by a command-line option // --preload-mpeg=true manager.setOptionValString(&OPT_InputMPEGStreamPreload, "true"); // do post-command-line configs: std::vector<std::string> tag; std::vector<int> start; std::vector<int> num; unsigned int cLine = 0; int cIndex = 0; if(isGistListInput) { LINFO("we have a gistList input"); getGistFileList(manager.getExtraArg(0).c_str(), tag, start, num); cIndex = start[0]; } else { LINFO("we have an mpeg input"); ims->setFileName(manager.getExtraArg(0)); manager.setOptionValString(&OPT_InputFrameDims, convertToString(ims->peekDims())); } // frame delay in seconds //double fdelay = 33.3667/1000.0; // real time double fdelay = 3.3667/1000.0; // let's get all our ModelComponent instances started: manager.start(); // get the GistEstimator nub::soft_ref<GistEstimatorStd> ge;////// = /////// dynCastWeak<GistEstimatorStd>(brain->getGE()); LFATAL("fixme"); if (ge.isInvalid()) LFATAL("I am useless without a GistEstimator"); // MAIN LOOP SimTime prevstime = SimTime::ZERO(); int fNum = 0; Image< PixRGB<byte> > inputImg; Image< PixRGB<byte> > dispImg; Image<double> cgist; std::string folder = ""; std::string::size_type sPos = manager.getExtraArg(0).rfind("/",ifLen); if(sPos != std::string::npos) folder = manager.getExtraArg(0).substr(0,sPos+1); LINFO("let's start"); while(1) { // has the time come for a new frame? if (fNum == 0 || (seq->now() - 0.5 * (prevstime - seq->now())).secs() - fNum * fdelay > fdelay) { // load new frame std::string fName; if(isGistListInput) { if (cLine >= tag.size()) break; // end of input list // open the current file char tNumStr[100]; sprintf(tNumStr,"%06d",cIndex); fName = folder + tag[cLine] + std::string(tNumStr) + ".ppm"; inputImg = Raster::ReadRGB(fName); cIndex++; if(cIndex >= start[cLine] + num[cLine]) { cLine++; if (cLine < tag.size()) cIndex = start[cLine]; } // reformat the file name to a gist name int fNameLen = fName.length(); unsigned int uPos = fName.rfind("_",fNameLen); fName = fName.substr(0,uPos)+ ".ppm"; } else { fName = manager.getExtraArg(0); inputImg = ims->readRGB(); //Raster::ReadRGB(manager.getExtraArg(1)); if (inputImg.initialized() == false) break; // end of input stream // format new frame inputImg = crop(inputImg, Rectangle(Point2D<int>(0,25), Dims(inputImg.getHeight(), inputImg.getWidth()-25+1))); cIndex = fNum+1; } dispImg = inputImg; LINFO("\nnew frame :%d",fNum); // pass input to brain: rutz::shared_ptr<SimEventInputFrame> e(new SimEventInputFrame(brain.get(), GenericFrame(inputImg), 0)); seq->post(e); // post the image to the brain // get the gist feature vector cgist = ge->getGist(); //for(uint k = 0; k < cgist.getSize(); k++) LINFO("%d: %f",k, cgist.getVal(0,k)); // // setup display at the start of stream // if (fNum == 0) // { // int s = SQ_SIZE; // inputWin = new XWinManaged(Dims(w, h), 0, 0, manager.getExtraArg(0).c_str()); // wList.add(inputWin); // gistWin = new XWinManaged(Dims(NUM_GIST_COL * s, NUM_GIST_FEAT * s), 0,0, "Gist"); // wList.add(gistWin); // } // // display the input image and the gist histogram // drawGrid(dispImg, w/4,h/4,1,1,PixRGB<byte>(255,255,255)); // inputWin->drawImage(dispImg,0,0); // gistWin->drawImage(ge->getGistHistogram(SQ_SIZE),0,0); // SAVE GIST FEATURES TO A FILE saveData(cgist, fName, cIndex-1); //LINFO("\nFrame number just saved:%d",fNum);Raster::waitForKey(); // increase frame count fNum++; } // evolve brain: prevstime = seq->now(); // time before current step const SimStatus status = seq->evolve(); if (SIM_BREAK == status) // Brain decided it's time to quit break; } // stop all our ModelComponents manager.stop(); // all done! return 0; }
file_chooser_widget_rep::file_chooser_widget_rep ( command cmd2, string type2): attribute_widget_rep (1), cmd (cmd2), type (type2) { ref_count++; tree t= stree_to_tree (call ("format-get-suffixes*", type)); int i, n= N(t); for (i=0; i<n; i++) suffix << ("." * as_string (t[i])); if (n == 0) suffix << string (""); SI sep= 3*PIXEL; int cw2n= 5; if (type == "directory") cw2n= 3; array<wk_widget> cw2 (cw2n); array<string> cn2 (cw2n); cw2[0]= glue_wk_widget (false, true, sep); cw2[1]= canvas_widget (wk_widget (tm_new<file_list_widget_rep> (this, suffix, true))); cn2[1]= "directories"; cw2[2]= glue_wk_widget (false, true, sep); if (type != "directory") { cw2[3]= canvas_widget (wk_widget (tm_new<file_list_widget_rep> (this, suffix, false))); cn2[3]= "files"; cw2[4]= glue_wk_widget (false, true, sep-PIXEL); } #ifdef OS_WIN32 wk_widget drive_menu = vertical_menu (array<wk_widget> ()); unsigned int driveMask = XGetDrivesMask(); char driveString[4] = "A:\\"; for (char x = 'A'; x <= 'Z'; x++) if(driveMask & (1 << (x - 'A'))) { driveString[0] = x; drive_menu << emit_insert (driveString, command_button (text_wk_widget (driveString), tm_new<drive_menu_command_rep> (this, driveString))); } array<wk_widget> drw (2); drw[0] = pullright_button (text_wk_widget (translate ("Drive")), drive_menu); drw[1] = text_wk_widget (""); // drw[1]= glue_wk_widget (false, true, sep); #endif int BUTTON_OK= BUTTON_FILE_OK; if (type == "directory") BUTTON_OK= BUTTON_DIR_OK; #ifdef OS_WIN32 array<wk_widget> cw3 (11); cw3[0]= glue_wk_widget (false, false, sep); cw3[1]= pulldown_button (text_wk_widget (translate ("Drive")), drive_menu, true); cw3[2]= glue_wk_widget (false, false, sep); cw3[3]= button_widget ("Home", BUTTON_HOME); cw3[4]= glue_wk_widget (false, false, sep); cw3[5]= button_widget ("Texts", BUTTON_TEXTS); cw3[6]= glue_wk_widget (true, false); cw3[7]= button_widget ("Ok", BUTTON_OK); cw3[8]= glue_wk_widget (false, false, sep); cw3[9]= button_widget ("Cancel", BUTTON_CANCEL); cw3[10]= glue_wk_widget (false, false, sep); #else array<wk_widget> cw3 (9); cw3[0]= glue_wk_widget (false, false, sep); cw3[1]= button_widget ("Home", BUTTON_HOME); cw3[2]= glue_wk_widget (false, false, sep); cw3[3]= button_widget ("Texts", BUTTON_TEXTS); cw3[4]= glue_wk_widget (true, false); cw3[5]= button_widget ("Ok", BUTTON_OK); cw3[6]= glue_wk_widget (false, false, sep); cw3[7]= button_widget ("Cancel", BUTTON_CANCEL); #ifdef OS_MACOS cw3[8]= glue_wk_widget (false, false, sep + 14*PIXEL); #else cw3[8]= glue_wk_widget (false, false, sep); #endif #endif int cwn= 11; if (type == "image") cwn= 16; if (type == "directory") cwn= 7; array<wk_widget> cw (cwn); array<string> cn (cwn); cw[0]= glue_wk_widget (true, false, 0, sep); cw[1]= input_widget ("Directory:", "Directory:", CHANGE_DIR); cn[1]= "directory"; cw[2]= glue_wk_widget (true, false, 0, sep); if (type == "directory") { cw[3]= horizontal_list (cw2, cn2); cn[3]= "list"; } if (type != "directory") { cw[3]= input_widget ("File:", "Directory:", CHANGE_FILE); cn[3]= "file"; cw[4]= glue_wk_widget (true, false, 0, sep); cw[5]= input_widget ("Suffixes:", "Directory:", CHANGE_SUFFIXES); cn[5]= "suffixes"; cw[6]= glue_wk_widget (true, false, 0, sep); cw[7]= horizontal_list (cw2, cn2); cn[7]= "list"; } if (type == "image") { array<wk_widget> imw (7); array<string> ims (7); imw[ 0]= input_widget ("width:", "y-position:", IMAGE_HSIZE); ims[ 0]= "hsize"; imw[ 1]= glue_wk_widget (true, false, 0, sep); imw[ 2]= input_widget ("height:", "y-position:", IMAGE_VSIZE); ims[ 2]= "vsize"; imw[ 3]= glue_wk_widget (true, false, 0, sep); imw[ 4]= input_widget ("x-position:", "y-position:", IMAGE_XPOS); ims[ 4]= "xpos"; imw[ 5]= glue_wk_widget (true, false, 0, sep); imw[ 6]= input_widget ("y-position:", "y-position:", IMAGE_YPOS); ims[ 6]= "ypos"; array<wk_widget> cw4 (5); array<string> cn4 (5); cw4[0] = glue_wk_widget (false, false, sep); cw4[1] = vertical_list (imw, ims); cn4[1] = "parameters"; cw4[2] = glue_wk_widget (false, false, sep); cw4[3] = tm_new<image_widget_rep> (); cn4[3] = "image"; cw4[4] = glue_wk_widget (false, false, sep); //cw[ 8] = glue_wk_widget (true, false, 0, sep); //cw[ 9] = separator_wk_widget (); cw[ 8] = glue_wk_widget (true, false, 0, sep); cw[ 9] = horizontal_list (cw4, cn4); cn[ 9] = "image"; cw[10] = glue_wk_widget (true, false, 0, sep); cw[11] = separator_wk_widget (); cw[12] = glue_wk_widget (true, false, 0, sep); } cw[cwn-3]= glue_wk_widget (true, false, 0, sep); cw[cwn-2]= horizontal_list (cw3); cn[cwn-2]= "buttons"; cw[cwn-1]= glue_wk_widget (true, false, 0, sep); a[0]= vertical_list (cw, cn); if (type != "directory") { string s; for (i=0; i<N(suffix); ++i) { if (i) s << " "; s << suffix[i]; } a[0]["suffixes"]["input"] << set_string ("input", s); } ref_count--; }