CodeGen.Generate C# (CSharp) Method

Generate() public method

public Generate ( String filename ) : void
filename String
return void
    public void Generate(String filename)
    {
	AppDomain ad = Thread.GetDomain(); //AppDomain.CreateDomain("First", null, null);
	AssemblyName an = new AssemblyName();
    an.Name = filename + ".exe"; //AssemblyName.CreateSimpleName(filename + ".exe", "LispExe", "Lisp Executable", "default_alias");
	AssemblyBuilder ab = ad.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);
	ModuleBuilder mb = ab.DefineDynamicModule(filename + ".exe", filename + ".exe");
	MethodBuilder methodb;
	//DescriptorInfo di = new DescriptorInfo(0);
	tb = mb.DefineType(filename);
	
	//di.SetReturnType(typeof(void));
	//di.MethodAttributes = MethodAttributes.Static | MethodAttributes.Public;
	methodb = tb.DefineMethod("Main", MethodAttributes.Static | MethodAttributes.Public, typeof(void), null);
	il = methodb.GetILGenerator();

	do{
	    expr.Head.Visit(this);
    	    if (expr.Head is FunctionDef)
    		GenerateDefStub(((FunctionDef)expr.Head).Name);
     	    else if (expr.Head is GlobalVarDef)
    		GenerateDefStub(((GlobalVarDef)expr.Head).Name);
 	    else if (expr.Head.ExpType == typeof(int))
  		GenerateNumericExpStub();
    	    else if (expr.Head.ExpType == typeof(bool))
		GenerateBoolExpStub();
    	    else if (expr.Head.ExpType == typeof(CList)) 
    		GenerateListExpStub();
	    
	    expr = expr.Tail;
	}while(expr != null);
	
	il.Emit(OpCodes.Ret);
	tb.CreateType();
	
	ab.SetEntryPoint((mb.GetType(filename)).GetMethod("Main"));
	ab.Save(filename + ".exe");
    }

Usage Example

        public void WavOpusSimilarity()
        {
            string opusFingerprint;
            string pcmFingerprint;

            // cut out 30 second from the middle of the file
            var opusDataSection = new short[330750];
            var pcmDataSection  = new short[330750];

            Buffer.BlockCopy(opusData, 330750, opusDataSection, 0, 330750);
            Buffer.BlockCopy(pcmData, 340775, pcmDataSection, 0, 330750);       // starts 1 sec later than opus section

            // generate fingerprints
            var echoPrint = new CodeGen();

            opusFingerprint = echoPrint.Generate(opusDataSection);
            pcmFingerprint  = echoPrint.Generate(pcmDataSection);

            byte[] unbase64edOpusFingerprint = Convert.FromBase64String(opusFingerprint.Replace('-', '+').Replace('_', '/'));
            string unzippedOpusFingerprint   = ZlibStream.UncompressString(unbase64edOpusFingerprint);

            byte[] unbase64edPcmFingerprint = Convert.FromBase64String(pcmFingerprint.Replace('-', '+').Replace('_', '/'));
            string unzippedPcmFingerprint   = ZlibStream.UncompressString(unbase64edPcmFingerprint);

            // compute Damereau-Levenshein Distance in absence of actual fingerprint matching algorithm
            int   similarity = ComputeLevenshteinDistance(unzippedOpusFingerprint, unzippedPcmFingerprint);
            float averageDifferencePerCharacter = (float)similarity / (unzippedOpusFingerprint.Length + unzippedPcmFingerprint.Length / 2);

            Assert.Less(averageDifferencePerCharacter, 0.4);
            Assert.Greater(averageDifferencePerCharacter, 0.001);
        }
All Usage Examples Of CodeGen::Generate