Jump to content


Photo

List Dll - Sourcecode Released


  • Please log in to reply
41 replies to this topic

#1 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 06 May 2007 - 03:54 PM

List DLL V1.4

Please report bugs or functions you would like to see.

DOWNLOAD HERE (42 kB .zip file)

list_init(); // initialize the DLL, returns 0
list_create(); // returns a new list id, use it in the other functions
list_get(id,pos); // get the value at "pos", returns value, false = "pos" bigger than list size
list_add(id,value); // add "value" at the end of the list, returns the position where "value" is placed
list_replace(id,pos,value); // replace the value at "pos" with "value", returns false if position doesn't exists, otherwise true
list_size(id); // returns the list size, last position = list_size()-1
list_delete(id,pos); // delete the value at "pos", returns false if position doesn't exists, otherwise true
list_insert(id,pos,value); // insert "value" at "position", returns "pos", larger "pos" means the value is added at the end of the list
list_find(id,value); // search the first position of "value", returns position or -1 if it doesn't exists
list_free(); // call when you stop using the DLL
win_message(text,title); // show a windows message
win_newline(); // add a new line to the windows message

Update 1.4
- String support, strings and real values in one list

Update 1.3
- faster list_add function

Update 1.2
- Multi-list
- new list_clear(id) function

Update 1.1
- Bug removed in list_delete (always deleting position 0)
- Faster list_size(id) function
- new list_find(id,value) function
- other return values, see first post

See 2nd page for sourcecode

Edited by Robot Freak, 05 August 2007 - 02:48 PM.

  • 0

#2 buji_ryu

buji_ryu

    GMC Member

  • New Member
  • 324 posts

Posted 07 May 2007 - 08:43 AM

well if I had a lot of lists with a lot of stuff in them, I might use this. But other wise it's not very usefully and if it's 7.7x faster.
  • 0

#3 gmjab

gmjab

    GMC Member

  • New Member
  • 784 posts

Posted 07 May 2007 - 09:27 AM

Add a get function to get by value too like GM can get the value from the list position and get the position by finding the value. This looks good, but I won't use it till it has that extra function.
  • 0

#4 Darth

Darth

    GMC Member

  • New Member
  • 436 posts

Posted 07 May 2007 - 10:00 AM

What is faster exactly? Or are you saying every single one of those functions is 7.7 times faster?
  • 0
Game maker 8 Pro

#5 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 07 May 2007 - 05:51 PM

What is faster exactly? Or are you saying every single one of those functions is 7.7 times faster?

<{POST_SNAPBACK}>

I tested initializing, making a list with 500 values and 500 times getting the 499th value.
I've not tested any other functions.
Maybe later.
  • 0

#6 Daniel-Dane

Daniel-Dane

    GMC Member

  • New Member
  • 3581 posts

Posted 07 May 2007 - 05:53 PM

And compared to arrays?
  • 0

#7 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 07 May 2007 - 06:54 PM

And compared to arrays?

<{POST_SNAPBACK}>

The same speed.
But this DLL has more functions than GML arrays.
That's why I compared it to ds_list, that has the same functions as the DLL.
  • 0

#8 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 07 May 2007 - 07:45 PM

Update
- Bug removed in list_delete (always deleting position 0)
- Faster list_size() function
- new list_find(value) function
- other return values, see first post

See first post for the download link.
  • 0

#9 gmjab

gmjab

    GMC Member

  • New Member
  • 784 posts

Posted 08 May 2007 - 12:29 AM

The DLL looks good but sadly I cannot use it until the following is done:

1. You need to be able to use multiple lists like ds_list_create will creat a new list
2. You should add the function to clear the entire list
3. Add a sort function

After these are done it will be better than using ds_list. If you can do this it would be great since if it is 7 times faster it will improve speed in my game.
  • 0

#10 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 08 May 2007 - 06:30 AM

1. Working on that
2. I forgot that one
3. Okay, sort what? Same as ds_list?

Edit:
I will also try shuffle.

