mirror of https://github.com/sysown/proxysql
parent
f3b1c79146
commit
ecb008520f
@ -1,21 +0,0 @@
|
||||
#include "polygon.hpp"
|
||||
#include <cmath>
|
||||
|
||||
|
||||
class triangle : public polygon {
|
||||
public:
|
||||
virtual double area() const {
|
||||
return side_length_ * side_length_ * sqrt(3) / 2;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// the class factories
|
||||
|
||||
extern "C" polygon* create() {
|
||||
return new triangle;
|
||||
}
|
||||
|
||||
extern "C" void destroy(polygon* p) {
|
||||
delete p;
|
||||
}
|
||||
Binary file not shown.
@ -1,148 +0,0 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define l_alloc(s) malloc(s)
|
||||
#define l_free(s,p) free(p)
|
||||
|
||||
|
||||
static unsigned int l_near_pow_2 (unsigned int n) {
|
||||
unsigned int i = 1;
|
||||
while (i < n) i <<= 1;
|
||||
return i ? i : n;
|
||||
}
|
||||
|
||||
|
||||
typedef struct _PtrSize_t PtrSize_t;
|
||||
|
||||
struct _PtrSize_t {
|
||||
void *ptr;
|
||||
unsigned int size;
|
||||
};
|
||||
|
||||
|
||||
class PtrSizeArray {
|
||||
private:
|
||||
unsigned int size;
|
||||
void expand(unsigned int);
|
||||
void shrink();
|
||||
public:
|
||||
PtrSize_t *pdata;
|
||||
unsigned int len;
|
||||
PtrSizeArray(unsigned int __size=0);
|
||||
~PtrSizeArray();
|
||||
PtrSize_t *index(unsigned int);
|
||||
void add(void *, unsigned int);
|
||||
void remove_index(unsigned int, PtrSize_t *);
|
||||
void remove_index_fast(unsigned int, PtrSize_t *);
|
||||
};
|
||||
|
||||
|
||||
PtrSizeArray::PtrSizeArray(unsigned int __size) {
|
||||
len=0;
|
||||
pdata=NULL;
|
||||
size=0;
|
||||
if (__size) {
|
||||
expand(__size);
|
||||
}
|
||||
size=__size;
|
||||
}
|
||||
|
||||
PtrSizeArray::~PtrSizeArray() {
|
||||
//if (pdata) free(pdata);
|
||||
if (pdata) l_free(size*sizeof(PtrSize_t),pdata);
|
||||
pdata=NULL;
|
||||
}
|
||||
|
||||
|
||||
void PtrSizeArray::expand(unsigned int more) {
|
||||
if ( (len+more) > size ) {
|
||||
unsigned int new_size=l_near_pow_2(len+more);
|
||||
//void *new_pdata=malloc(new_size*sizeof(PtrSize_t));
|
||||
void *new_pdata=l_alloc(new_size*sizeof(PtrSize_t));
|
||||
if (pdata) {
|
||||
memcpy(new_pdata,pdata,size*sizeof(PtrSize_t));
|
||||
//free(pdata);
|
||||
l_free(size*sizeof(PtrSize_t),pdata);
|
||||
}
|
||||
size=new_size;
|
||||
pdata=(PtrSize_t *)new_pdata;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PtrSizeArray::add(void *p, unsigned int s) {
|
||||
if (len==size) {
|
||||
expand(1);
|
||||
}
|
||||
//fprintf(stderr,"Adding on %p of len %d : ptr %p size %d\n", pdata, len, p, s);
|
||||
pdata[len].ptr=p;
|
||||
pdata[len].size=s;
|
||||
len++;
|
||||
}
|
||||
|
||||
PtrSize_t * PtrSizeArray::index(unsigned int i) {
|
||||
return &pdata[i];
|
||||
}
|
||||
|
||||
|
||||
void PtrSizeArray::remove_index(unsigned int i, PtrSize_t *ps) {
|
||||
if (ps) {
|
||||
ps->ptr=pdata[i].ptr;
|
||||
ps->size=pdata[i].size;
|
||||
//fprintf(stderr,"removing from %p of len %d : ptr %p size %d\n", pdata, len, ps->ptr, ps->size);
|
||||
}
|
||||
if (i != (len-1)) {
|
||||
//memmove(pdata+(i)*sizeof(PtrSize_t),pdata+(i+1)*sizeof(PtrSize_t),(len-i-1)*sizeof(PtrSize_t));
|
||||
memmove(pdata+i,pdata+i+1,(len-i-1)*sizeof(PtrSize_t));
|
||||
}
|
||||
len--;
|
||||
}
|
||||
|
||||
|
||||
#define ARRSIZE 16
|
||||
#define RESSIZE 50
|
||||
int main() {
|
||||
int i, j;
|
||||
|
||||
|
||||
PtrSize_t myarr[ARRSIZE];
|
||||
for (i=0;i<ARRSIZE;i++) {
|
||||
myarr[i].ptr=NULL;
|
||||
myarr[i].size=i;
|
||||
}
|
||||
|
||||
PtrSizeArray *psa=new PtrSizeArray();
|
||||
// std::vector<PtrSize_t> *vec = new std::vector<PtrSize_t>();
|
||||
|
||||
|
||||
for (i=0; i<RESSIZE; i++) {
|
||||
psa->add(myarr[i%ARRSIZE].ptr,myarr[i%ARRSIZE].size);
|
||||
// vec->push_back(myarr[i%ARRSIZE]);
|
||||
}
|
||||
PtrSize_t *psp;
|
||||
PtrSize_t ps;
|
||||
|
||||
|
||||
for (j=0;j<2000000;j++) {
|
||||
for (i=0; i<RESSIZE; i++) psa->add(myarr[i%ARRSIZE].ptr,myarr[i%ARRSIZE].size);
|
||||
|
||||
// for (i=0; i<RESSIZE; i++) psa->remove_index(0,&ps);
|
||||
|
||||
for (i=0; i<RESSIZE; i++) psp=psa->index(i);
|
||||
while (psa->len) psa->remove_index(psa->len-1,NULL);
|
||||
/*
|
||||
for (i=0; i<RESSIZE; i++) {
|
||||
// psp=&((*vec)[i]);
|
||||
// std::cout<<psp->size<<std::endl;
|
||||
//psp=&(vec[i]);
|
||||
//std::cout << vec[i] ;
|
||||
|
||||
psp=psa->index(i);
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
|
||||
|
||||
#define THRS 8
|
||||
#define LOOPS 1000000
|
||||
|
||||
static volatile int aa=0;
|
||||
|
||||
void *func() {
|
||||
int i=0;
|
||||
for (i=0;i<LOOPS;i++) aa++;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int i, j;
|
||||
pthread_t thr[THRS];
|
||||
for (i=0;i<THRS;i++) {
|
||||
pthread_create(&thr[i], NULL, func, NULL);
|
||||
}
|
||||
for (i=0;i<THRS;i++) {
|
||||
pthread_join(thr[i],NULL);
|
||||
}
|
||||
fprintf(stdout,"%d\n",aa);
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in new issue