lib-utils-ts
Version:
<img src="https://img.shields.io/npm/v/lib-utils-ts"/> <img src="https://img.shields.io/snyk/vulnerabilities/npm/lib-utils-ts"/> <img src="https://img.shields.io/npm/l/lib-utils-ts"/> <img src="https://img.shields.io/github/languages/top/devGnode/lib-util
96 lines (94 loc) • 3.4 kB
text/typescript
import {operators, primitiveNumber} from "./Globals";
import {RuntimeException} from "../Exception";
import {Objects} from "../type/Objects";
/***
* @Operators<T extends Number>
*/
export abstract class Operators<T extends Number> implements operators<T,Number>{
/***
*
*/
public add( a:T, b:T ):Number{return a.valueOf() + b.valueOf();}
public mul( a:T, b:T ):Number{return a.valueOf() * b.valueOf();}
public div( a:T, b:T ):Number{return a.valueOf() / b.valueOf();}
public sous( a:T, b:T ):Number{return a.valueOf() - b.valueOf();}
public inc( a:T ):Number{return a.valueOf()+1;}
public dec( a:T ):Number{return a.valueOf()-1;}
public and( a:T, b:T ):Number{return a.valueOf()&b.valueOf();}
public or( a:T, b:T ):Number{return a.valueOf()|b.valueOf();}
public xor( a:T, b:T ):Number{return a.valueOf()^b.valueOf();}
/***
* @PrimitiveOperators
*/
public static PrimitiveOperators = class PrimitiveOperator extends Operators<primitiveNumber> implements operators<primitiveNumber,primitiveNumber>{
public add(a: primitiveNumber, b: primitiveNumber):primitiveNumber {
Objects.requireNotNull(a);
Objects.requireNotNull(b);
return a.newer( super.add(a, b) ).assert(null);
}
/***
*
*/
public and(a: primitiveNumber, b: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
Objects.requireNotNull(b);
return a.newer( super.and(a, b) ).assert(null);
}
/***
*
*/
public dec(a: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
return a.newer( super.dec(a) ).assert(null);
}
/***
*
*/
public div(a: primitiveNumber, b: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
Objects.requireNotNull(b);
if(b.valueOf().equals(0)) throw new RuntimeException("prohibited to divide by zero");
return a.newer( super.div(a, b) ).assert(null);
}
/***
*
*/
public inc(a: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
return a.newer( super.inc(a) ).assert(null);
}
/***
*
*/
public mul(a: primitiveNumber, b: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
Objects.requireNotNull(b);
return a.newer( super.mul(a, b) ).assert(null);
}
/***
*
*/
public or(a: primitiveNumber, b: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
Objects.requireNotNull(b);
return a.newer( super.or(a, b) ).assert(null);
}
/***
*
*/
public sous(a: primitiveNumber, b: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
Objects.requireNotNull(b);
return a.newer( super.sous(a, b) ).assert(null);
}
/***
*
*/
public xor(a: primitiveNumber, b: primitiveNumber): primitiveNumber {
Objects.requireNotNull(a);
Objects.requireNotNull(b);
return a.newer( super.xor(a, b) ).assert(null);
}
}
}
Object.package(this);