Added cddlib-094h from http://www.inf.ethz.ch/personal/fukudak/cdd_home/
Change-Id: I64519509269e434b1b9ea87c3fe0805e711c0ac9
diff --git a/third_party/cddlib/examples-ml/IOPolyhedra.m b/third_party/cddlib/examples-ml/IOPolyhedra.m
new file mode 100644
index 0000000..b5ed23f
--- /dev/null
+++ b/third_party/cddlib/examples-ml/IOPolyhedra.m
@@ -0,0 +1,123 @@
+(* IOPolyhedra.m: written by Komei Fukuda; Version-980111 *)
+
+ReadPolyhedraData[filename_String]:=
+ Block[{rf,outlist={},row={},m,n,i,val,st=" ",ty},
+ rf=OpenRead[filename];
+ While[st=!=EndOfFile && st=!="begin",
+ st=Read[rf,String];
+ ];
+ {m,n,ty}=Read[rf,{Number,Number,Word}];
+ st=Skip[rf,String];
+ Print["m=", m,", n=",n, " type=", ty];
+ Do[
+ If[ty!="rational",
+ row=Read[rf,Table[Number,{n}]],
+ row=Read[rf,Table[Word,{n}]];row=ToExpression[row]
+ ];
+ AppendTo[outlist,row],
+ {i,m}
+ ];
+ Close[rf];
+ outlist
+ ];
+
+
+ReadIncidenceData[filename_String]:=
+ Block[{rf,outlist={},row={},m,n,n1,i,val,st=" ",inc,colon},
+ rf=OpenRead[filename];
+ While[st=!=EndOfFile && st=!="begin",
+ st=Read[rf,String];
+ ];
+ {m,n,n1}=Read[rf,{Number,Number,Number}];
+ Print["m=", m,", n=",n];
+ Do[
+ {inc}=Read[rf,{Number}];
+ colon=Read[rf,{Word}];
+ row=Read[rf,Table[Number,{Abs[inc]}]];
+ If[inc>0,
+ AppendTo[outlist,row],
+ AppendTo[outlist,Complement[Range[n1],row]]
+ ],
+ {i,m}
+ ];
+ Close[rf];
+ outlist
+ ];
+
+
+ReadAdjacencyData[filename_String]:=
+ Block[{rf,outlist={},row={},v,num,i,val,st=" ",deg,colon},
+ rf=OpenRead[filename];
+ While[st=!=EndOfFile && st=!="begin",
+ st=Read[rf,String];
+ ];
+ {v}=Read[rf,{Number}];
+ Print["v =", v];
+ Do[
+ {num, deg}=Read[rf,{Number, Number}];
+ colon=Read[rf,{Word}];
+ If[deg >0, row=Read[rf,Table[Number,{deg}]], row={}];
+ AppendTo[outlist,row],
+ {i,v}
+ ];
+ Close[rf];
+ outlist
+ ];
+
+
+WritePolyhedraIne[a_List,b_List,filename_String,type_String:"real"]:=
+ Block[{wf,m,n,i,j,str},
+ wf=OpenWrite[filename];
+ {m,n}=Dimensions[a];
+ Write[wf,OutputForm["H-representation"]];
+ Write[wf,OutputForm["begin"]];
+ Write[wf,m,OutputForm[" "],n+1,OutputForm[" "],OutputForm[type]];
+ Do[
+ str="";
+ Do[
+ If[j==0,
+ str=StringJoin[str," ",ToString[b[[i]]]],
+ str=StringJoin[str," ",ToString[-a[[i,j]],FormatType->InputForm]]
+ ],
+ {j,0,n}
+ ];
+ Write[wf,OutputForm[str]],
+ {i,m}
+ ];
+ Write[wf,OutputForm["end"]];
+ Write[wf,OutputForm["incidence"]];
+ Write[wf,OutputForm["input_incidence"]];
+ Write[wf,OutputForm["input_adjacency"]];
+ Write[wf,OutputForm["adjacency"]];
+ Close[wf];
+ ];
+
+VEtoIne[a_List,b_List,filename_String]:=WritePolyhedraIne[a,b,filename];
+
+WritePolyhedraExt[a_List,filename_String,type_String:"real"]:=
+ Block[{wf,m,n,i,j,str},
+ wf=OpenWrite[filename];
+ {m,n}=Dimensions[a];
+ Write[wf,OutputForm["V-representation"]];
+ Write[wf,OutputForm["begin"]];
+ Write[wf,m,OutputForm[" "],n+1,OutputForm[" "],OutputForm[type]];
+ Do[
+ str="";
+ Do[
+ If[j==0,
+ str=StringJoin[str," ",ToString[1]],
+ str=StringJoin[str," ",ToString[a[[i,j]],FormatType->InputForm]]
+ ],
+ {j,0,n}
+ ];
+ Write[wf,OutputForm[str]],
+ {i,m}
+ ];
+ Write[wf,OutputForm["end"]];
+ Write[wf,OutputForm["hull"]];
+ Write[wf,OutputForm["incidence"]];
+ Write[wf,OutputForm["input_incidence"]];
+ Write[wf,OutputForm["input_adjacency"]];
+ Write[wf,OutputForm["adjacency"]];
+ Close[wf];
+ ];