Skip to content

Instantly share code, notes, and snippets.

@sooop
Created June 4, 2013 12:21
Show Gist options
  • Save sooop/5705509 to your computer and use it in GitHub Desktop.
Save sooop/5705509 to your computer and use it in GitHub Desktop.
stack of blocks. compiled with Clang on win32.
// block stack
#import <Foundation/Foundation.h>
typedef void(^Block)(void);
typedef struct _blockStack {
unsigned int capacity;
int top;
Block *blocks;
} blockStack;
typedef blockStack *blockStackRef;
blockStackRef createBlockStack(unsigned int size);
void releaseStack(blockStackRef stack);
void performBlockStack(blockStackRef stack);
void pushBlock(blockStackRef stack, Block aBlock);
void popBlock(blockStackRef stack);
blockStackRef createBlockStack(unsigned int size) {
blockStack *stack = (blockStack*)malloc(sizeof(blockStack));
stack->capacity = size;
stack->top = -1;
stack->blocks = (Block*)malloc(sizeof(Block) * size);
return stack;
}
void releaseStack(blockStackRef stack)
{
free(stack->blocks);
free(stack);
}
void performBlockStack(blockStackRef stack)
{
int i = stack->top;
while(i>-1) {
(*(stack->blocks + i))();
i--;
}
}
void pushBlock( blockStackRef stack, Block aBlock) // <-- == void(^aBlock)(void)
{
stack->top += 1;
if(stack->top == stack->capacity) return;
*(stack->blocks + stack->top) = aBlock;
}
void popBlock(blockStackRef stack)
{
if(stack->top > 0) {
(*(stack->blocks + stack->top))();
stack->top--;
}
}
int main(int argc, char const *argv[])
{
@autoreleasepool{
blockStackRef s = createBlockStack(4);
pushBlock(s, ^(){NSLog(@"a");});
pushBlock(s, ^(){NSLog(@"b");});
popBlock(s);
pushBlock(s, ^(){NSLog(@"c");});
pushBlock(s, ^(){NSLog(@"d");});
performBlockStack(s);
releaseStack(s);
return 0;
}
}
@sooop
Copy link
Author

sooop commented Jun 4, 2013

저도 블럭 코딩 참 좋아하는데요. 제가 한 번 스택에 넣어보겠습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment