Annotation of Examples/AppKit/CalculatorLab++/CalcEngine.C, revision 1.1

1.1     ! root        1: //
        !             2: //     CalcEngine -- mem
        !             3: //     A general C++ class that directly supports a calculator interface
        !             4: //
        !             5: //     You may freely copy, distribute and reuse the code in this example.
        !             6: //     NeXT disclaims any warranty of any kind, expressed or implied, as to
        !             7: //     its fitness for any particular use.
        !             8: //
        !             9: //     Created 8-21-90
        !            10: //
        !            11: extern "Objective-C"
        !            12: {
        !            13: #import <objc/error.h>
        !            14: }
        !            15: 
        !            16: #import "CalcEngine.h"
        !            17: 
        !            18: // Create an instance of the class and initialize flags for start-up
        !            19: CalcEngine::CalcEngine()
        !            20: {      
        !            21:     //the buffer that holds the first number entered
        !            22:     accumulator = 0;
        !            23:        
        !            24:     //the current operator
        !            25:     op = 0;
        !            26: }
        !            27: 
        !            28: // Clear the state of the calculator engine.
        !            29: void CalcEngine::clear()
        !            30: {
        !            31:     setOperation(0);
        !            32:     accumulator = 0;
        !            33: }
        !            34: 
        !            35: // Set the current operation (+ - * / ),  0 is no operation.
        !            36: void CalcEngine::setOperation(int whichOp)
        !            37: {
        !            38:     op = whichOp;
        !            39: }
        !            40: 
        !            41: // Called when one of the operation keys is pressed.
        !            42: double CalcEngine::operationKeys(int whichOp, double firstNum)
        !            43: {
        !            44:     double result;
        !            45: 
        !            46:     switch(whichOp){
        !            47:        case DIVIDE:            // Indicates a series of numbers and
        !            48:        case MULTIPLY:          // operations.  For example: 1 + 2 + 3 + ...
        !            49:        case SUBTRACT:
        !            50:        case ADD:
        !            51:        {
        !            52:            if (op)
        !            53:                result = equalsKey(firstNum);
        !            54:            else
        !            55:                result = firstNum;
        !            56:            setOperation(whichOp);
        !            57:            accumulator = result;
        !            58:            break;
        !            59:        }
        !            60:        default:                // Indicates first number has just been
        !            61:        {                       // entered.
        !            62:            result = 0;
        !            63:            break;
        !            64:        }
        !            65:     }
        !            66:     return result;
        !            67: }
        !            68: 
        !            69: // Do the actual calculation.  This is called when the equals key is pressed or
        !            70: // when an operation key is pressed in a series of numbers.
        !            71: double CalcEngine::equalsKey(double secondNum)
        !            72: {
        !            73:     double result;
        !            74: 
        !            75:     switch(op){
        !            76:        case DIVIDE:
        !            77:        {
        !            78:            if(secondNum == 0) {
        !            79:                clear();
        !            80:                NX_RAISE(0, "divideByZero", 0);
        !            81:            }
        !            82:            result = accumulator / secondNum;
        !            83:            break;
        !            84:        }
        !            85:        case MULTIPLY:
        !            86:        {
        !            87:            result = accumulator * secondNum;
        !            88:            break;
        !            89:        }
        !            90:        case SUBTRACT:
        !            91:        {
        !            92:            result = accumulator - secondNum;
        !            93:            break;
        !            94:        }
        !            95:        case ADD:
        !            96:        {
        !            97:            result = accumulator + secondNum;
        !            98:            break;
        !            99:        }
        !           100:        default:{
        !           101:            result = secondNum;
        !           102:            break;
        !           103:        }
        !           104:     }
        !           105:     clear();
        !           106:     return result;
        !           107: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.