package Sequenic.T2 ;
import java.io.* ;
import java.util.* ;
import Sequenic.T2.Msg.* ;
// import Sequenic.T2.Obj.* ;
/**
* An implementation of {@link Sequenic.T2.BaseDomain BaseDomain}, providing
* values for primitive types, enumeration types, and String. This
* domain is finite.
*
*
The exact values in the domain: see source code.
*
*
This class also exports its subdomains, e.g. the subdomain of
* integers, String, etc.
*
*/
public class BaseDomain0 extends BaseDomain {
public HashMap> domain ;
Random rnd ;
/**
* Construct a domain of integers values (like 0,1,-1, etc). This
* domain is included in the default base domain.
*/
static public ArrayList IntegerDomain_1() {
ArrayList dom = new ArrayList() ;
dom.add(0) ;
dom.add(1) ;
dom.add(-1) ;
dom.add(2) ;
dom.add(10) ;
dom.add(-2) ;
dom.add(-10) ;
dom.add(9999) ;
dom.add(-9999) ;
dom.add(1900) ;
dom.add(2000) ;
dom.add(4) ;
dom.add(28) ;
dom.add(29) ;
dom.add(Integer.MAX_VALUE) ;
dom.add(Integer.MIN_VALUE) ;
return dom ;
}
/**
* Construct a domain of strings (like "","bob", "1234",
* etc). This domain is included in the default base domain.
*/
static public ArrayList StringDomain_1() {
ArrayList dom = new ArrayList() ;
dom.add("") ;
dom.add("bob") ;
dom.add("Ans") ;
dom.add("tigeR") ;
dom.add("biRd") ;
dom.add("friday blue") ;
dom.add("friday blue") ;
dom.add("friday \n blue") ;
dom.add("fri@$& \n &^#( blue") ;
dom.add("1234") ;
dom.add("~!@#$%^&*()_-+<>?,.:;'[]{}`") ;
dom.add("a2 h$ k@") ;
dom.add("\n") ;
dom.add("\t") ;
dom.add("\"hello\"") ;
dom.add("\"") ;
dom.add("\"\"") ;
return dom ;
}
static public ArrayList BoolDomain() {
ArrayList dom = new ArrayList() ;
dom.add(true) ;
dom.add(false) ;
return dom ;
}
static public ArrayList ByteDomain_1() {
ArrayList dom = new ArrayList() ;
dom.add((byte) 0) ;
dom.add((byte) 1) ;
dom.add((byte) -1) ;
dom.add((byte) 2) ;
dom.add((byte) 10) ;
dom.add((byte) -2) ;
dom.add((byte) -10) ;
dom.add((byte) 127) ;
dom.add(Byte.MAX_VALUE) ;
dom.add(Byte.MIN_VALUE) ;
return dom ;
}
static public ArrayList LongDomain_1() {
ArrayList dom = new ArrayList() ;
dom.add(0L) ;
dom.add(1L) ;
dom.add(-1L) ;
dom.add(2L) ;
dom.add(10L) ;
dom.add(-2L) ;
dom.add(-10L) ;
dom.add(9999L) ;
dom.add(-9999L) ;
dom.add(1999999999999999999L) ;
dom.add(-1999999999999999999L) ;
dom.add(Long.MAX_VALUE) ;
dom.add(Long.MIN_VALUE) ;
return dom ;
}
static public ArrayList CharDomain_1() {
ArrayList dom = new ArrayList() ;
dom.add('a') ;
dom.add('b') ;
dom.add('z') ;
dom.add('0') ;
dom.add('9') ;
dom.add('@') ;
dom.add('\\') ;
dom.add('\'') ;
dom.add('/') ;
dom.add('\"') ;
dom.add('\n') ;
dom.add('\u0000') ;
dom.add('\uABCD') ;
dom.add('\uFFFF') ;
return dom ;
}
static public ArrayList FloatDomain_1() {
ArrayList dom = new ArrayList() ;
dom.add(0.0f) ;
dom.add(1.0f) ;
dom.add(-1.0f) ;
dom.add(1.0f/3.0f) ;
dom.add(1.0e20f) ;
dom.add(-1.0e20f) ;
dom.add(10.00000001f) ;
dom.add(-10.00000001f) ;
dom.add(Float.MAX_VALUE) ;
dom.add(Float.MIN_VALUE) ;
return dom ;
}
static public ArrayList DoubleDomain_1() {
ArrayList dom = new ArrayList() ;
dom.add(0.0) ;
dom.add(1.0) ;
dom.add(-1.0) ;
dom.add(1.0/3.0) ;
dom.add(1.0e20) ;
dom.add(-1.0e20) ;
dom.add(10.00000001) ;
dom.add(-10.00000001) ;
dom.add(Double.MAX_VALUE) ;
dom.add(Double.MIN_VALUE) ;
return dom ;
}
/**
* Construct a default base domain.
*/
public BaseDomain0() {
domain = new HashMap>() ;
rnd = new Random() ;
ArrayList intdomain = IntegerDomain_1() ;
domain.put((new Integer(0)) . getClass(), intdomain) ;
domain.put(Integer.TYPE, intdomain) ;
ArrayList booldomain = BoolDomain() ;
domain.put((new Boolean(true)) . getClass(), booldomain) ;
domain.put(Boolean.TYPE, booldomain) ;
ArrayList bytedomain = ByteDomain_1() ;
domain.put((new Byte((byte) 0)) . getClass(), bytedomain) ;
domain.put(Byte.TYPE, bytedomain) ;
ArrayList longdomain = LongDomain_1() ;
domain.put((new Long(0L)) . getClass(), longdomain) ;
domain.put(Long.TYPE, longdomain) ;
ArrayList chardomain = CharDomain_1() ;
domain.put((new Character('0')) . getClass(), chardomain) ;
domain.put(Character.TYPE, chardomain) ;
ArrayList floatdomain = FloatDomain_1() ;
domain.put((new Float(0f)) . getClass(), floatdomain) ;
domain.put(Float.TYPE, floatdomain) ;
ArrayList doubledomain = DoubleDomain_1() ;
domain.put((new Double(0.0)) . getClass(), doubledomain) ;
domain.put(Double.TYPE, doubledomain) ;
domain.put(("") . getClass(), StringDomain_1()) ;
}
/**
* @see Sequenic.T2.BaseDomain#rndGET
*/
public Object[] get(Class C) {
if (C.isEnum() && !domain.containsKey(C)) {
// add values of C to the base domain:
Object [] enumvals = C.getEnumConstants() ;
ArrayList dom = new ArrayList() ;
for (int i=0; i 0) {
Object[] r = new Object[1] ;
r[0] = enumvals[rnd.nextInt(enumvals.length)] ;
return r ;
}
}
if (!domain.containsKey(C)) return null ;
ArrayList dom = domain.get(C) ;
if (dom.isEmpty()) return null ;
Object[] r = new Object[1] ;
r[0] = dom.get(rnd.nextInt(dom.size())) ;
return r ;
}
// just used for testing below:
private Object rndGet(Class C) {
Object[] r = get(C) ;
if (r==null) return null ; else return r[0] ;
}
/**
* Just for testing the class.
*/
public static void main(String[] args) {
BaseDomain0 base = new BaseDomain0() ;
System.out.println(base.rndGet(Integer.TYPE)) ;
System.out.println(base.rndGet(Integer.TYPE)) ;
System.out.println(base.rndGet((new Integer(0)) . getClass())) ;
System.out.println(base.rndGet((new Integer(0)) . getClass())) ;
try { System.out.println(base.rndGet(Class.forName("java.lang.Integer"))) ; }
catch (Exception e) { System.out.println("ouch!") ; }
System.out.println(base.rndGet("" . getClass())) ;
System.out.println(base.rndGet("" . getClass())) ;
}
}