-
#include <iostream>
-
#include <string>
-
#include <vector>
-
#include <map>
-
-
#include "ActionObject.h"
-
-
typedef std::map< std::string, CActionObject * > CommandVector;
-
-
void InitializeCommandMap( CommandVector &CommandMap );
-
void TerminalizeCommandMap( CommandVector &CommandMap );
-
void StringTokenizer( const std::string &Str, std::vector< std::string > &Token, const std::string &Delimiter );
-
-
int main( int argc, char **argv)
-
{
-
const int BufferSize = 500;
-
char InputBuffer[ BufferSize ] = { 0, };
-
-
CommandVector CommandTable;
-
InitializeCommandMap( CommandTable );
-
-
while( std::cin.getline( InputBuffer, BufferSize ) ) {
-
-
std::vector< std::string > ArgumentTable;
-
StringTokenizer( InputBuffer, ArgumentTable, " \t\r\n" );
-
-
if( ArgumentTable.size() != 0 ) {
-
-
CommandVector::const_iterator Accessor = CommandTable.find( ArgumentTable[ 0 ] );
-
if( Accessor != CommandTable.end() ) {
-
/// 내장 커맨드 실행 부분
-
-
if( !Accessor->second->DoAction( ArgumentTable ) )
-
break;
-
}
-
else {
-
/// 파일 실행 하는 부분
-
-
}
-
}
-
}
-
-
TerminalizeCommandMap( CommandTable );
-
-
return 0;
-
}
-
-
void InitializeCommandMap( CommandVector &CommandMap )
-
{
-
// CommandMap에 추가하는 부분
-
// CActionObject를 상속받은 개체. std::string과 연관하여 Map
-
// ex) CommandMap.insert( make_pair( "dir", CDirObject ) );
-
// dir의 Case Sensitive문제는 한 곳에서 lower, upper호출 후 비교
-
}
-
-
void TerminalizeCommandMap( CommandVector &CommandMap )
-
{
-
// CommandMap 할당 객체 삭제
-
}
-
-
void StringTokenizer( const std::string &Str, std::vector< std::string > &Token, const std::string &Delimiter )
-
{
-
std::string::size_type LastPos = Str.find_first_not_of( Delimiter, 0 );
-
std::string::size_type Pos = Str.find_first_of( Delimiter, LastPos );
-
-
while( std::string::npos != Pos || std::string::npos != LastPos )
-
{
-
Token.push_back( Str.substr( LastPos, Pos - LastPos ) );
-
LastPos = Str.find_first_not_of( Delimiter, Pos );
-
Pos = Str.find_first_of( Delimiter, LastPos );
-
}
-
}
댓글을 달아 주세요