123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "cmpop.h"
-
- #include "num.h"
- #include "pile.h"
-
-
- int equali(int i, int j) {
- if ( i == j ) {
- return -1;
- } else {
- return 0;
- }
- }
- int equalf(float i, float j) {
- if ( i == j ) {
- return -1;
- } else {
- return 0;
- }
- }
- int lessThani(int i, int j) {
- if ( i < j ) {
- return -1;
- } else {
- return 0;
- }
- }
- int lessThanf(float i, float j) {
- if ( i < j ) {
- return -1;
- } else {
- return 0;
- }
- }
- int greaterThani(int i, int j) {
- if ( i > j ) {
- return -1;
- } else {
- return 0;
- }
- }
- int greaterThanf(float i, float j) {
- if ( i > j ) {
- return -1;
- } else {
- return 0;
- }
- }
-
- void cmpop( int (*opint)(int,int), int (*opfloat)(float,float), struct Pile* pile ) {
- struct NumContainer res;
- struct NumContainer num1;
- struct NumContainer num2;
- getlastnums(&num1, &num2, pile);
- push(pile, num1);
-
-
- /* getlastnums(&num1, &num2, pile); */
-
- res.t = INT;
- if ( num1.t == INT ) {
- if ( num2.t == INT ) {
- res.n.vali = opint( num1.n.vali, num2.n.vali );
- } else {
- res.n.valf = opfloat((float)num1.n.vali, num2.n.valf);
- }
- } else {
- if ( num2.t == INT ) {
- res.n.valf = opfloat(num1.n.valf, (float)num2.n.vali);
- } else {
- res.n.valf = opfloat(num1.n.valf, num2.n.valf);
- }
- }
- push(pile, res);
- }
-
- void equal(struct State* state) {
- if (state->mode == EXECUTE) {
- cmpop(equali, equalf, &state->pile);
- }
- }
-
- void less(struct State* state) {
- if (state->mode == EXECUTE) {
- cmpop(lessThani, lessThanf, &state->pile);
- }
- }
-
- void greater(struct State* state) {
- if (state->mode == EXECUTE) {
- cmpop(greaterThani, greaterThanf, &state->pile);
- }
- }
|