93 lines
1.8 KiB
C
93 lines
1.8 KiB
C
#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);
|
|
}
|
|
}
|