Edited by Murfy_the_game, 08 May 2007 - 06:35 AM.

  • 0

#11 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 08 May 2007 - 07:11 PM

Update
- Multi-list
- new list_clear(id) function

See first post for the download link.
  • 0

#12 gmjab

gmjab

    GMC Member

  • New Member
  • 784 posts

Posted 09 May 2007 - 12:00 AM

Perfect, I think I can use it now. I will give you more ideas as I come up with them. For sort I mean... sorting the values biggest to small or smallest to biggest... Another idea could be to get the position's of all the values that are the same. You could possibly return the list of positions like this "3/5/73/45" or "3,5,73,45".

Other Possible ideas:
- Exporting the list data structure to a string, then it can be written to a file
- Reading a string with the list data structure.

Those functions are in GM7. Excellent jobs so far, now I will test it in my game and if it's good I will keep it and credit.
  • 0

#13 Todd101scout

Todd101scout

    GMC Member

  • New Member
  • 82 posts

Posted 09 May 2007 - 05:08 AM

umm, I am having a realy big anoying problem with implementing this in my game...here is the GMk file, just run the game press esc and then enter, and look at the error and then at the code and see if you can tell me what I am doing wrong please!

www.laserforgestudios.com/rtsp.gmk
  • 0

#14 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 09 May 2007 - 02:34 PM

Other Possible ideas:
- Exporting the list data structure to a string, then it can be written to a file
- Reading a string with the list data structure.

I will add that to the "working on" list.

umm, I am having a realy big anoying problem with implementing this in my game...here is the GMk file, just run the game press esc and then enter, and look at the error and then at the code and see if you can tell me what I am doing wrong please!

www.laserforgestudios.com/rtsp.gmk

The current DLL only supports real values.
You are trying to compare a number with a string, that doesn't work.
I will add string support to the "working on" list.
  • 0

#15 Todd101scout

Todd101scout

    GMC Member

  • New Member
  • 82 posts

Posted 10 May 2007 - 12:11 AM

can you set the string thing to the top of your list b/c I have a big game project waiting on it (I can't debug it until it is fixed ;) ..)
  • 0

#16 Marchal_Mig12

Marchal_Mig12

    The Rhouan

  • GMC Member
  • 1182 posts
  • Version:GM:Studio

Posted 10 May 2007 - 12:20 AM

Well I did a simple test here. I added 10000 time a random value to a list using your dll and it too 600+ ms then I did the same thing but using the in-built ds_list structure and it took 16 ms. *Cough* Where is your 7.7x faster there. I'm doing ore test. I'll edit later.

EDIT: Now I tested another thing... Read speed. Reading 10000 value with yours took 2250ms and with GM 63ms

Edited by Marchal_Mig12, 10 May 2007 - 12:39 AM.

  • 0

#17 Todd101scout

Todd101scout

    GMC Member

  • New Member
  • 82 posts

Posted 10 May 2007 - 12:22 AM

does it do it in a seperate thread by any chance?
  • 0

#18 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 10 May 2007 - 08:43 AM

Well I did a simple test here. I added 10000 time a random value to a list using your dll and it too 600+ ms then I did the same thing but using the in-built ds_list structure and it took 16 ms. *Cough* Where is your 7.7x faster there. I'm doing ore test. I'll edit later.

EDIT: Now I tested another thing... Read speed. Reading 10000 value with yours took 2250ms and with GM 63ms

<{POST_SNAPBACK}>

May I ask for the use of 10000 list values?
Anyway, I'm working on the list_add speed.

Edit:
I've tested DLL 1_2, with 100000 times adding value 200.
It took 63516 ms.
The same thing with the 1_3 DLL (currently working on) and now it takes 938 ms.
That's 67,7 times faster.

Edit2:
I've tested 100000 times calling an empty DLL function. The result: 750 ms.
So, the DLL only takes 938-750=188 ms.

Edited by Murfy_the_game, 10 May 2007 - 03:26 PM.

  • 0

#19 NEED HELP sorta

NEED HELP sorta

    GMC Member

  • New Member
  • 1501 posts

Posted 11 May 2007 - 07:11 AM

Those results that you've just given sound impressive.
But, is there some way you can also make a ds_gridd section for the dll?
I really need faster ds_grid, but list may be useful aswell.

Edited by NEED HELP sorta, 11 May 2007 - 07:17 AM.

  • 0
http://img159.images...025/scr1ea8.png
http://img374.images...944/scr2hf6.png
Alagaesia Online - Not yet released.

You can bring the release date closer, by helping at the following topics:
Intro Narration
Music Topic

#20 Darth

Darth

    GMC Member

  • New Member
  • 436 posts

Posted 11 May 2007 - 08:18 PM

Edit2:
I've tested 100000 times calling an empty DLL function. The result: 750 ms.
So, the DLL only takes 938-750=188 ms.


So the overhead is 188/100000 = 0.00188ms
  • 0
Game maker 8 Pro

#21 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 13 May 2007 - 12:24 PM

Update
- faster list_add function

No problems any more with:
repeat (999999)
{
  list_add(listid,200);
}

See first post for the download link.
  • 0

#22 Todd101scout

Todd101scout

    GMC Member

  • New Member
  • 82 posts

Posted 13 May 2007 - 02:17 PM

is string support done yet?
  • 0

#23 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 13 May 2007 - 04:55 PM

is string support done yet?

<{POST_SNAPBACK}>

I'm working on that.
  • 0

#24 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 13 May 2007 - 07:21 PM

Update
- String support, strings and real values in one list

See first post for the download link.
  • 0

#25 pujal

pujal

    Free Fantasy

  • New Member
  • 197 posts

Posted 14 May 2007 - 08:14 AM

Looks good, going to try it now. If its feature-rich I know I'll end up using it as I think it really helps to have these externalized.

Hope to see multi dimensional lists sometime in the future?
  • 0

#26 Adventus

Adventus

    GMC Member

  • New Member
  • 516 posts

Posted 14 May 2007 - 11:09 AM

Faster? Is it just me or is that statement completely false. Heres the test i ran, see if you can find anything wrong:
list_init()count = 50000;ini_open("results.ini")list = list_create()time = current_time;repeat(count){list_add(list,random(5));}time = current_time - time;ini_write_string("Add Test","Number: ",string(count))ini_write_string("Add Test","DLL Total: ",string(time))ini_write_string("Add Test","DLL Per Add: ",string(time/count))list_delete(list);list = ds_list_create()time = current_time;repeat(count){ds_list_add(list,random(5));}time = current_time - time;ini_write_string("Add Test","ds Total: ",string(time))ini_write_string("Add Test","ds Per Add: ",string(time/count))ds_list_destroy(list);list = list_create()list_add(list,5)time = current_time;repeat(count){list_find(list,0);}time = current_time - time;ini_write_string("Find Test","Number: ",string(count))ini_write_string("Find Test","DLL Total: ",string(time))ini_write_string("Find Test","DLL Per Add: ",string(time/count))list_delete(list);list = ds_list_create()ds_list_add(list,5)time = current_time;repeat(count){ds_list_find_value(list,0);}time = current_time - time;ini_write_string("Find Test","ds Total: ",string(time))ini_write_string("Find Test","ds Per Add: ",string(time/count))ds_list_destroy(list);ini_close()game_end()
and here is my result.ini:
[Add Test]
Number:=50000
DLL Total:=7351
DLL Per Add:=0.15
ds Total:=1161
ds Per Add:=0.02
[Find Test]
Number:=50000
DLL Total:=5538
DLL Per Add:=0.11
ds Total:=671
ds Per Add:=0.01
Im guessing you using STL vectors (or equivalent) which im pretty sure is exactly what arrays are in GM (ds_lists are probably STL lists, so faster insertion over STL vectors but slower read & add). I really dont understand how you can quote such a huge number (7.7x), from my results it more like 7.7x slower.
  • 0

#27 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 14 May 2007 - 06:32 PM

I completely programmed this list DLL myself. (no array's)
Written in C++, using the following library's:
#include <windows.h> // otherwise you can't compile a DLL
#include <string> // only for the list_find function

About the speed, I will test it again, maybe I've made a mistake.
Any functions you would like to see?

Edited by Murfy_the_game, 14 May 2007 - 07:26 PM.

  • 0

#28 Daniel-Dane

Daniel-Dane

    GMC Member

  • New Member
  • 3581 posts

Posted 14 May 2007 - 07:12 PM

STL what? What about a good old array?
  • 0

#29 Todd101scout

Todd101scout

    GMC Member

  • New Member
  • 82 posts

Posted 14 May 2007 - 10:52 PM

umm, well I pretty much would like to see everything on your todo list :huh:
  • 0

#30 Adventus

Adventus

    GMC Member

  • New Member
  • 516 posts

Posted 15 May 2007 - 10:44 AM

STL what?

Not sure if that was Rhetoric but ill answer it anyway. STL is the Standard Template Library.... basically for datastructures used in most languages.

What about a good old array?

He needs a dynamically allocated array, a normal c++ array requires a size on initialisation.

So you've written your own datastructure? Why not use STL vectors or lists, you could be pretty sure they're as fast as they get.
  • 0

#31 Daniel-Dane

Daniel-Dane

    GMC Member

  • New Member
  • 3581 posts

Posted 15 May 2007 - 10:47 AM

So, STL is faster than a dynamic array?
  • 0

#32 Adventus

Adventus

    GMC Member

  • New Member
  • 516 posts

Posted 15 May 2007 - 11:10 AM

You would have to write your own dynamically allocated array, taking care of memory etc (which i think is what he's done). Most likely, unless your writing in ASM and REALLY know your ****, STL vectors would be faster than most c++ written dynamically allocated arrays.

Edited by Adventus, 15 May 2007 - 11:22 AM.

  • 0

#33 Daniel-Dane

Daniel-Dane

    GMC Member

  • New Member
  • 3581 posts

Posted 15 May 2007 - 12:21 PM

Argh, damn it. I wish I could find one for my Delphi DLL project.
  • 0

#34 Iam2noob4u

Iam2noob4u

    GMC Member

  • New Member
  • 447 posts
  • Version:Unknown

Posted 17 May 2007 - 10:26 AM

It mixes up the lines.

It might be my coding, but plain typing/using enter worked fine before I switched to using your DLL.
DLL + GMK file of what I tried

It does load up more lines then the default lists, and it is (indeed) faster. Although it only shows lines with the text '0' instead of the text that should be shown.

Edited by Iam2noob4u, 27 May 2007 - 09:46 AM.

  • 0
Email/MSN: iam2noob4u@gmail.com

#35 pujal

pujal

    Free Fantasy

  • New Member
  • 197 posts

Posted 27 May 2007 - 01:59 AM

Is this dead or can we expect 1.5 in the future?
  • 0

#36 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 04 August 2007 - 02:56 PM

Is this dead or can we expect 1.5 in the future?

<{POST_SNAPBACK}>

You can make your own!
I'm releasing the sourcecode.

#include "list_dll.h"
#include <windows.h>
#include <string>
#include <sstream>
using namespace std;

struct node
{
 int type;
 double value;
 char *string_value;
 node *nxt;
};

struct id
{
 id *nxt;
 node *start;
 node *end;
 int size;
};

char *last_string;
double last_real;
id *id_pointer=NULL;

const char* d2str (double arg_val)
{
 string s;
 ostringstream oss;
 oss << arg_val;
 return oss.str().c_str();
}

id* find_id (int arg_id)
{
 id *current=id_pointer;
 if (current == NULL) return NULL;
 int i=0;
 while (i < arg_id)
 {
  if (current->nxt == NULL) return NULL;
  current=current->nxt;
  i++;
 }
 return current;
}

export double list_init ()
{
 srand((unsigned)time(0));
 id_pointer=NULL;
}

export double list_create ()
{
 if (id_pointer == NULL)
 {
  id_pointer=new id;
  id_pointer->nxt=NULL;
  id_pointer->start=NULL;
  id_pointer->end=NULL;
  id_pointer->size=0;
  return 0;
 }
 else
 {
  id *current=id_pointer;
  int i=0;
  while (current->nxt != NULL)
  {
   current=current->nxt;
   i++;
  }
  current->nxt=new id;
  current=current->nxt;
  current->nxt=NULL;
  current->start=NULL;
  current->end=NULL;
  current->size=0;
  return i+1;
 }
}

export double list_add_real (double arg_id, double arg_value) // real value
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return -1;
 node *current=start->end;
 if (current == NULL)
 {
  start->start=new node;
  start->end=start->start;
  current=start->start;
  current->nxt=NULL;
  current->type=0;
  current->value=arg_value;
  start->size++;
  return 1;
 }
 else
 {
  current->nxt=new node;
  current=current->nxt;
  start->end=current;
  current->nxt=NULL;
  current->type=0;
  current->value=arg_value;
  start->size++;
 }
 return 1;
}

export double list_add_string (double arg_id, char* arg_value) // string value
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return -1;
 node *current=start->end;
 if (current == NULL)
 {
  start->start=new node;
  start->end=start->start;
  current=start->start;
  current->nxt=NULL;
  current->type=1;
  char *temp=new char;
  temp=arg_value;
  current->string_value=temp;
  start->size++;
  return 1;
 }
 else
 {
  current->nxt=new node;
  start->end=current->nxt;
  current=start->end;
  current->nxt=NULL;
  current->type=1;
  char *temp=new char;
  temp=arg_value;
  current->string_value=temp;
  start->size++;
 }
 return 1;
}

export double list_get (double arg_id, double arg_pos)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;
 if (current == NULL) return (double) 0;
 int temp=0;
 while (( arg_pos > temp) && (current->nxt != NULL))
 {
  current=current->nxt;
  temp++;
 }
 if (arg_pos <= temp)
 {
  if (current->type == 0)
  {
   last_real=current->value;
   return 0;
  }
  else
  {
   last_string=current->string_value;
   return 1;
  }
 }
 return 1;
}

export double list_get_real ()
{
 return (double)last_real;
}

export char* list_get_string ()
{
 return (char*)last_string;
}

export double list_replace_real (double arg_id, double arg_pos, double arg_val)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;
 
 if (current == NULL) return (double) 0;
 int temp=0;
 while ( arg_pos > temp)
 {
  if (current->nxt == NULL) return (double) 0;
  current=current->nxt;
  temp++;
 }
 current->value=arg_val;
 current->type=0;
 return (double) 1;
}

export double list_replace_string (double arg_id, double arg_pos, char *arg_val)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;
 
 if (current == NULL) return (double) 0;
 int temp=0;
 while ( arg_pos > temp)
 {
  if (current->nxt == NULL) return (double) 0;
  current=current->nxt;
  temp++;
 }
 char *strtemp=new char;
 strtemp=arg_val;
 current->string_value=strtemp;
 current->type=1;
 return (double) 1;
}

export double list_size (double arg_id)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return -1;
 return (double) start->size;
}

export double list_delete (double arg_id, double arg_pos)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;    

 node *previous=NULL;
 int i=0;
 while (i < (int)arg_pos)
 {
  if (current->nxt == NULL) return (double) 0;
  previous=current;
  current=current->nxt;
  i++;
 }
 if (previous == NULL)
 {
  start->start=current->nxt;
  delete current;
 }
 else
 {
  previous->nxt=current->nxt;
  delete current;
 }
 start->size--;
 return (double) 1;
}

export double list_insert_real (double arg_id, double arg_pos, double arg_val)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;      

 node *previous=NULL;
 int i=0;
 while (i < (int)arg_pos)
 {
  previous=current;
  current=current->nxt;
  i++;
 }
 if (previous == NULL)
 {
  start->start=new node;
  previous=start->start;
  previous->nxt=current;
  previous->value=arg_val;
  previous->type=0;
 }
 else
 {
  previous->nxt=new node;
  previous=previous->nxt;
  previous->nxt=current;
  previous->value=arg_val;
  previous->type=0;
 }
 start->size++;
 return (double) arg_pos;
}

export double list_insert_string (double arg_id, double arg_pos, char *arg_val)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;      

 node *previous=NULL;
 int i=0;
 while (i < (int)arg_pos)
 {
  previous=current;
  current=current->nxt;
  i++;
 }
 if (previous == NULL)
 {
  start->start=new node;
  previous=start->start;
  previous->nxt=current;
  char *strtemp=new char;
  strtemp=arg_val;
  previous->string_value=arg_val;
  previous->type=1;
 }
 else
 {
  previous->nxt=new node;
  previous=previous->nxt;
  previous->nxt=current;
  char *strtemp=new char;
  strtemp=arg_val;
  previous->string_value=arg_val;
  previous->type=1;
 }
 start->size++;
 return (double) arg_pos;
}

export double win_message (char* arg1, char* arg2)
{
 MessageBox(NULL, arg1, arg2, MB_OK);
 return (double) 1;
}

export double list_find_real (double arg_id, double arg_val)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;  

 int i=0;
 while (current != NULL)
 {
  if (current->type == 0)
  {
   if (current->value == arg_val)
   {
    return i;
   }
  }
  current=current->nxt;
  i++;
 }
 return -1;
}

export double list_find_string (double arg_id, char *arg_val)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 node *current=start->start;  
 string str_arg=arg_val;
 string str_temp="";
 int i=0;
 while (current != NULL)
 {
  if (current->type == 1)
  {
   str_temp.assign(current->string_value);
   if (str_arg.compare(str_temp) == 0)
   {
    return i;
   }
  }
  current=current->nxt;
  i++;
 }
 return -1;
}

export double list_clear (double arg_id)
{
 id *start=find_id((int) arg_id);
 if (start == NULL) return 0;
 start->start=NULL;
 return (double) 1;
}
If you add or change something, please post it here.
  • 0

#37 sleija

sleija

    GMC Member

  • New Member
  • 174 posts

Posted 05 August 2007 - 04:41 AM

I'm getting an error with the download link.
  • 0

#38 StapleGun

StapleGun

    GMC Member

  • New Member
  • 721 posts
  • Version:Unknown

Posted 05 August 2007 - 05:49 AM

This only way to make this more useful than simply calling a ds_list would to make it x dimensional.
  • 0
<div align='center'>Creating a program is easy. Creating software is difficult.</div>

#39 Krisando

Krisando

    GMC Member

  • New Member
  • 1351 posts

Posted 10 April 2010 - 11:33 AM

This dll is 1 ms slower every time when I test them. =\ I don't see any advantages whatsoever.
  • 0

Posted Image


#40 Alpaxj1

Alpaxj1

    GMC Member

  • GMC Member
  • 49 posts
  • Version:GM:Studio

Posted 05 December 2014 - 06:14 PM

Hi,

The link is broken, Is there a possiblility you could upload the list dll again?

 

I am using ds_lists as the moment and it far too slow.. I have around 4500 values and need them to be read quickly..

 

A dll would be most usefull.

Thanks!


  • 1

#41 kebaplover

kebaplover

    GMC Member

  • GMC Member
  • 141 posts
  • Version:Unknown

Posted 07 December 2014 - 02:47 PM

Hi,

The link is broken, Is there a possiblility you could upload the list dll again?

 

I am using ds_lists as the moment and it far too slow.. I have around 4500 values and need them to be read quickly..

 

A dll would be most usefull.

Thanks!

 

Have you even read the topic? It seems like this DLL is actually slower than internal functions.


  • 0

#42 Razon

Razon

    GMC Member

  • GMC Member
  • 268 posts
  • Version:GM:Studio

Posted 11 May 2015 - 04:31 PM

Here's a mirror link for the DLL.

 

https://www.mediafir...2y38dbd4z61u610


  • 0