Page 2 of 2
Re: something i bet you didnt know you could do with pointers.
Posted: Sun Dec 07, 2008 10:08 pm
by MarauderIIC
Wrong URL?
Edit: Well, I guess I went halfway too far since the right definition is probably
MarauderIIC wrote:add parameters to the () operator or one of the constructors; this is just a simple example though.
Re: something i bet you didnt know you could do with pointers.
Posted: Sun Dec 07, 2008 10:12 pm
by bugmenot
Re: something i bet you didnt know you could do with pointers.
Posted: Thu Feb 12, 2009 12:43 am
by Aliuar2
LOL, I'm going to post some serious crap code that I wrote
Re: something i bet you didnt know you could do with pointers.
Posted: Thu Feb 12, 2009 12:56 am
by Aliuar2
Code: Select all
#include "stdafx.h"
#include "iostream"
#include "string"
#include "vector"
using namespace std;
class ParameterType
{
public:
ParameterType()
{
isReturn = false;
}
string TypeName;
string Name;
bool isReturn;
};
class ParameterLink
{
public:
void * data;
ParameterLink * Next;
ParameterLink()
{
Next = NULL;
data = NULL;
}
};
class FunctionEntry
{
public:
string myLabel;
void * Addr;
std::vector<ParameterType*> Params;
void AddParam(ParameterType * Type)
{
Params.resize(Params.size()+1);
Params[Params.size()-1] = Type;
}
void AddIntParam(string Name)
{
ParameterType * myType = new ParameterType();
myType->Name = Name;
myType->TypeName = "int";
Params.resize(Params.size()+1);
Params[Params.size()-1] = myType;
}
void AddStringParam(string Name)
{
ParameterType * myType = new ParameterType();
myType->Name = Name;
myType->TypeName = "string";
Params.resize(Params.size()+1);
Params[Params.size()-1] = myType;
}
void AddRefPointer(string Name)
{
ParameterType * myType = new ParameterType();
myType->Name = Name;
myType->TypeName = "reference";
Params.resize(Params.size()+1);
Params[Params.size()-1] = myType;
}
};
class Character
{
public:
string Name;
string Type;
void ChangeName()
{
this->Name = "Jack";
}
};
class FunctionTable
{
public:
std::vector<FunctionEntry*> Functions;
void RegisterVoidFunction(void * Func, string Name)
{
FunctionEntry * myEntry = new FunctionEntry();
myEntry->myLabel = Name;
myEntry->Addr = Func;
Functions.resize(Functions.size()+1);
Functions[Functions.size()-1] = myEntry;
}
FunctionEntry * RegisterFunction(void * Func, string Name)
{
FunctionEntry * myEntry = new FunctionEntry();
myEntry->myLabel = Name;
myEntry->Addr = Func;
Functions.resize(Functions.size()+1);
Functions[Functions.size()-1] = myEntry;
return myEntry;
}
void * ExecuteVoidFunction(string Name)
{
for (int x = 0; x<Functions.size(); x++)
{
if (Functions[x]->myLabel == Name)
{
void * myAddr = Functions[x]->Addr;
void * myreturn = NULL;
_asm
{
call myAddr;
}
return myreturn;
}
}
}
void * ExecuteFunction(string Name, void * params)
{
ParameterLink * myLink = (ParameterLink*) params;
void * myReturn = NULL;
for (int x = 0; x<Functions.size(); x++)
{
if (Functions[x]->myLabel == Name)
{
void * myAddr = Functions[x]->Addr;
for (int r = Functions[x]->Params.size()-1; r>=0; r--)
{
ParameterType * myParam = Functions[x]->Params[r];
if (myParam->TypeName.compare("int") == 0)
{
int * myvalue = (int*) myLink->data;
int mydata = *myvalue;
_asm
{
mov eax, mydata
push eax
}
}
else if (myParam->TypeName.compare("string") == 0)
{
void * myVoid = myLink->data;
string * mydata = (string*) myVoid;
_asm
{
mov eax, mydata;
push eax;
}
}
else if (myParam->TypeName.compare("reference") == 0)
{
void * myVoid = myLink->data;
_asm
{
mov eax, myVoid;
push eax;
}
}
myLink = myLink->Next;
}
_asm
{
call myAddr;
mov myReturn, eax;
}
for (int r = 0; r<Functions[x]->Params.size(); r++)
{
ParameterType * myParam = Functions[x]->Params[r];
_asm
{
pop ebx;
}
}
return myReturn;
}
}
}
};
string * doSomething(int Test, int Test2, string * Data, Character * myChar)
{
cout << "Hello" << Test << Test2 << *Data;
cout << myChar->Name;
myChar->Name = "Sa22m";
return new string("Hello World");
}
int _tmain(int argc, _TCHAR* argv[])
{
FunctionTable * myTable = new FunctionTable();
myTable->RegisterVoidFunction(&doSomething, "DoSomething");
FunctionEntry * myFunc = myTable->RegisterFunction(&doSomething, "DoSomething2");
int mynumber = 10;
int mynumber2 = 20;
string * myData = new string("Test World");
Character * myChar = new Character();
myChar->Name = "John";
myChar->Type = "Bob";
myFunc->AddIntParam("Test");
myFunc->AddIntParam("Test2");
myFunc->AddStringParam("MyString");
myFunc->AddRefPointer("RefTest");
ParameterLink * myLink = new ParameterLink();
myLink->data = (void*) myData;
ParameterLink * myLinkMain = new ParameterLink();
myLinkMain->Next = myLink;
myLinkMain->data = myChar;
ParameterLink * myLink2 = new ParameterLink();
myLink2->data = (void*) &mynumber2;
myLink->Next = myLink2;
ParameterLink * myLink3 = new ParameterLink();
myLink3->data = &mynumber;
myLink2->Next = myLink3;
string myValue = *(string*)myTable->ExecuteFunction("DoSomething2", myLinkMain);
cout << myChar->Name;
cin.get();
return 0;
}
Re: something i bet you didnt know you could do with pointers.
Posted: Thu Feb 12, 2009 1:01 am
by Aliuar2
Be nice.... but seriously I realize this is spaghetti nightmare code
But see it's the intention that matters right?:))) This was an old scratch piece I put together when I was building a rule system.