HTML

Despina

Sugárkövetés (raytracing) megvalósítása c++ nyelvben.

Friss topikok

  • tormanator: Az internet nagy hátránya, hogy még szabadidődben is beleszólnak abba, amit csinálsz. float oké, ... (2011.09.03. 19:26) 3D-s vektor osztály
  • tormanator: Látványosan elakadtál, akkor majd én folytatom. sugarkovetes.blog.hu/ (2011.09.03. 14:34) Metszéspontszámítás 1
  • sirpalee: Ne írj saját bmp mentőt. 1. OIIO - win alá macerás fordítani de megéri 2. devIL - egyszerű, fapad... (2010.12.08. 17:31) bmp fájlba mentés

Linkblog

A cli

2010.11.30. 11:33 despina

A cli nem más mint a command line interpreter rövidítése. Programom első körben parancssoros lesz. Szükség van egy eszközre ami a beírt parancsot felismeri és meghívja a hozzá tartozó kódot. Ezt egy switch szerkezet végzi el. Nyelvi megkötés, hogy a switch csak egész típusra tud összehasonlítást végezni. Ezért a parancsokat egy asszociatív tömbben (mapban) tárolom. A kulcs érték string típusú és maga a parancs. Az érték egész (int) típus. Ha érkezik egy parancs először megvizsgálom létezik-e, vagyis, hogy a map tartalmazza-e. Ha nem akkor visszatérek false értékkel. Ha igen a switch kiválasztja a megfelelő esetet (case) és végrehajtja azt. A cli a kapott stringet csak az első szóközig vizsgálja. A többit paraméternek fogja fel. A cli egy osztály és közvetlenül a main példányosítja.

//cli.h
class c_cli
{
public:
    c_cli(); // konstruktor
    bool is_command(const std::string& s);
    bool add_line(const std::string& s);
private:
    std::map<std::string, int> command;

    bool interpretation(const std::string& s);
};
//cli.cpp
extern bool halt;

const int EXIT = 0;
const int RENDER = 1;

c_cli::c_cli()  // konstruktor
{
    command["exit"] = EXIT;
    command["render"] = RENDER;
}

bool c_cli::is_command(const std::string& s)
{   // Ha van ilyen parancs.
    if ( command.find(s.substr( 0, s.find(' ') )) != command.end() )
    {
        return true;
    }
    return false;
}

bool c_cli::add_line(const std::string& s)
{
    return interpretation(s);
}

bool c_cli::interpretation(const std::string& s)
{
    // Le kell ellenőrizni létezik-e az adott 's' a map-ban, mert ha nem 
    // akkor létrehozná, az pedig rossz.
    if ( command.find(s.substr( 0, s.find(' ') )) != command.end() )
    {
        // Csak az első szóközig nézem, a többit paraméterként fogom fel.
        // A paraméter(ek) feldolgozása az adott parancs feladata
        switch (command[s.substr( 0, s.find(' ') )])
        {
            case EXIT: halt = true; break;
            case RENDER: std::cout << "done"; break;
        } // end switch
    } // end if
    else
    {
        // Command not found.
        return false;
    }
    return true;
}

Szólj hozzá!

Címkék: command line interpreter

A bejegyzés trackback címe:

https://despina.blog.hu/api/trackback/id/tr532483234

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása