///////////////////////////////////////////////////////////////////// // getMap.cpp - component for Midterm question #1 // // FillMap fills map with directory info // // GetMap returns map elements in BSTR // // // // Jim Fawcett, CSE775 - Distributed Objects, Spring 2005 // ///////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "getMap.h" #include ".\getmap.h" #include "nav.h" ///////////////////////////////////////////////////////////////////// // class fillMap is used by nav to process files and directories class fillMap : public defProc { public: typedef std::list< std::string > FileList; fillMap(CgetMap::DirMap& map) : dirMap_(map) {} void fileProc(const fileInfo &fi) { dirMap_[dir_].push_back(fi.name()); } void dirsProc(const std::string & dir) { FileList files; dirMap_[dir] = files; dir_ = dir; } private: CgetMap::DirMap& dirMap_; std::string dir_; }; //----< fill map from directories and files on path >---------------- STDMETHODIMP CgetMap::FillMap(BSTR path) { USES_CONVERSION; std::string startPath = W2A(path); fillMap fm(dirMap_); navig nav(fm); nav.start(startPath); return S_OK; } ///////////////////////////////////////////////////////////////////// // Only this function is required for server part of Midterm.Q1 //----< send map elements back as BSTR >----------------------------- STDMETHODIMP CgetMap::GetMap(BSTR* mapData) { USES_CONVERSION; CComBSTR data; DirMap::iterator it; for(it = dirMap_.begin(); it != dirMap_.end(); ++it) { data.Append(A2W("\nDirectory: ")); // directory delimiter data.Append(A2W(it->first.c_str())); FileList files = it->second; FileList::iterator jt; for(jt = files.begin(); jt != files.end(); ++jt) { std::string temp = jt->c_str(); if(temp != "." && temp != "..") { data.Append(A2W("\n")); // file delimiter data.Append(A2W(jt->c_str())); } } } *mapData = data.Detach(); return S_OK; }