8 public Sources(State s) {
12 public boolean setSource(SetDescriptor sd) {
13 if (sd.getSymbol().equals("InodeBitmapBlock"))
15 if (sd.getSymbol().equals("InodeTableBlock"))
17 if (sd.getSymbol().equals("RootDirectoryInode"))
22 public boolean allocSource(SetDescriptor sd) {
23 return !setSource(sd);
25 public SetDescriptor getSourceSet(SetDescriptor sd) {
26 if (sd.getSymbol().equals("InodeBitmapBlock"))
27 return (SetDescriptor)state.stSets.get("FreeBlock");
28 if (sd.getSymbol().equals("InodeTableBlock"))
29 return (SetDescriptor)state.stSets.get("FreeBlock");
30 if (sd.getSymbol().equals("RootDirectoryInode"))
31 return (SetDescriptor)state.stSets.get("FreeInode");
35 public void generateSourceAlloc(CodeWriter cr,VarDescriptor vd, SetDescriptor sd) {
36 TypeDescriptor td=sd.getType();
37 Expr e=td.getSizeExpr();
38 VarDescriptor size=VarDescriptor.makeNew("size");
39 cr.pushSymbolTable(state.stGlobals);
42 cr.outputline(td.getGenerateType().getSafeSymbol()+" "+vd.getSafeSymbol()+"=("+td.getGenerateType().getSafeSymbol()+") malloc("+size.getSafeSymbol()+");");
45 public boolean relsetSource(RelationDescriptor rd, boolean domain) {
47 return setSource(rd.getDomain());
48 else return setSource(rd.getRange());
50 public boolean relallocSource(RelationDescriptor rd, boolean domain) {
52 return allocSource(rd.getDomain());
53 else return allocSource(rd.getRange());
56 public SetDescriptor relgetSourceSet(RelationDescriptor rd, boolean domain) {
58 return getSourceSet(rd.getDomain());
59 else return getSourceSet(rd.getRange());
61 public void relgenerateSourceAlloc(CodeWriter cr,VarDescriptor vd, RelationDescriptor rd, boolean domain) {
62 SetDescriptor sd=null;
67 TypeDescriptor td=sd.getType();
68 Expr e=td.getSizeExpr();
69 VarDescriptor size=VarDescriptor.makeNew("size");
70 cr.pushSymbolTable(state.stGlobals);
73 cr.outputline(td.getGenerateType().getSafeSymbol()+" "+vd.getSafeSymbol()+"=("+td.getGenerateType().getSafeSymbol()+") malloc("+size.getSafeSymbol()+");");