Advertisement
ipsBruno

(Pawn) Memória Dinâmica - Dynamic::Memory

Nov 25th, 2012
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.59 KB | None | 0 0
  1. /*
  2. *  Copyright (c) 2012 [iPs]TeaM
  3. *  Bruno da Silva (email@brunodasilva.com)
  4. *  Função: Memória Dinâmica em Pawn !!
  5. *
  6. * www.brunodasilva.com
  7. * www.ips-team.forumeiros.com
  8. */
  9.  
  10. //--------------------------------------
  11.  
  12. #define Dynamic:: Dynamic_
  13.  
  14. new Dynamic::Container = 0x1e1c6;
  15.  
  16.  
  17. //--------------------------------------
  18.  
  19. #define arraySet(%0,%1,%2) \
  20.                 Dynamic::Set( #%0 , %1 , %2 )
  21.  
  22.  
  23.  
  24. #define arrayGet(%0,%1) \
  25.                 Dynamic::Get( #%0 , %1 )
  26.  
  27.  
  28. /*--------------------------------------
  29.  
  30.  
  31. Função: Dynamic::SetS
  32.  
  33. Parametros: (arrayName, stringSet)
  34.  
  35. Proposito: Colocar valor da array para string arrayName = "stringSet"
  36.  
  37. Autor: Bruno da Silva
  38.  
  39. --------------------------------------*/
  40.  
  41.  
  42. stock Dynamic::SetS(nome[], valor[]) {
  43.  
  44.     Dynamic::Container++;
  45.  
  46.     static cellname[128];
  47.     format(cellname, 128, "%sDATA", nome);
  48.  
  49.     Dynamic::Set(cellname, 0, Dynamic::Container);
  50.  
  51.     setproperty(0, "", Dynamic::Container * 2, valor);
  52.  
  53.  
  54.     return true;
  55. }
  56.  
  57.  
  58.  
  59.  
  60. /*--------------------------------------
  61.  
  62.  
  63. Função: Dynamic::GetS
  64.  
  65. Parametros: (arrayName,  &string,  stringLen, boolean: stringPacked)
  66.  
  67. Proposito: Retornar o valor da string contida em "arrayName" para a array "string"
  68.  
  69. Autor: Bruno da Silva
  70.  
  71. --------------------------------------*/
  72.  
  73. stock Dynamic::GetS(nome[], string[], len = sizeof(string), bool: packed = false) {
  74.  
  75.     static cellname[256];
  76.     format(cellname, 256, "%sDATA", nome);
  77.  
  78.  
  79.     getproperty(0, "", Dynamic::Get(cellname, 0) * 2, string);
  80.  
  81.  
  82.     if (packed){
  83.         return string;
  84.     }
  85.  
  86.     strunpack(string, string, len);
  87.  
  88.     return string;
  89. }
  90.  
  91.  
  92.  
  93.  
  94.  
  95. /*--------------------------------------
  96.  
  97.  
  98. Função: Dynamic::Set
  99.  
  100. Parametros: (arrayName, slotArray, value)
  101.  
  102. Proposito: Atribuir valor a uma array.arrayName[slotArray] = value!
  103.  
  104. Autor: Bruno da Silva
  105.  
  106. --------------------------------------*/
  107.  
  108. stock Dynamic::Set(nome[], slot, valor) {
  109.  
  110.  
  111.     new cellname[256 char], id;
  112.     format(cellname, 128, "%sTOTAL", nome);
  113.  
  114.     id = Dynamic::Get(cellname, 0);
  115.     setproperty(0, cellname, id + 1);
  116.  
  117.     format(cellname, 128, "%sINTE", nome);
  118.     setproperty(id, cellname, slot);
  119.  
  120.     return bool: setproperty(slot, nome, valor);
  121. }
  122.  
  123.  
  124.  
  125.  
  126.  
  127. /*--------------------------------------
  128.  
  129. Função: Dynamic::Get
  130.  
  131. Parametros: (arrayName, slotArray)
  132.  
  133. Retorno: Valor da array[slot]
  134.  
  135. Autor: Bruno da Silva
  136.  
  137. --------------------------------------*/
  138.  
  139. stock Dynamic::Get(nome[], slot) {
  140.     return getproperty(slot, nome);
  141. }
  142.  
  143.  
  144.  
  145. /*--------------------------------------
  146.  
  147. Função: Dynamic::Free
  148.  
  149. Parametros: (arrayName)
  150.  
  151. Propósito: Limpar uma array
  152.  
  153. Autor: Bruno da Silva
  154.  
  155. --------------------------------------*/
  156.  
  157. stock Dynamic::Free(nome[]) {
  158.  
  159.     // pegar  nomeDATA. Caso este existir é string!
  160.     static cellname[256 char];
  161.     format(cellname, 128, "%sDATA", nome);
  162.  
  163.     if(existproperty(0, cellname)) {
  164.  
  165.         // is string
  166.         deleteproperty( .name = "", .value = Dynamic::Get(cellname, 0) >> 1);
  167.  
  168.         // deletar nomeDATA
  169.         deleteproperty( 0, .name = cellname);
  170.  
  171.         return true ;
  172.  
  173.     }
  174.     else {
  175.         // is array
  176.  
  177.         static id ;
  178.  
  179.         // pegar total de slots modificacos
  180.         format(cellname, 128, "%sTOTAL", nome);
  181.         id = Dynamic::Get(cellname, 0);
  182.         deleteproperty ( 0, cellname );
  183.  
  184.         // pegar parte que armazena quais slot s foram modificados
  185.         format(cellname, 128, "%sINTE", nome);
  186.  
  187.         // percorrer toda array modificando os slots
  188.         while((id--) > -1) {
  189.  
  190.             // deletar slot pego
  191.             deleteproperty(Dynamic::Get ( cellname, id ), .name = nome);
  192.  
  193.             // deletar parte que mostra slot modificado
  194.             deleteproperty ( id, cellname );
  195.         }
  196.  
  197.         return true;
  198.  
  199.     }
  200.  
  201.     //return true;
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement