⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.cpp

📁 ICE-3.2 一个开源的中间件
💻 CPP
字号:
// **********************************************************************//// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.//// This copy of Ice is licensed to you under the terms described in the// ICE_LICENSE file included in this distribution.//// **********************************************************************#include <Freeze/Freeze.h>#include <ComplexDict.h>#include <TestCommon.h>#include <NodeI.h>#include <Parser.h>using namespace std;using namespace Ice;using namespace Freeze;//// Don't use namespace Complex to ensure that the Complex namespace// exists correctly.//// using namespace Complex;//static intvalidate(const Complex::ComplexDict& m){    cout << "testing database expressions... " << flush;    Complex::ComplexDict::const_iterator p;    Parser myParser;    for(p = m.begin(); p != m.end(); ++p)    {        //        // Verify the stored record is correct.        //        // COMPILERFIX: VC.NET reports an unhandled        // exception if the test is written this way:        //        //test(p->first.result == p->second->calc());        //        Complex::NodePtr n = p->second;        test(p->first.result == n->calc());        //        // Verify that the expression & result again.        //        Complex::NodePtr root = myParser.parse(p->first.expression);        test(root->calc() == p->first.result);    }    cout << "ok" << endl;    return EXIT_SUCCESS;}static const char* expressions[] = {    "2",    "10",    "2+(5*3)",    "5*(2+3)",    "10+(10+(20+(8*(2*(3*2+4+5+6)))))"};static const size_t nexpressions = sizeof(expressions)/sizeof(expressions[0]);static intpopulate(Complex::ComplexDict& m){    cout << "populating the database... " << flush;    Parser myParser;    for(size_t i = 0 ; i < nexpressions; ++i)    {        Complex::NodePtr root = myParser.parse(expressions[i]);        assert(root);        Complex::Key k;        k.expression = expressions[i];        k.result = root->calc();        m.put(pair<const Complex::Key, const Complex::NodePtr>(k, root));    }    cout << "ok" << endl;    return EXIT_SUCCESS;}static voidusage(const char* name){    cerr << "Usage: " << name << " [options] validate|populate\n";    cerr <<             "Options:\n"        "--dbdir           Location of the database directory.\n";}static intrun(int argc, char* argv[], const Ice::CommunicatorPtr& communicator, Complex::ComplexDict& m){    //    // Register a factory for the node types.    //    Ice::ObjectFactoryPtr factory = new Complex::ObjectFactoryI;    communicator->addObjectFactory(factory, "::Complex::NumberNode");    communicator->addObjectFactory(factory, "::Complex::AddNode");    communicator->addObjectFactory(factory, "::Complex::MultiplyNode");    if(argc > 1 && strcmp(argv[1], "populate") == 0)    {        return populate(m);    }    if(argc > 1 && strcmp(argv[1], "validate") == 0)    {        return validate(m);    }    usage(argv[0]);    return EXIT_FAILURE;}intmain(int argc, char* argv[]){    int status;    Ice::CommunicatorPtr communicator;       string envName = "db";    try    {        //        // Scan for --dbdir command line argument.        //        int i = 1;        while(i < argc)        {            if(strcmp(argv[i], "--dbdir") == 0)            {                if(i +1 >= argc)                {                    usage(argv[0]);                    return EXIT_FAILURE;                }                envName = argv[i+1];                envName += "/";                envName += "db";                //                // Consume arguments                //                while(i < argc - 2)                {                    argv[i] = argv[i+2];                    ++i;                }                argc -= 2;            }            else            {                ++i;            }        }        communicator = Ice::initialize(argc, argv);        Freeze::ConnectionPtr connection = createConnection(communicator, envName);        Complex::ComplexDict m(connection, "test");        status = run(argc, argv, communicator, m);    }    catch(const Ice::Exception& ex)    {        cerr << ex << endl;        status = EXIT_FAILURE;    }    try    {        communicator->destroy();    }    catch(const Ice::Exception& ex)    {        cerr << ex << endl;        status = EXIT_FAILURE;    }    return status;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -