Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Robotlab
labcomm-core
Commits
3ca451b1
Commit
3ca451b1
authored
Nov 18, 2014
by
Anders Blomdell
Browse files
References working for Java.
parent
0a5c322f
Changes
8
Hide whitespace changes
Inline
Side-by-side
compiler/Java_CodeGen.jrag
View file @
3ca451b1
...
...
@@ -332,15 +332,18 @@ aspect Java_Class {
env.println("register(e, true);");
env.unindent();
env.println("}");
env.println();
env.println("public static void register(Encoder e, boolean sendMetaData) throws IOException {");
env.indent();
Java_emitUserTypeDeps(env, null, true);
env.println("e.register(dispatcher);");
env.unindent();
env.println("}");
env.println("public static void registerSampleRef(Encoder e) throws IOException{");
env.indent();
env.println("e.registerSampleRef(dispatcher);");
env.unindent();
env.println("}");
env.println();
}
...
...
@@ -432,6 +435,11 @@ aspect Java_Class {
env.println("d.register(dispatcher, h);");
env.unindent();
env.println("}");
env.println("public static void registerSampleRef(Decoder d) throws IOException {");
env.indent();
env.println("d.registerSampleRef(dispatcher);");
env.unindent();
env.println("}");
env.println();
...
...
@@ -820,7 +828,7 @@ aspect Java_Class {
public void PrimType.Java_emitTypePrefix(Java_env env) {
switch (getToken()) {
case LABCOMM_STRING: { env.print("String"); } break;
case LABCOMM_SAMPLE: { env.print("
Sample
"); } break;
case LABCOMM_SAMPLE: { env.print("
Class
"); } break;
default: { env.print(getName()); } break;
}
}
...
...
@@ -947,7 +955,7 @@ aspect Java_Class {
public void PrimType.Java_emitType(Java_env env) {
switch (getToken()) {
case LABCOMM_STRING: { env.print("String"); } break;
case LABCOMM_SAMPLE: { env.print("
Sample
"); } break;
case LABCOMM_SAMPLE: { env.print("
Class
"); } break;
default: { env.print(getName()); } break;
}
}
...
...
lib/csharp/se/lth/control/labcomm/DecoderChannel.cs
View file @
3ca451b1
...
...
@@ -162,12 +162,14 @@ namespace se.lth.control.labcomm {
public
Type
decodeSampleRef
()
{
int
index
=
(
int
)
ReadInt
(
4
);
DecoderRegistry
.
Entry
e
=
ref_registry
.
get
(
index
);
if
(
e
!
=
null
)
{
try
{
DecoderRegistry
.
Entry
e
=
ref_registry
.
get
(
index
);
return
e
.
getSampleDispatcher
().
getSampleClass
();
}
else
{
}
catch
(
NullReferenceException
)
{
return
null
;
}
}
}
}
lib/java/se/lth/control/labcomm/Constant.java
View file @
3ca451b1
...
...
@@ -12,8 +12,9 @@ public class Constant {
*/
public
static
final
int
VERSION
=
0x01
;
public
static
final
int
SAMPLE_DEF
=
0x02
;
public
static
final
int
TYPE_DEF
=
0x03
;
public
static
final
int
TYPE_BINDING
=
0x04
;
public
static
final
int
SAMPLE_REF
=
0x03
;
public
static
final
int
TYPE_DEF
=
0x04
;
public
static
final
int
TYPE_BINDING
=
0x05
;
public
static
final
int
PRAGMA
=
0x3f
;
public
static
final
int
FIRST_USER_INDEX
=
0x40
;
/* ..0xffffffff */
...
...
lib/java/se/lth/control/labcomm/Decoder.java
View file @
3ca451b1
...
...
@@ -6,6 +6,8 @@ public interface Decoder {
public
void
register
(
SampleDispatcher
dispatcher
,
SampleHandler
handler
)
throws
IOException
;
public
void
registerSampleRef
(
SampleDispatcher
dispatcher
)
throws
IOException
;
public
boolean
decodeBoolean
()
throws
IOException
;
public
byte
decodeByte
()
throws
IOException
;
public
short
decodeShort
()
throws
IOException
;
...
...
@@ -15,6 +17,6 @@ public interface Decoder {
public
double
decodeDouble
()
throws
IOException
;
public
String
decodeString
()
throws
IOException
;
public
int
decodePacked32
()
throws
IOException
;
public
Sample
decodeSampleRef
()
throws
IOException
;
public
Class
decodeSampleRef
()
throws
IOException
;
}
lib/java/se/lth/control/labcomm/DecoderChannel.java
View file @
3ca451b1
...
...
@@ -9,14 +9,11 @@ import java.io.EOFException;
public
class
DecoderChannel
implements
Decoder
{
private
DataInputStream
in
;
private
DecoderRegistry
registry
;
private
DecoderRegistry
def_registry
=
new
DecoderRegistry
();
private
DecoderRegistry
ref_registry
=
new
DecoderRegistry
();
private
DecoderChannel
(
InputStream
in
,
DecoderRegistry
reg
)
throws
IOException
{
this
.
in
=
new
DataInputStream
(
in
);
registry
=
reg
;
}
public
DecoderChannel
(
InputStream
in
)
throws
IOException
{
this
(
in
,
new
D
ecoderRegistry
()
);
this
.
in
=
new
D
ataInputStream
(
in
);
}
private
void
processSampleDef
()
throws
IOException
{
...
...
@@ -25,26 +22,34 @@ public class DecoderChannel implements Decoder {
int
signature_length
=
decodePacked32
();
byte
[]
signature
=
new
byte
[
signature_length
];
ReadBytes
(
signature
,
signature_length
);
registry
.
add
(
index
,
name
,
signature
);
def_
registry
.
add
(
index
,
name
,
signature
);
}
private
void
processSampleRef
()
throws
IOException
{
int
index
=
decodePacked32
();
String
name
=
decodeString
();
int
signature_length
=
decodePacked32
();
byte
[]
signature
=
new
byte
[
signature_length
];
ReadBytes
(
signature
,
signature_length
);
ref_registry
.
add
(
index
,
name
,
signature
);
}
private
void
processTypeDef
(
int
len
)
throws
IOException
{
System
.
out
.
println
(
"Got TypeDef: skipping "
+
len
+
" bytes"
);
System
.
err
.
println
(
"Got TypeDef: skipping "
+
len
+
" bytes"
);
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
decodeByte
();
}
}
private
void
processTypeBinding
(
int
len
)
throws
IOException
{
System
.
out
.
println
(
"Got TypeBinding: skipping "
+
len
+
" bytes"
);
System
.
err
.
println
(
"Got TypeBinding: skipping "
+
len
+
" bytes"
);
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
decodeByte
();
}
}
private
void
processPragma
(
int
len
)
throws
IOException
{
System
.
out
.
println
(
"Got Pragma: skipping "
+
len
+
" bytes"
);
System
.
err
.
println
(
"Got Pragma: skipping "
+
len
+
" bytes"
);
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
decodeByte
();
}
...
...
@@ -66,6 +71,9 @@ public class DecoderChannel implements Decoder {
case
Constant
.
SAMPLE_DEF
:
{
processSampleDef
();
}
break
;
case
Constant
.
SAMPLE_REF
:
{
processSampleRef
();
}
break
;
case
Constant
.
TYPE_DEF
:
{
processTypeDef
(
length
);
}
break
;
...
...
@@ -76,7 +84,7 @@ public class DecoderChannel implements Decoder {
processPragma
(
length
);
}
break
;
default
:
{
DecoderRegistry
.
Entry
e
=
registry
.
get
(
tag
);
DecoderRegistry
.
Entry
e
=
def_
registry
.
get
(
tag
);
if
(
e
==
null
)
{
throw
new
IOException
(
"Unhandled tag "
+
tag
);
}
...
...
@@ -103,7 +111,11 @@ public class DecoderChannel implements Decoder {
public
void
register
(
SampleDispatcher
dispatcher
,
SampleHandler
handler
)
throws
IOException
{
registry
.
add
(
dispatcher
,
handler
);
def_registry
.
add
(
dispatcher
,
handler
);
}
public
void
registerSampleRef
(
SampleDispatcher
dispatcher
)
throws
IOException
{
ref_registry
.
add
(
dispatcher
,
null
);
}
private
void
ReadBytes
(
byte
[]
result
,
int
length
)
throws
IOException
{
...
...
@@ -173,10 +185,15 @@ public class DecoderChannel implements Decoder {
return
(
int
)
(
res
&
0xffffffff
);
}
public
Sample
decodeSampleRef
()
throws
IOException
{
public
Class
decodeSampleRef
()
throws
IOException
{
int
index
=
in
.
readInt
();
throw
new
IOException
(
"IMPLEMENT"
);
// return null;
try
{
DecoderRegistry
.
Entry
e
=
ref_registry
.
get
(
index
);
return
e
.
getDispatcher
().
getSampleClass
();
}
catch
(
NullPointerException
e
)
{
return
null
;
}
}
}
...
...
lib/java/se/lth/control/labcomm/Encoder.java
View file @
3ca451b1
...
...
@@ -5,9 +5,10 @@ import java.io.IOException;
public
interface
Encoder
{
public
void
register
(
SampleDispatcher
dispatcher
)
throws
IOException
;
public
void
registerSampleRef
(
Sample
sample
)
throws
IOException
;
public
void
registerSampleRef
(
Sample
Dispatcher
dispatcher
)
throws
IOException
;
public
void
begin
(
Class
<?
extends
Sample
>
c
)
throws
IOException
;
public
void
end
(
Class
<?
extends
Sample
>
c
)
throws
IOException
;
public
void
encodeBoolean
(
boolean
value
)
throws
IOException
;
public
void
encodeByte
(
byte
value
)
throws
IOException
;
public
void
encodeShort
(
short
value
)
throws
IOException
;
...
...
@@ -17,6 +18,6 @@ public interface Encoder {
public
void
encodeDouble
(
double
value
)
throws
IOException
;
public
void
encodeString
(
String
value
)
throws
IOException
;
public
void
encodePacked32
(
long
value
)
throws
IOException
;
public
void
encodeSampleRef
(
Sample
value
)
throws
IOException
;
public
void
encodeSampleRef
(
Class
value
)
throws
IOException
;
}
lib/java/se/lth/control/labcomm/EncoderChannel.java
View file @
3ca451b1
...
...
@@ -8,16 +8,14 @@ import java.io.OutputStream;
public
class
EncoderChannel
implements
Encoder
{
private
Writer
writer
;
private
ByteArrayOutputStream
bytes
;
private
DataOutputStream
data
;
private
EncoderRegistry
registry
;
private
ByteArrayOutputStream
bytes
=
new
ByteArrayOutputStream
();
private
DataOutputStream
data
=
new
DataOutputStream
(
bytes
);
private
EncoderRegistry
def_registry
=
new
EncoderRegistry
();
private
EncoderRegistry
ref_registry
=
new
EncoderRegistry
();
private
int
current_tag
;
public
EncoderChannel
(
Writer
writer
)
throws
IOException
{
this
.
writer
=
writer
;
bytes
=
new
ByteArrayOutputStream
();
data
=
new
DataOutputStream
(
bytes
);
registry
=
new
EncoderRegistry
();
begin
(
Constant
.
VERSION
);
encodeString
(
Constant
.
CURRENT_VERSION
);
...
...
@@ -29,7 +27,7 @@ public class EncoderChannel implements Encoder {
}
public
void
register
(
SampleDispatcher
dispatcher
)
throws
IOException
{
int
index
=
registry
.
add
(
dispatcher
);
int
index
=
def_
registry
.
add
(
dispatcher
);
begin
(
Constant
.
SAMPLE_DEF
);
encodePacked32
(
index
);
encodeString
(
dispatcher
.
getName
());
...
...
@@ -41,7 +39,18 @@ public class EncoderChannel implements Encoder {
end
(
null
);
}
public
void
registerSampleRef
(
Sample
sample
)
throws
IOException
{
public
void
registerSampleRef
(
SampleDispatcher
dispatcher
)
throws
IOException
{
System
.
err
.
println
(
dispatcher
);
int
index
=
ref_registry
.
add
(
dispatcher
);
begin
(
Constant
.
SAMPLE_REF
);
encodePacked32
(
index
);
encodeString
(
dispatcher
.
getName
());
byte
[]
signature
=
dispatcher
.
getSignature
();
encodePacked32
(
signature
.
length
);
for
(
int
i
=
0
;
i
<
signature
.
length
;
i
++)
{
encodeByte
(
signature
[
i
]);
}
end
(
null
);
}
private
void
begin
(
int
tag
)
{
...
...
@@ -50,7 +59,7 @@ public class EncoderChannel implements Encoder {
}
public
void
begin
(
Class
<?
extends
Sample
>
c
)
throws
IOException
{
begin
(
registry
.
getTag
(
c
));
begin
(
def_
registry
.
getTag
(
c
));
}
public
void
end
(
Class
<?
extends
Sample
>
c
)
throws
IOException
{
...
...
@@ -135,11 +144,14 @@ public class EncoderChannel implements Encoder {
}
}
public
void
encodeSampleRef
(
Sample
value
)
throws
IOException
{
data
.
writeInt
(
0
);
throw
new
IOException
(
"IMPLEMENT"
);
public
void
encodeSampleRef
(
Class
value
)
throws
IOException
{
int
index
=
0
;
try
{
index
=
ref_registry
.
getTag
(
value
);
}
catch
(
NullPointerException
e
)
{
}
data
.
writeInt
(
index
);
}
}
test/relay_gen_java.py
View file @
3ca451b1
...
...
@@ -2,6 +2,7 @@
import
re
import
sys
import
random
def
split_match
(
pattern
,
multiline
):
def
match
(
s
):
...
...
@@ -11,6 +12,10 @@ def split_match(pattern, multiline):
pass
return
filter
(
lambda
s
:
s
!=
None
,
map
(
match
,
multiline
.
split
(
'
\n
'
)))
def
shuffle
(
l
):
result
=
list
(
l
)
random
.
shuffle
(
result
)
return
result
if
__name__
==
'__main__'
:
f
=
open
(
sys
.
argv
[
1
])
...
...
@@ -59,20 +64,26 @@ if __name__ == '__main__':
result
.
extend
(
split_match
(
'^[^|]*\|(.*)$'
,
"""
| public java_relay(String InName, String OutName) throws Exception {
| FileInputStream InFile = new FileInputStream(InName);
| DecoderChannel d = new DecoderChannel(InFile);
| DecoderChannel d
ecoder
= new DecoderChannel(InFile);
| FileOutputStream OutFile = new FileOutputStream(OutName);
| encoder = new EncoderChannel(OutFile);
|
"""
))
for
func
,
arg
in
sample
:
result
.
append
(
' %s.register(d, this);'
%
func
)
for
func
,
arg
in
shuffle
(
sample
)
:
result
.
append
(
' %s.register(d
ecoder
, this);'
%
func
)
pass
for
func
,
arg
in
sample
:
for
func
,
arg
in
shuffle
(
sample
):
result
.
append
(
' %s.registerSampleRef(decoder);'
%
func
)
pass
for
func
,
arg
in
shuffle
(
sample
):
result
.
append
(
' %s.register(encoder);'
%
func
)
pass
for
func
,
arg
in
shuffle
(
sample
):
result
.
append
(
' %s.registerSampleRef(encoder);'
%
func
)
pass
result
.
extend
(
split_match
(
'^[^|]*\|(.*)$'
,
"""
| try {
| d.run();
| d
ecoder
.run();
| } catch (java.io.EOFException e) {
| }
| }
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment