BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> C generics
korsarq
Публикувано на: 17-05-2017, 12:14
Quote Post



Име: мартин
Група: Потребител
Ранг: Посетител

Мнения: 90
Регистриран на: 30.11.16



От известно време се опитвам да пиша generic code на С.Сложим съм елементарна имплементация на стак ако може някой по-запознат с generics in C да сподели мнение.
CODE

typedef struct{

      void* elements;
      unsigned int allocLen;
      unsigned int logicLen;
      unsigned int elemSize;

}stack;

unsigned int stackNew(stack *s, unsigned int size){

     s->logicLen = 0;
     s->allocLen = 4;
     s->elements = malloc(4*sizeof(size));
   
     if(s->elements == NULL)
           return 1;
   
     return 0;
}

void stackPush(stack *s, void* element){

     if(logicLen == allocLen)
          stackgrow(s);

     void* tar = ((char*)s->elements + (s->logicLen * s->elemSize));

     memcpy(tar, element, s->elemSize);

     s->logicLen++;
}

void stackPop(stack *s, void* ret){

     void* source= ((char*)s->elements + ((s->logicLen -1) * s->elemSize));

     memcpy(ret, source, s->elemSize);

     s->logicLen--;
}

Може да има някакви грешки, защото не съм го компилирал, а си бях надраскал набързо някакви работи на едно листче.


--------------------
No pain, no gain.
PMEmail Poster
Top
Bender
Публикувано на: 17-05-2017, 12:42
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4072
Регистриран на: 19.06.14



Къде се generics обаче ?


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
korsarq
Публикувано на: 17-05-2017, 12:42
Quote Post



Име: мартин
Група: Потребител
Ранг: Посетител

Мнения: 90
Регистриран на: 30.11.16



Идеята е да работи с int,double,strings, a не само с определен тип.

Това мнение е било редактирано от korsarq на 17-05-2017, 12:45


--------------------
No pain, no gain.
PMEmail Poster
Top
jean_lesn
Публикувано на: 17-05-2017, 12:53
Quote Post



Име: Ян Лесневски
Група: Потребител
Ранг: Почетен член

Мнения: 964
Регистриран на: 26.05.04



Защо не го правиш с C++ templates, отделно, че в C++ STL имаш готови имплементации на всичките тези неща? На мен работата с void* указатели ми изглежда небезопасен и малко остарял метод за това, което искаш да постигнеш.
PMUsers WebsiteICQ
Top
korsarq
Публикувано на: 17-05-2017, 13:00
Quote Post



Име: мартин
Група: Потребител
Ранг: Посетител

Мнения: 90
Регистриран на: 30.11.16



Интересно ми е в С как стават нещата.А и отделно в сегашната ми работа пиша на С та се опитвам да стана мастър.Това съм го написал е така за фън дето се вика.


--------------------
No pain, no gain.
PMEmail Poster
Top
miron
Публикувано на: 17-05-2017, 13:13
Quote Post



Име: Мирослав Николов
Група: Потребител
Ранг: Редовен член

Мнения: 557
Регистриран на: 26.04.05



elemSize не му задаваш стойност.
PM
Top
dvader
Публикувано на: 17-05-2017, 13:13
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 3471
Регистриран на: 12.07.05



wxWidgets ги правят с макроси - хем шаблон, хем на С, хем typesafe...

Не знам защо се мъчите с това С, освен ако не е някакво legacy...


--------------------
I find your lack of faith disturbing
PM
Top
korsarq
Публикувано на: 17-05-2017, 13:16
Quote Post



Име: мартин
Група: Потребител
Ранг: Посетител

Мнения: 90
Регистриран на: 30.11.16



QUOTE
elemSize не му задаваш стойност.

Да, прав си.Забравил съм го.

CODE

unsigned int stackNew(stack *s, unsigned int size){

    s->logicLen = 0;
    s->allocLen = 4;
    s->elemSize = size;
    s->elements = malloc(4*sizeof(size));
 
    if(s->elements == NULL)
          return 1;
 
    return 0;
}


--------------------
No pain, no gain.
PMEmail Poster
Top
ss_svetlio_ss
Публикувано на: 18-05-2017, 13:39
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 23.02.11



PMEmail Poster
Top
saruman
Публикувано на: 18-05-2017, 20:37
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1396
Регистриран на: 21.07.10



QUOTE (dvader @ 17-05-2017, 13:13)
wxWidgets ги правят с макроси - хем шаблон, хем на С, хем typesafe...

Не знам защо се мъчите с това С, освен ако не е някакво legacy...

Това е верният отговор - макроси,с тия войд поинтъри не се знае кога ще гризнеш дръвцето,но ще се случи,повярвай ми icon_smile.gif


--------------------
http://www.wefunkradio.com/radio/

Remember,remember the fifth of November
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0