mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-04 15:11:02 -05:00
118 lines
3.7 KiB
C++
118 lines
3.7 KiB
C++
#include <precomp.h>
|
|
#include "sbitlist.h"
|
|
#include <bfc/bitlist.h>
|
|
|
|
#include <api/script/script.h>
|
|
#include <api/script/scriptmgr.h>
|
|
|
|
// {87C65778-E743-49fe-85F9-09CC532AFD56}
|
|
static const GUID bitlistGuid =
|
|
{ 0x87c65778, 0xe743, 0x49fe, { 0x85, 0xf9, 0x9, 0xcc, 0x53, 0x2a, 0xfd, 0x56 } };
|
|
|
|
BitlistScriptController _bitlistController;
|
|
BitlistScriptController *bitlistController = &_bitlistController;
|
|
|
|
// -- Functions table -------------------------------------
|
|
function_descriptor_struct BitlistScriptController::exportedFunction[] = {
|
|
{L"getItem", 1, (void*)SBitlist::script_vcpu_getitem },
|
|
{L"setItem", 2, (void*)SBitlist::script_vcpu_setitem },
|
|
{L"setSize", 1, (void*)SBitlist::script_vcpu_setsize },
|
|
{L"getSize", 0, (void*)SBitlist::script_vcpu_getsize },
|
|
};
|
|
// --------------------------------------------------------
|
|
|
|
const wchar_t *BitlistScriptController::getClassName() {
|
|
return L"BitList";
|
|
}
|
|
|
|
const wchar_t *BitlistScriptController::getAncestorClassName() {
|
|
return L"Object";
|
|
}
|
|
|
|
ScriptObject *BitlistScriptController::instantiate() {
|
|
SBitlist *bl = new SBitlist;
|
|
ASSERT(bl != NULL);
|
|
return bl->getScriptObject();
|
|
}
|
|
|
|
void BitlistScriptController::destroy(ScriptObject *o)
|
|
{
|
|
// TODO?
|
|
SBitlist *bl = static_cast<SBitlist *>(o->vcpu_getInterface(bitlistGuid));
|
|
}
|
|
|
|
void *BitlistScriptController::encapsulate(ScriptObject *o) {
|
|
return NULL; // no encapsulation for bitlist yet
|
|
}
|
|
|
|
void BitlistScriptController::deencapsulate(void *o) {
|
|
}
|
|
|
|
int BitlistScriptController::getNumFunctions() {
|
|
return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
|
|
}
|
|
|
|
const function_descriptor_struct *BitlistScriptController::getExportedFunctions() {
|
|
return exportedFunction;
|
|
}
|
|
|
|
GUID BitlistScriptController::getClassGuid() {
|
|
return bitlistGuid;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
SBitlist::SBitlist() {
|
|
list = new BitList;
|
|
getScriptObject()->vcpu_setInterface(bitlistGuid, (void *)static_cast<SBitlist *>(this));
|
|
getScriptObject()->vcpu_setClassName(L"BitList");
|
|
getScriptObject()->vcpu_setController(bitlistController);
|
|
}
|
|
|
|
SBitlist::~SBitlist() {
|
|
delete list;
|
|
}
|
|
|
|
BitList *SBitlist::getBitList() {
|
|
return list;
|
|
}
|
|
|
|
scriptVar SBitlist::script_vcpu_getitem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&n)); // Compiler shouldn't do this
|
|
scriptVar r;
|
|
r = SOM::makeVar(SCRIPT_INT);
|
|
SBitlist *bl = static_cast<SBitlist *>(o->vcpu_getInterface(bitlistGuid));
|
|
if (bl) SOM::assign(&r, bl->getBitList()->getitem(SOM::makeInt(&n)));
|
|
return r;
|
|
}
|
|
|
|
scriptVar SBitlist::script_vcpu_setitem(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar n, scriptVar v) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&n)); // Compiler shouldn't do this
|
|
ASSERT(SOM::isNumeric(&v)); // Compiler shouldn't do this
|
|
SBitlist *bl = static_cast<SBitlist *>(o->vcpu_getInterface(bitlistGuid));
|
|
if (bl) bl->getBitList()->setitem(SOM::makeInt(&n), SOM::makeBoolean(&v));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar SBitlist::script_vcpu_setsize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar newsize) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
ASSERT(SOM::isNumeric(&newsize)); // Compiler shouldn't do this
|
|
SBitlist *bl = static_cast<SBitlist *>(o->vcpu_getInterface(bitlistGuid));
|
|
if (bl) bl->getBitList()->setSize(SOM::makeInt(&newsize));
|
|
RETURN_SCRIPT_VOID;
|
|
}
|
|
|
|
scriptVar SBitlist::script_vcpu_getsize(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
|
|
SCRIPT_FUNCTION_INIT;
|
|
scriptVar r;
|
|
r = SOM::makeVar(SCRIPT_INT);
|
|
SBitlist *bl = static_cast<SBitlist *>(o->vcpu_getInterface(bitlistGuid));
|
|
if (bl) SOM::assign(&r, bl->getBitList()->getsize());
|
|
return r;
|
|
}
|
|
|
|
|
|
|