8 public Sources(State s) {
12 public boolean setSource(SetDescriptor sd) {
13 SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
14 SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
16 if (usedblock.isSubset(sd))
18 if (usedinode.isSubset(sd))
23 public boolean allocSource(SetDescriptor sd) {
24 return !setSource(sd);
26 public SetDescriptor getSourceSet(SetDescriptor sd) {
27 SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
28 SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
30 if (usedblock.isSubset(sd))
31 return (SetDescriptor)state.stSets.get("FreeBlock");
32 if (usedinode.isSubset(sd))
33 return (SetDescriptor)state.stSets.get("FreeInode");
38 public void generateSourceAlloc(CodeWriter cr,VarDescriptor vd, SetDescriptor sd) {
39 TypeDescriptor td=sd.getType();
40 Expr e=td.getSizeExpr();
41 VarDescriptor size=VarDescriptor.makeNew("size");
42 cr.pushSymbolTable(state.stGlobals);
45 cr.outputline(td.getGenerateType().getSafeSymbol()+" "+vd.getSafeSymbol()+"=("+td.getGenerateType().getSafeSymbol()+") malloc("+size.getSafeSymbol()+");");
48 public boolean relsetSource(RelationDescriptor rd, boolean domain) {
50 return setSource(rd.getDomain());
51 else return setSource(rd.getRange());
53 public boolean relallocSource(RelationDescriptor rd, boolean domain) {
55 return allocSource(rd.getDomain());
56 else return allocSource(rd.getRange());
59 public SetDescriptor relgetSourceSet(RelationDescriptor rd, boolean domain) {
61 return getSourceSet(rd.getDomain());
62 else return getSourceSet(rd.getRange());
64 public void relgenerateSourceAlloc(CodeWriter cr,VarDescriptor vd, RelationDescriptor rd, boolean domain) {
65 SetDescriptor sd=null;
70 TypeDescriptor td=sd.getType();
71 Expr e=td.getSizeExpr();
72 VarDescriptor size=VarDescriptor.makeNew("size");
73 cr.pushSymbolTable(state.stGlobals);
76 cr.outputline(td.getGenerateType().getSafeSymbol()+" "+vd.getSafeSymbol()+"=("+td.getGenerateType().getSafeSymbol()+") malloc("+size.getSafeSymbol()+");");