|
|
Outils et Logiciels pour la Communication |
de Recherche |
|
|
sed -e "s/tl_lib_lipsync.h/tl_lib_buffer.h/g" RCCLib_lipsync.cc > tmp.cc mv tmp.cc RCCLib_lipsync.ccUn détail peut aussi vous troubler : en effet, si le nom de votre fichier RT-Lotos est trop long, le nom du fichier RCCLib_nom-du-fichier-lotos.cc sera tronqué a 200 caractères (ce qui laisse tout de même de la marge...) lors de sa génération. Si c'est le cas, redonnez-lui son nom correct.
Figure 3 : Architecture du simulateur utilisant des types Java et communiquant par mémoire partagée, version dynamique
Figure 4 : Architecture du simulateur utilisant des types Java et communiquant par socket unix, version dynamique
Figure 5 : Architecture du simulateur utilisant des types Java et communiquant par mémoire partagée, version statique
Figure 6 : Architecture du simulateur utilisant des types Java et communiquant par socket unix, version statique
specification LipSynchro : noexit
type boolean is
sorts bool
opns
not :nat->nat
and :nat,nat->nat
or :nat,nat->nat
endtype
type natural is boolean
sorts nat
opns
+ :nat,nat->nat
- :nat,nat->nat
* :nat,nat->nat
min :nat,nat->nat
max :nat,nat->nat
< :nat,nat->nat
> :nat,nat->nat
<= :nat,nat->nat
>= :nat,nat->nat
div :nat,nat->nat
mod :nat,nat->nat
divs :nat,nat->nat
endtype
type integer is boolean, natural
sorts int
opns
+ :int,int->int
- :int,int->int
* :int,int->int
min :int,int->int
max :int,int->int
< :int,int->int
> :int,int->int
<= :int,int->int
>= :int,int->int
divs :int,int->int
div :int,int->int
mod :int,int->int
mult :int,int,int->int
endtype
type packet is natural
sorts pkt
opns
CreatePacket : nat,nat->pkt
PacketId : pkt->nat
endtype
type buffer is natural,boolean,packet
sorts pktbuf
opns
CreateBuffer : nat->pktbuf
AddPacket : pkt,pktbuf->pktbuf
PlacePacket : pkt,pktbuf->pktbuf
RemovePacket : pktbuf->pktbuf
FirstPacket : pktbuf->pkt
BufferEmpty : pktbuf->bool
BufferFull : pktbuf->bool
BufferLoad : pktbuf->nat
endtype
behaviour
exit
endspec (* LipSynchro *)
// user-defined types interface made by rtl -make-lib
#include "tl_lib_lipsync.h"
#define id_mult 200
#define id_CreatePacket 201
#define id_PacketId 202
#define id_CreateBuffer 203
#define id_AddPacket 204
#define id_PlacePacket 205
#define id_RemovePacket 206
#define id_FirstPacket 207
#define id_BufferEmpty 208
#define id_BufferFull 209
#define id_BufferLoad 210
void user_obj::user_init () {
}
void user_obj::user_destroy(){
}
int user::prend_n_fonction_user ( char* str_fonction,
i_liste_sort_char& i_sort) {
if ( strcmp (str_fonction,"mult") == 0 )
return id_mult;
else if ( strcmp (str_fonction,"CreatePacket") == 0 )
return id_CreatePacket;
else if ( strcmp (str_fonction,"PacketId") == 0 )
return id_PacketId;
else if ( strcmp (str_fonction,"CreateBuffer") == 0 )
return id_CreateBuffer;
else if ( strcmp (str_fonction,"AddPacket") == 0 )
return id_AddPacket;
else if ( strcmp (str_fonction,"PlacePacket") == 0 )
return id_PlacePacket;
else if ( strcmp (str_fonction,"RemovePacket") == 0 )
return id_RemovePacket;
else if ( strcmp (str_fonction,"FirstPacket") == 0 )
return id_FirstPacket;
else if ( strcmp (str_fonction,"BufferEmpty") == 0 )
return id_BufferEmpty;
else if ( strcmp (str_fonction,"BufferFull") == 0 )
return id_BufferFull;
else if ( strcmp (str_fonction,"BufferLoad") == 0 )
return id_BufferLoad;
else return 0;
}
user_obj* user::execute_fonction_user (int n, i_liste_sort_char& i_sort,
i_liste_sem& i_param) {
switch (n) {
case id_mult: {
int par1 = ((int_lib *)i_param.elem_1_de_1())->prend_int();
++i_param;
int par2 = ((int_lib *)i_param.elem_1_de_1())->prend_int();
++i_param;
int par3 = ((int_lib *)i_param.elem_1_de_1())->prend_int();
return new int_lib(cct_int::mult(par1,par2,par3));
}
case id_CreatePacket: {
int par1 = ((int_lib *)i_param.elem_1_de_1())->prend_int();
++i_param;
int par2 = ((int_lib *)i_param.elem_1_de_1())->prend_int();
return &(cct_pkt::CreatePacket(par1,par2));
}
case id_PacketId: {
cct_pkt *par1 = (cct_pkt*)i_param.elem_1_de_1();
return new int_lib(cct_pkt::PacketId(*par1));
}
case id_CreateBuffer: {
int par1 = ((int_lib *)i_param.elem_1_de_1())->prend_int();
return &(cct_pktbuf::CreateBuffer(par1));
}
case id_AddPacket: {
cct_pkt *par1 = (cct_pkt*)i_param.elem_1_de_1();
++i_param;
cct_pktbuf *par2 = (cct_pktbuf*)i_param.elem_1_de_1();
return &(cct_pktbuf::AddPacket(*par1,*par2));
}
case id_PlacePacket: {
cct_pkt *par1 = (cct_pkt*)i_param.elem_1_de_1();
++i_param;
cct_pktbuf *par2 = (cct_pktbuf*)i_param.elem_1_de_1();
return &(cct_pktbuf::PlacePacket(*par1,*par2));
}
case id_RemovePacket: {
cct_pktbuf *par1 = (cct_pktbuf*)i_param.elem_1_de_1();
return &(cct_pktbuf::RemovePacket(*par1));
}
case id_FirstPacket: {
cct_pktbuf *par1 = (cct_pktbuf*)i_param.elem_1_de_1();
return &(cct_pktbuf::FirstPacket(*par1));
}
case id_BufferEmpty: {
cct_pktbuf *par1 = (cct_pktbuf*)i_param.elem_1_de_1();
return new bool_lib (cct_pktbuf::BufferEmpty(*par1));
}
case id_BufferFull: {
cct_pktbuf *par1 = (cct_pktbuf*)i_param.elem_1_de_1();
return new bool_lib (cct_pktbuf::BufferFull(*par1));
}
case id_BufferLoad: {
cct_pktbuf *par1 = (cct_pktbuf*)i_param.elem_1_de_1();
return new int_lib(cct_pktbuf::BufferLoad(*par1));
}
default : {
cout << "\nApplication invoquee non-definie => " << n << flush;
return 0;
}
}
}
// Library created by Laurent ANDRIANTSIFERANA 18-04-95
// Packet Buffer
#include <tl_user.h>
#include <DLList.h> // GNU LinkedList library
//-------------------- Class DATA PACKET ----------------------
class cct_pkt:public user_obj{
public:
int id;
int size;
cct_pkt(int i,int s);
virtual ~cct_pkt();
virtual char operator == (objet& un_objet);
virtual ostream& print(ostream& out) const;
virtual t_offptr fonction_hashing();
virtual user_obj& fait_copie();
static cct_pkt& CreatePacket(int , int );
static int PacketId(cct_pkt &);
static int PacketSize(cct_pkt &);
};
//-------------------- Class PACKET BUFFER ----------------------
typedef cct_pkt* p_Packet;
class cct_pktbuf:public user_obj{
DLList<p_Packet> ListPacket;
int size;
public:
cct_pktbuf(int s);
virtual ~cct_pktbuf();
virtual char operator == (objet& un_objet);
virtual ostream& print(ostream& out) const;
virtual t_offptr fonction_hashing();
virtual user_obj& fait_copie();
void AddPacket(cct_pkt&);
void PlacePacket(cct_pkt&);
void RemovePacket();
cct_pkt& FirstPacket(){ return *ListPacket.front(); }
char BufferEmpty(){ return ListPacket.empty(); }
int BufferLoad(){ return ListPacket.length(); }
char BufferFull(){ return ListPacket.length() == size; }
static cct_pktbuf& CreateBuffer(int);
static cct_pktbuf& AddPacket(cct_pkt&, cct_pktbuf&);
static cct_pktbuf& PlacePacket(cct_pkt&, cct_pktbuf&);
static cct_pktbuf& RemovePacket(cct_pktbuf&);
static cct_pkt& FirstPacket(cct_pktbuf&);
static char BufferEmpty(cct_pktbuf&);
static char BufferFull(cct_pktbuf&);
static int BufferLoad(cct_pktbuf&);
};
class cct_int:public user_obj{
public:
cct_int(){ };
static int mult(int n1,int d1,int d2){
return (int)((float)n1*(float)d1/(float)d2);
};
};
#include <strstream.h>
#include <string.h>
#include "tl_lib_buffer.h"
//+++++++++++++++++++ Class cct_pkt +++++++++++++++++++
cct_pkt::cct_pkt(int i,int s){
id =i;
size=s;
}
cct_pkt::~cct_pkt(){
}
char cct_pkt::operator == (objet &un_objet){
cct_pkt &a_packet = (cct_pkt &) un_objet;
if (this == &a_packet)
return 1;
return (size == a_packet.size) && (id == a_packet.id);
}
ostream& cct_pkt::print(ostream& out) const{
out << id;
return out;
}
t_offptr cct_pkt::fonction_hashing(){
return 0;
}
user_obj& cct_pkt::fait_copie(){
return *(user_obj *) new cct_pkt(id,size);
}
cct_pkt& cct_pkt::CreatePacket(int i, int s){
return * new cct_pkt(i,s);
}
int cct_pkt::PacketId(cct_pkt &P){
return P.id;
}
int cct_pkt::PacketSize(cct_pkt &P){
return P.size;
}
//+++++++++++++++++++ Class cct_pktbuf +++++++++++++++++++
cct_pktbuf::cct_pktbuf(int s):ListPacket(){
size = s;
}
cct_pktbuf::~cct_pktbuf(){
if (ListPacket.length())
for (Pix i=ListPacket.first();i != 0;ListPacket.next(i))
ListPacket(i)->delete_ref();
}
char cct_pktbuf::operator == (objet& un_objet){
cct_pktbuf& a_cct_pktbuf = (cct_pktbuf&) un_objet;
if ( this == &a_cct_pktbuf )
return 1;
Pix i=ListPacket.first();
Pix j=a_cct_pktbuf.ListPacket.first();
int res= (ListPacket.length() == a_cct_pktbuf.ListPacket.length());
for (;i != 0; ListPacket.next(i),a_cct_pktbuf.ListPacket.next(j))
res = res && (*ListPacket(i) == *a_cct_pktbuf.ListPacket(j));
return res;
}
ostream& cct_pktbuf::print(ostream& out) const{
DLList<p_Packet> *p_list = (DLList<p_Packet> *)&ListPacket;
out << "[";
for (Pix i=p_list->first();i != 0;p_list->next(i))
out<<*((*p_list)(i))<<":";
out <<"]";
return out;
}
user_obj& cct_pktbuf::fait_copie() {
cct_pktbuf* p_copie_cct_pktbuf = new cct_pktbuf(size);
for (Pix i=ListPacket.first();i != 0;ListPacket.next(i)) {
cct_pkt* a_Packet = ListPacket(i);
a_Packet->add_ref ();
p_copie_cct_pktbuf->ListPacket.append(a_Packet);
}
return (user_obj&) *p_copie_cct_pktbuf;
}
t_offptr cct_pktbuf::fonction_hashing() {
return 0;
}
void cct_pktbuf::PlacePacket (cct_pkt& pkt) {
pkt.add_ref();
Pix i;
for ( i = ListPacket.first();i !=0 ;ListPacket.next(i) ){
cct_pkt* a_Packet = ListPacket(i);
if (pkt.id < a_Packet->id){
ListPacket.ins_before(i,&pkt);
break;
}
}
if (i==0)
ListPacket.append(&pkt);
}
void cct_pktbuf::AddPacket (cct_pkt& pkt) {
pkt.add_ref();
ListPacket.append (&pkt);
}
void cct_pktbuf::RemovePacket () {
cct_pkt& a_Packet = FirstPacket ();
a_Packet.delete_ref ();
ListPacket.del_front ();
}
cct_pktbuf& cct_pktbuf::CreateBuffer(int s){
return * new cct_pktbuf(s);
}
cct_pktbuf& cct_pktbuf::AddPacket(cct_pkt& P, cct_pktbuf& B){
cct_pktbuf © = (cct_pktbuf &)B.fait_copie();
copy.AddPacket(P);
return copy;
}
cct_pktbuf& cct_pktbuf::PlacePacket(cct_pkt& P, cct_pktbuf& B){
cct_pktbuf © = (cct_pktbuf &)B.fait_copie();
copy.PlacePacket(P);
return copy;
}
cct_pktbuf& cct_pktbuf::RemovePacket(cct_pktbuf& B){
cct_pktbuf © = (cct_pktbuf &)B.fait_copie();
copy.RemovePacket();
return copy;
}
cct_pkt& cct_pktbuf::FirstPacket(cct_pktbuf& B){
B.FirstPacket().add_ref();
return B.FirstPacket();
}
char cct_pktbuf::BufferEmpty(cct_pktbuf& B){
return B.BufferEmpty();
}
char cct_pktbuf::BufferFull(cct_pktbuf& B){
return B.BufferFull();
}
int cct_pktbuf::BufferLoad(cct_pktbuf& B){
return B.BufferLoad();
}
# ce qu'il faut configurer
NAME=lypsync
TYPELIB=tl_lib_buffer
# ce qu'il vaut mieux regarder
RTLHOME=${HOME}/RT-LOTOS
RTL=${RTLHOME}/bin/rtl -cray
RTLIB=${RTLHOME}/bin/rtl -make-lib
INCLUDES= -I ${RTLHOME}/include
LIBPATH=lib
############
RLIB=RCCLib_$(NAME).cc
CC=gcc
SPEC=$(NAME).lot
SIM=$(SPEC).sim
$(SIM) : $(SPEC)
@hostname
@date
-time $(RTL) -max-spec-t-200000000 $(SPEC)
@date
@echo "rtl ($(HOST):`pwd`): $(SIM) is done." | mail $(LOGNAME)
clean :
-rm *~ *.fig *.sim
(cd Plot ; make clean)
cclib : librtl.so
mv librtl.so $(LIBPATH)/librtl.so
librtl.so : RCCLib_$(NAME).o $(TYPELIB).o
ld -G -o librtl.so RCCLib_$(NAME).o $(TYPELIB).o
RCCLib_$(NAME).o : $(TYPELIB).h $(RLIB)
gcc -c $(RLIB) $(INCLUDES)
$(TYPELIB).o : $(TYPELIB).cc $(TYPELIB).h
gcc -c $(TYPELIB).cc $(INCLUDES)
$(RLIB) : $(SPEC)
cp $(LIBPATH)/librtl.so.cc $(LIBPATH)/librtl.so
-$(RTLIB) $(SPEC)
sed -e "s/tl_lib_$(NAME).h/$(TYPELIB).h/g" $(RLIB) > tmp.cc
mv tmp.cc $(RLIB)
libclean :
-rm *~ *.o librtl.so $(RLIB)
# ce qu'il faut configurer
NAME=lypsync
TYPELIB=tl_lib_buffer
# ce qu'il vaut mieux regarder
RTLHOME=${HOME}/RT-LOTOS
RTL=./rtl -cray
RTLIB=${RTLHOME}/bin/rtl-cc -make-lib
INCLUDES= -I ${RTLHOME}/include
############
RLIB=RCCLib_$(NAME).cc
CC=gcc
SPEC=$(NAME).lot
SIM=$(SPEC).sim
$(SIM) : $(SPEC) $(RTL)
@hostname
@date
-time $(RTL) -max-spec-t-200000000 $(SPEC)
@date
@echo "rtl ($(HOST):`pwd`): $(SIM) is done." | mail $(LOGNAME)
clean :
-rm *~ *.fig *.sim
(cd Plot ; make clean)
cclib : $(RTL)
$(RTL) : RCCLib_$(NAME).o $(TYPELIB).o
ld -o rtl RCCLib_$(NAME).o $(TYPELIB).o ${RTLHOME}/lib/libobjrt.o
RCCLib_$(NAME).o : $(TYPELIB).h $(RLIB)
gcc -c $(RLIB) $(INCLUDES)
$(TYPELIB).o : $(TYPELIB).cc $(TYPELIB).h
gcc -c $(TYPELIB).cc $(INCLUDES)
$(RLIB) : $(SPEC)
cp $(LIBPATH)/librtl.so.cc $(LIBPATH)/librtl.so
-$(RTLIB) $(SPEC)
sed -e "s/tl_lib_$(NAME).h/$(TYPELIB).h/g" $(RLIB) > tmp.cc
mv tmp.cc $(RLIB)
libclean :
-rm *~ *.o rtl $(RLIB)
// user-defined types interface made by rtl -make-lib
public abstract class RJLib {
static RJLib createLib () {
return (RJLib) new RJLib_lipsync();
}
abstract int getUserFunctionCode (String UserFunctionName);
abstract RJPacket executeUserFunction (RJPacket aPacket);
}
// user-defined types interface made by rtl -make-lib
public class RJLib_lipsync extends RJLib {
final int code_mult = 200;
final String str_mult = "mult";
final int code_CreatePacket = 201;
final String str_CreatePacket = "CreatePacket";
final int code_PacketId = 202;
final String str_PacketId = "PacketId";
final int code_CreateBuffer = 203;
final String str_CreateBuffer = "CreateBuffer";
final int code_AddPacket = 204;
final String str_AddPacket = "AddPacket";
final int code_PlacePacket = 205;
final String str_PlacePacket = "PlacePacket";
final int code_RemovePacket = 206;
final String str_RemovePacket = "RemovePacket";
final int code_FirstPacket = 207;
final String str_FirstPacket = "FirstPacket";
final int code_BufferEmpty = 208;
final String str_BufferEmpty = "BufferEmpty";
final int code_BufferFull = 209;
final String str_BufferFull = "BufferFull";
final int code_BufferLoad = 210;
final String str_BufferLoad = "BufferLoad";
int getUserFunctionCode (String UserFunctionName) {
if ( UserFunctionName.compareTo (str_mult) == 0 )
return code_mult;
if ( UserFunctionName.compareTo (str_CreatePacket) == 0 )
return code_CreatePacket;
if ( UserFunctionName.compareTo (str_PacketId) == 0 )
return code_PacketId;
if ( UserFunctionName.compareTo (str_CreateBuffer) == 0 )
return code_CreateBuffer;
if ( UserFunctionName.compareTo (str_AddPacket) == 0 )
return code_AddPacket;
if ( UserFunctionName.compareTo (str_PlacePacket) == 0 )
return code_PlacePacket;
if ( UserFunctionName.compareTo (str_RemovePacket) == 0 )
return code_RemovePacket;
if ( UserFunctionName.compareTo (str_FirstPacket) == 0 )
return code_FirstPacket;
if ( UserFunctionName.compareTo (str_BufferEmpty) == 0 )
return code_BufferEmpty;
if ( UserFunctionName.compareTo (str_BufferFull) == 0 )
return code_BufferFull;
if ( UserFunctionName.compareTo (str_BufferLoad) == 0 )
return code_BufferLoad;
return 0;
}
RJPacket executeUserFunction (RJPacket aPacket) {
int func_code = aPacket.Extract_int(1);
switch (func_code) {
case code_mult: {
int par1 = aPacket.Extract_int(5);
int par2 = aPacket.Extract_int(9);
int par3 = aPacket.Extract_int(13);
int res = jt_int.mult(par1,par2,par3);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(res,0);
return returnPacket;
}
case code_CreatePacket: {
int par1 = aPacket.Extract_int(5);
int par2 = aPacket.Extract_int(9);
jt_pkt res = jt_pkt.CreatePacket(par1,par2);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(RJDecoder.getObjectCode((jt_for_RTL)res),0);
return returnPacket;
}
case code_PacketId: {
jt_pkt par1 = (jt_pkt)RJDecoder.getObject(aPacket.Extract_int(5));
int res = jt_pkt.PacketId(par1);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(res,0);
return returnPacket;
}
case code_CreateBuffer: {
int par1 = aPacket.Extract_int(5);
jt_pktbuf res = jt_pktbuf.CreateBuffer(par1);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(RJDecoder.getObjectCode((jt_for_RTL)res),0);
return returnPacket;
}
case code_AddPacket: {
jt_pkt par1 = (jt_pkt)RJDecoder.getObject(aPacket.Extract_int(5));
jt_pktbuf par2 = (jt_pktbuf)RJDecoder.getObject(aPacket.Extract_int(9));
jt_pktbuf res = jt_pktbuf.AddPacket(par1,par2);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(RJDecoder.getObjectCode((jt_for_RTL)res),0);
return returnPacket;
}
case code_PlacePacket: {
jt_pkt par1 = (jt_pkt)RJDecoder.getObject(aPacket.Extract_int(5));
jt_pktbuf par2 = (jt_pktbuf)RJDecoder.getObject(aPacket.Extract_int(9));
jt_pktbuf res = jt_pktbuf.PlacePacket(par1,par2);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(RJDecoder.getObjectCode((jt_for_RTL)res),0);
return returnPacket;
}
case code_RemovePacket: {
jt_pktbuf par1 = (jt_pktbuf)RJDecoder.getObject(aPacket.Extract_int(5));
jt_pktbuf res = jt_pktbuf.RemovePacket(par1);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(RJDecoder.getObjectCode((jt_for_RTL)res),0);
return returnPacket;
}
case code_FirstPacket: {
jt_pktbuf par1 = (jt_pktbuf)RJDecoder.getObject(aPacket.Extract_int(5));
jt_pkt res = jt_pktbuf.FirstPacket(par1);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(RJDecoder.getObjectCode((jt_for_RTL)res),0);
return returnPacket;
}
case code_BufferEmpty: {
jt_pktbuf par1 = (jt_pktbuf)RJDecoder.getObject(aPacket.Extract_int(5));
boolean res = jt_pktbuf.BufferEmpty(par1);
RJPacket returnPacket = new RJPacket(1);
returnPacket.Insert_boolean(res,0);
return returnPacket;
}
case code_BufferFull: {
jt_pktbuf par1 = (jt_pktbuf)RJDecoder.getObject(aPacket.Extract_int(5));
boolean res = jt_pktbuf.BufferFull(par1);
RJPacket returnPacket = new RJPacket(1);
returnPacket.Insert_boolean(res,0);
return returnPacket;
}
case code_BufferLoad: {
jt_pktbuf par1 = (jt_pktbuf)RJDecoder.getObject(aPacket.Extract_int(5));
int res = jt_pktbuf.BufferLoad(par1);
RJPacket returnPacket = new RJPacket(4);
returnPacket.Insert_int(res,0);
return returnPacket;
}
default : return null;
}
}
}
// RTL packet type
public class jt_int extends jt_for_RTL{
jt_int(){}
public static int mult(int n1,int d1,int d2){
return (int)((float)n1*(float)d1/(float)d2);
}
}
// RTL packet type
public class jt_pkt extends jt_for_RTL{
public int Id;
public int TS;
public int Delay;
jt_pkt(int i,int s){
Id = i;
TS = s;
Delay = 0;
}
public Object clone(){
return new jt_pkt(Id,TS);
}
public String toString(){
return ("Pkt("+Id+","+TS+","+Delay+")");
}
public int hashCode(){
return Id+TS+Delay;
}
public boolean equals(Object O){
jt_pkt P = (jt_pkt)O;
return (P.TS == TS) && (P.Id == Id) && (P.Delay == Delay);
}
public static jt_pkt CreatePacket(int i,int s){
return new jt_pkt(i,s);
}
public static int PacketId(jt_pkt P){
return P.Id;
}
public static int PacketTS(jt_pkt P){
return P.TS;
}
public static int PacketD(jt_pkt P){
return P.Delay;
}
public static jt_pkt SetDelay(int D,jt_pkt P){
jt_pkt Pkt = (jt_pkt)P.clone();
Pkt.Delay = D;
return Pkt;
}
}
// file stimulus type
public class jt_pktbuf extends jt_for_RTL{
LinkedList Container;
int Size;
int Load;
jt_pktbuf(int s){
Size=s;
Load=0;
}
public Object clone(){
jt_pktbuf NewBuff = new jt_pktbuf(Size);
if(Container != null)
NewBuff.Container = (LinkedList)Container.clone();
NewBuff.Load = Load;
return NewBuff;
}
public String toString(){
if(Load == 0)
return new String("[]");
i_LinkedList a_i_list = new i_LinkedList(Container);
StringBuffer Out = new StringBuffer("[");
while(!(a_i_list.end())){
jt_pkt elt = (jt_pkt)a_i_list.Item();
Out.append(elt.toString());
Out.append(":");
a_i_list.next();
}
Out.append("]");
return Out.toString();
}
public int hashCode(){
return 0;
}
public boolean equals(Object Obj){
jt_pktbuf B = (jt_pktbuf)Obj;
if((B.Size != Size) && (B.Load != Load))
return false;
else
if(Load > 0)
return Container.equals(B.Container);
else return true;
}
public static jt_pktbuf CreateBuffer(int size){
return new jt_pktbuf(size);
}
public static jt_pktbuf AddPacket(jt_pkt P,jt_pktbuf Buffer){
jt_pktbuf Copy = (jt_pktbuf)Buffer.clone();
if(Copy.Container != null)
Copy.Container.Add(P);
else
Copy.Container = new LinkedList(P);
Copy.Load++;
return Copy;
}
public static jt_pktbuf PlacePacket(jt_pkt P,jt_pktbuf Buffer){
jt_pktbuf Copy = (jt_pktbuf)Buffer.clone();
if(Copy.Container != null)
Copy.Container.Add(P);
else
Copy.Container = new LinkedList(P);
Copy.Load++;
return Copy;
}
public static jt_pktbuf RemovePacket(jt_pktbuf Buffer){
jt_pktbuf Copy = (jt_pktbuf)Buffer.clone();
if(Copy.Load > 1){
Copy.Container.Remove();
Copy.Load--;
}
else{
Copy.Container = null;
Copy.Load = 0;
}
return Copy;
}
public static jt_pkt FirstPacket(jt_pktbuf Buffer){
jt_pkt P = (jt_pkt)Buffer.Container.first();
return P;
}
public static int BufferLoad(jt_pktbuf Buffer){
return Buffer.Load;
}
public static boolean BufferFull(jt_pktbuf Buffer){
return Buffer.Size == Buffer.Load;
}
public static boolean BufferEmpty(jt_pktbuf Buffer){
return Buffer.Load == 0;
}
}
# ce qu'il faut configurer
NAME = lipsync
# ce qu'il vaut mieux regarder
RTLHOME = ${HOME}/RT-LOTOS
RTL = ${RTLHOME}/bin/rtl -cray
RTLIB = ${RTLHOME}/bin/rtl -make-lib
LIBPATH = lib
CLASSPATH = ${RTLHOME}/class/:./
JPARMS = -verbose
############
SPEC=$(NAME).lot
SIM=$(SPEC).sim
$(SIM) : $(SPEC)
@hostname
@date
-time $(RTL) -max-spec-t-200000000 $(SPEC)
@date
@echo "rtl ($(HOST):`pwd`): $(SIM) is done." | mail $(LOGNAME)
clean :
-rm *~ $(SIM)
javakill :
-ipcrm -S 100 -S 101 -S 102 -M 103
##########################################################################
jlib : RJLib.class
RJLib.class : RJLib.java RJLib_$(NAME).class
javac $(JPARMS) RJLib.java
RJLib_$(NAME).class : RJLib_$(NAME).java
javac $(JPARMS) RJLib_$(NAME).java
RJLib.java : $(SPEC)
-$(RTLIB) $(SPEC)
libclean :
-rm -f *~ *.class RJLib*.java
# ce qu'il faut configurer
NAME = lipsync
# ce qu'il vaut mieux regarder
RTLHOME = ${HOME}/RT-LOTOS
RTL = ${RTLHOME}/bin/rtl-java-shmem -cray
RTLIB = ${RTLHOME}/bin/rtl-java-shmem -make-lib
CLASSPATH = ${RTLHOME}/class/:./
JPARMS = -verbose
############
SPEC=$(NAME).lot
SIM=$(SPEC).sim
$(SIM) : $(SPEC)
@hostname
@date
-time $(RTL) -max-spec-t-200000000 $(SPEC)
@date
@echo "rtl ($(HOST):`pwd`): $(SIM) is done." | mail $(LOGNAME)
clean :
-rm *~ $(SIM)
##########################################################################
jlib : RJLib.class
RJLib.class : RJLib.java RJLib_$(NAME).class
javac $(JPARMS) RJLib.java
RJLib_$(NAME).class : RJLib_$(NAME).java
javac $(JPARMS) RJLib_$(NAME).java
RJLib.java : $(SPEC)
-$(RTLIB) $(SPEC)
libclean :
-rm -f *~ *.class RJLib*.java
![]()
![]()
Ce document a été traduit de LATEX par HEVEA.