@@ -130,14 +130,6 @@ func generateClassContents[F any](className string, super string, mod corset.Sou
130130 }
131131 }
132132 //
133- if mod .Name == "" {
134- ninputs := getMaxRegisterIndex (schema )
135- // Write out constructor function.
136- constructor := strings .ReplaceAll (javaTraceOpen , "{class}" , className )
137- constructor = strings .ReplaceAll (constructor , "{ninputs}" , fmt .Sprintf ("%d" , ninputs ))
138- builder .WriteIndentedString (constructor )
139- }
140- //
141133 generateJavaClassFooter (builder )
142134}
143135
@@ -172,11 +164,11 @@ func generateJavaModuleHeaders[F any](mod corset.SourceModule, schema sc.AnySche
172164 reg := schema .Register (col .Register )
173165 // Check whether this is part of our module
174166 if reg .IsInputOutput () {
175- byteWidth := fmt .Sprintf ("%d" , byteWidth ( reg .Width ) )
167+ bitWidth := fmt .Sprintf ("%d" , reg .Width )
176168 name := fmt .Sprintf ("%s.%s" , mod .Name , reg .Name )
177169 regStr := fmt .Sprintf ("%d" , col .Register .Index (schema .Width ()))
178170 i1Builder .WriteIndentedString (
179- "headers.add(new ColumnHeader(\" " , name , "\" ," , regStr , "," , byteWidth , ",length));\n " )
171+ "headers.add(new ColumnHeader(\" " , name , "\" ," , regStr , "," , bitWidth , ",length));\n " )
180172 //
181173 count ++
182174 }
@@ -279,7 +271,7 @@ func generateJavaModuleRegisterFields[F any](mod corset.SourceModule, schema sc.
279271 // Determine suitable name for field
280272 fieldName := toRegisterName (col .Register , reg .Name )
281273 //
282- builder .WriteIndentedString ("private MappedByteBuffer " , fieldName , ";\n " )
274+ builder .WriteIndentedString ("private Column " , fieldName , ";\n " )
283275 // increase count
284276 count ++
285277 }
@@ -337,7 +329,7 @@ func generateJavaModuleMetadata(metadata typed.Map, builder indentBuilder) {
337329 builder .WriteIndentedString ("}\n \n " )
338330 }
339331
340- builder .WriteIndentedString ("public void addMetadata( String key, Object value ) { metadata.put(key,value) ; }\n " )
332+ builder .WriteIndentedString ("public Map< String, Object> getMetaData( ) { return metadata; }\n " )
341333}
342334
343335func generateJavaModuleConstructor (classname string , mod corset.SourceModule , builder indentBuilder ) {
@@ -365,7 +357,7 @@ func generateJavaModuleOpen[F any](mod corset.SourceModule, schema sc.AnySchema[
365357 //
366358 innerBuilder := builder .Indent ()
367359 //
368- builder .WriteIndentedString ("private void open(MappedByteBuffer [] registers) {\n " )
360+ builder .WriteIndentedString ("public void open(Column [] registers) {\n " )
369361 innerBuilder .WriteIndentedString ("// initialise register(s)\n " )
370362 // Write register initialisers
371363 for _ , col := range mod .Registers (schema .Width ()) {
@@ -443,13 +435,11 @@ func generateJavaModuleColumnSetter[F any](className string, methodName string,
443435 //
444436 switch {
445437 case bitwidth == 1 :
446- i1Builder .WriteIndentedString (fieldName , ".put((byte) (val ? 1 : 0));\n " )
447- case bitwidth <= 8 :
448- i1Builder .WriteIndentedString (fieldName , ".put((byte) val);\n " )
438+ i1Builder .WriteIndentedString (fieldName , ".write(val);\n " )
449439 case bitwidth <= 63 :
450- generateJavaModuleLongPutter ( col . Name , fieldName , bitwidth , i1Builder )
440+ i1Builder . WriteIndentedString ( fieldName , ".write(val); \n " )
451441 default :
452- generateJavaModuleBytesPutter ( col . Name , fieldName , bitwidth , i1Builder )
442+ i1Builder . WriteIndentedString ( fieldName , ".write(val.trimLeadingZeros().toArray()); \n " )
453443 }
454444 //
455445 i1Builder .WriteIndentedString ("\n " )
@@ -470,41 +460,6 @@ func generateJavaModuleLegacyColumnSetter(className string, methodName string, b
470460 builder .WriteIndentedString ("}\n \n " )
471461}
472462
473- func generateJavaModuleLongPutter (columnName , fieldName string , bitwidth uint , builder indentBuilder ) {
474- n := byteWidth (bitwidth )
475- i1Builder := builder .Indent ()
476- builder .WriteIndentedString ("if(val < 0 || val >= " , maxValueStr (bitwidth ), "L) {\n " )
477- i1Builder .WriteIndentedString (
478- "throw new IllegalArgumentException(\" " , columnName + " has invalid value (\" + val + \" )\" );\n " )
479- builder .WriteIndentedString ("}\n " )
480- //
481- for i := int (n ) - 1 ; i >= 0 ; i -- {
482- shift := (i * 8 )
483- if shift == 0 {
484- builder .WriteIndentedString (fieldName , ".put((byte) val);\n " )
485- } else {
486- builder .WriteIndentedString (fieldName , ".put((byte) (val >> " , fmt .Sprintf ("%d" , shift ), "));\n " )
487- }
488- }
489- }
490-
491- func generateJavaModuleBytesPutter (columnName , fieldName string , bitwidth uint , builder indentBuilder ) {
492- i1Builder := builder .Indent ()
493- n := byteWidth (bitwidth )
494- //
495- builder .WriteIndentedString ("// Trim array to size\n " )
496- builder .WriteIndentedString ("Bytes bs = val.trimLeadingZeros();\n " )
497- builder .WriteIndentedString ("// Sanity check against expected width\n " )
498- builder .WriteIndentedString (fmt .Sprintf ("if(bs.bitLength() > %d) {\n " , bitwidth ))
499- i1Builder .WriteIndentedString (
500- fmt .Sprintf ("throw new IllegalArgumentException(\" %s has invalid width (\" +bs.bitLength()+\" bits)\" );\n " , columnName ))
501- builder .WriteIndentedString ("}\n " )
502- builder .WriteIndentedString ("// Write padding (if necessary)\n " )
503- builder .WriteIndentedString (fmt .Sprintf ("for(int i=bs.size(); i<%d; i++) { %s.put((byte) 0); }\n " , n , fieldName ))
504- builder .WriteIndentedString ("// Write bytes\n " )
505- builder .WriteIndentedString (fmt .Sprintf ("for(int i=0; i<bs.size(); i++) { %s.put(bs.get(i)); }\n " , fieldName ))
506- }
507-
508463func generateJavaModuleValidateRow [F any ](className string , mod corset.SourceModule , schema sc.AnySchema [F ],
509464 builder indentBuilder ) {
510465 //
@@ -546,10 +501,18 @@ func generateJavaModuleFillAndValidateRow[F any](className string, mod corset.So
546501 if reg .IsInputOutput () {
547502 name := toRegisterName (col .Register , reg .Name )
548503 regstr := fmt .Sprintf ("%d" , col .Register .Index (schema .Width ()))
549- byteWidth := fmt .Sprintf ("%d" , byteWidth (reg .Width ))
550504 // Yes, include register
551505 i1Builder .WriteIndentedString ("if(!filled.get(" , regstr , ")) {\n " )
552- i2Builder .WriteIndentedString (name , ".position(" , name , ".position() + " , byteWidth , ");\n " )
506+ //
507+ switch {
508+ case reg .Width == 1 :
509+ i2Builder .WriteIndentedString (name , ".write(false);\n " )
510+ case reg .Width <= 63 :
511+ i2Builder .WriteIndentedString (name , ".write(0L);\n " )
512+ default :
513+ i2Builder .WriteIndentedString (name , ".write(new byte[0]);\n " )
514+ }
515+ //
553516 i1Builder .WriteIndentedString ("}\n " )
554517 }
555518 }
0 commit comments