404
404
lists:foldl(Calc, [], Ps).
406
406
build_ret(Name,_Q,#type{name=_T,base=int,single=true,by_val=true}) ->
407
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) ~s;~n", [Name]);
407
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (ErlDrvSInt) ~s;~n", [Name]);
408
408
build_ret(Name,_Q,#type{name=_T,base=bool,single=true,by_val=true}) ->
409
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) ~s;~n", [Name]);
409
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (ErlDrvSInt) ~s;~n", [Name]);
410
410
build_ret(Name,_Q,#type{name=_T,base=int,single=true,by_val=false}) ->
411
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) *~s;~n", [Name]);
411
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (ErlDrvSInt) *~s;~n", [Name]);
412
412
build_ret(Name,_Q,#type{name=_T,base=bool,single=true,by_val=false}) ->
413
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) *~s;~n", [Name]);
413
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (ErlDrvSInt) *~s;~n", [Name]);
414
414
build_ret(Name,_Q,#type{name=_T,size=4,base=float,single=true,by_val=false}) ->
415
415
w(" GLdouble ~sConv = (double) *~s; \n",[Name,Name]),
416
416
w(" rt[AP++] = ERL_DRV_FLOAT; rt[AP++] = (ErlDrvTermData) &~sConv;~n", [Name]);
432
432
build_ret(Name,_Q,#type{name=T,base=_,single={tuple,Sz}}) ->
433
433
Temp = Name ++ "Tmp",
434
434
w(" ~s *~s = ~s;\n", [T,Temp,Name]),
435
[w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) *~s++;~n", [Temp])
435
[w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (ErlDrvSInt) *~s++;~n", [Temp])
436
436
|| _ <- lists:seq(1,Sz)],
437
437
w(" rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = ~p;~n",[Sz]);
438
438
build_ret(Name,_Q,#type{name="GLubyte",single={list,null}}) ->
443
443
" rt[AP++] = *~s;\n", [Name, Sz]);
444
444
build_ret(Name,_Q,#type{name=_T,base=B,single={list,_,Sz}}) when B =/= float ->
445
445
w(" for(int i=0; i < *~s; i++) {\n", [Sz]),
446
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) ~s[i];}~n", [Name]),
446
w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (ErlDrvSInt) ~s[i];}~n", [Name]),
447
447
w(" rt[AP++] = ERL_DRV_NIL;", []),
448
448
w(" rt[AP++] = ERL_DRV_LIST; rt[AP++] = (*~s)+1;~n",[Sz]);
449
449
build_ret(Name,_Q,#type{name=_T,size=FSz,base=float,single={list,Sz}}) ->
462
462
build_ret(Name,_Q,#type{name=T,base=_,single={list,Sz}}) ->
463
463
Temp = Name ++ "Tmp",
464
464
w(" ~s *~s = ~s;\n", [T,Temp,Name]),
465
[w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (int) *~s++;~n", [Temp])
465
[w(" rt[AP++] = ERL_DRV_INT; rt[AP++] = (ErlDrvSInt) *~s++;~n", [Temp])
466
466
|| _ <- lists:seq(1,Sz)],
467
467
w(" rt[AP++] = ERL_DRV_NIL;", []),
468
468
w(" rt[AP++] = ERL_DRV_LIST; rt[AP++] = ~p+1;~n",[Sz]);