חזור לתיקייה: גליון 1

main

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה

    main

    02340124

    מבוא לתכנות מערכות

    רשימות הרצאה לקריאה בשבת

    main

    הופק מתוך תקיית התואר של שקד

    uni-folder.vercel.app

    main.cpp

    הערה (קובץ קוד)

    קובץ זה הוא קובץ קוד מסוג CPP.

    #include <iostream>
    
    #include "BlockChain.h"
    #include "Utilities.h"
    
    enum COMMANDS
    {
        FORMAT, HASH, COMPRESS, VERIFY, ERROR
    };
    
    int compareString(const char *s1, const char *s2)
    {
        while (*s1 && (*s1 == *s2))
        {
            s1++;
            s2++;
        }
        return *s1 - *s2;
    }
    
    COMMANDS getCommand(char *op)
    {
        if (!compareString(op, "format"))
            return FORMAT;
        if (!compareString(op, "hash"))
            return HASH;
        if (!compareString(op, "compress"))
            return COMPRESS;
        if (!compareString(op, "verify"))
            return VERIFY;
        return ERROR;
    }
    
    void format(char *readPath, char *hashPath)
    {
        ifstream read(readPath);
        ofstream write(hashPath);
        BlockChain chain = BlockChainLoad(read);
        BlockChainDump(chain, write);
        BlockChainDestroy(chain);
    }
    
    void hash(char *readPath, char *hashPath)
    {
        ifstream read(readPath);
        ofstream write(hashPath);
        BlockChain chain = BlockChainLoad(read);
        BlockChainDumpHashed(chain, write);
        BlockChainDestroy(chain);
    }
    
    void compress(char *readPath, char *hashPath)
    {
        ifstream read(readPath);
        ofstream write(hashPath);
        BlockChain chain = BlockChainLoad(read);
        BlockChainCompress(chain);
        BlockChainDump(chain, write);
        BlockChainDestroy(chain);
    }
    
    void verify(char *readPath, char *hashPath)
    {
        ifstream read(readPath), hash(hashPath);
        BlockChain chain = BlockChainLoad(read);
        if (BlockChainVerifyFile(chain, hash))
            std::cout << "Verification passed" << std::endl;
        else
            std::cout << "Verification failed" << std::endl;
        BlockChainDestroy(chain);
    }
    
    int main(int argc, char **argv)
    {
        if (argc == 4)
        {
            COMMANDS op = getCommand(argv[1]);
            switch (op)
            {
                case FORMAT:
                {
                    format(argv[2], argv[3]);
                    break;
                }
                case HASH:
                {
                    hash(argv[2], argv[3]);
                    break;
                }
                case COMPRESS:
                {
                    compress(argv[2], argv[3]);
                    break;
                }
                case VERIFY:
                {
                    verify(argv[2], argv[3]);
                    break;
                }
                default:
                    std::cout << getErrorMessage() << std::endl;
            }
        }
        else
            std::cout << getErrorMessage() << std::endl;
    
        return 0;
    }