int main(){ struct codetype cd,code[MAXSYMBS]; struct nodetype node[MAXNODES]; int i,k,p,p1,p2,root; char symb,alph[MAXSYMBS]; for(i=0;i<MAXSYMBS;i++) alph[i]=' '; //scanf("%d",&n); input(); // cria o heap binario for(i=0;i<256;i++){ //flushall(); // scanf("%c %d",&symb,&node[i].freq); symb = a[i].alph; node[i].freq = a[i].freq; hinsert(i,node[i].freq); alph[i]=symb; } // monta a arvore com o codigo de huffman for(p=0;p<(2*256-1);p++){ p1 =hmin(); p2 =hmin(); node[p1].father = p; node[p1].isleft = 1; node[p2].father = p; node[p2].isleft = 0; node[p].freq =node[p1].freq+node[p2].freq; hinsert(p,node[p].freq); } root = hmin(); for(i=0;i<256;i++){ cd.startpos = MAXBITS; p=i; while(p!=root){ --cd.startpos ; if(node[p].isleft) cd.bits[cd.startpos] =0; else cd.bits[cd.startpos] =1; p =node[p].father; } for(k=cd.startpos;k<MAXBITS;k++) code[i].bits[k]=cd.bits[k]; code[i].startpos =cd.startpos; } for(i=0;i<256;i++){ printf("\n%c %d",alph[i],node[i].freq); for(k=code[i].startpos;k<MAXBITS;k++) printf(" %d",code[i].bits[k]); printf("\n"); } return(0); }
void SystemSprite::_render() { int dw = hmin(this->srcRect->width, this->bitmap->getWidth()); int dh = hmin(this->srcRect->height, this->bitmap->getHeight()); grect drawRect((float)this->ox, (float)this->oy, (float)dw, (float)dh); float sw = (float)this->bitmap->getWidth(); float sh = (float)this->bitmap->getHeight(); grect srcRect; srcRect.x = this->srcRect->x / sw; srcRect.y = this->srcRect->y / sh; srcRect.w = hmin(this->srcRect->width / sw, 1.0f - srcRect.x); srcRect.h = hmin(this->srcRect->height / sh, 1.0f - srcRect.y); this->_renderTexture(drawRect, srcRect, this->bitmap->getTexture(), this->opacity); april::rendersys->setTextureBlendMode(april::BM_DEFAULT); }
float Animator::_calculateValue(float k) { if (this->delay > 0.0f) { return (this->discreteStep != 0 ? (float)((int)(this->offset / this->discreteStep) * this->discreteStep) : this->offset); } float time = this->timer; if (this->isExpired()) { if (this->reset) { return (this->discreteStep != 0 ? (float)((int)(this->offset / this->discreteStep) * this->discreteStep) : this->offset); } time = this->periods / habs(this->speed); } float result = 0.0f; switch (this->animationFunction) { case Object::Linear: result = time * this->speed * this->amplitude; break; case Object::Sine: result = (float)dsin(time * this->speed * 360) * this->amplitude; break; case Object::Square: result = (hmodf(time * this->speed, 1.0f) < 0.5f ? this->amplitude : -this->amplitude); break; case Object::Saw: result = (hmodf(time * this->speed + 0.5f, 1.0f) - 0.5f) * 2 * this->amplitude; break; case Object::Triangle: result = hmodf(time * this->speed, 1.0f); if (!is_in_range(result, 0.25f, 0.75f)) { result = (hmodf(time * this->speed + 0.5f, 1.0f) - 0.5f) * 4 * this->amplitude; } else { result = -(hmodf(time * this->speed - 0.25f, 1.0f) - 0.25f) * 4 * this->amplitude; } break; case Object::Random: result = hrandf(-this->speed * this->amplitude, this->speed * this->amplitude); break; case Object::Hover: if ((this->amplitude >= 0.0f) == this->parent->isCursorInside()) { result = hmin(this->value - this->offset + k * this->speed, (float)habs(this->amplitude)); } else { result = hmax(this->value - this->offset - k * this->speed, -(float)habs(this->amplitude)); } break; case Object::Custom: result = (this->customFunction != NULL ? this->customFunction(this, time) : this->value); break; } return (this->discreteStep != 0 ? (float)((int)((result + this->offset) / this->discreteStep) * this->discreteStep) : (result + this->offset)); }
void CoreAudio_Player::_getData(int size, unsigned char** data1, int* size1, unsigned char** data2, int* size2) { if (!this->sound->isStreamed()) { int streamSize = this->buffer->load(this->looping, size); if (streamSize == 0) { *data1 = NULL; *size1 = 0; *data2 = NULL; *size2 = 0; return; } unsigned char* stream = this->buffer->getStream(); *data1 = &stream[this->readPosition]; *size1 = hmin(hmin(streamSize, streamSize - this->readPosition), size); *data2 = NULL; *size2 = 0; if (this->looping && this->readPosition + size > streamSize) { *data2 = stream; *size2 = size - *size1; this->readPosition = (this->readPosition + size) % streamSize; } else { this->readPosition = hmin(this->readPosition + size, streamSize); } return; } *data1 = &this->circleBuffer[this->readPosition]; *size1 = size; *data2 = NULL; *size2 = 0; if (this->readPosition + size > STREAM_BUFFER) { *size1 = STREAM_BUFFER - this->readPosition; *data2 = this->circleBuffer; *size2 = size - *size1; } this->readPosition = (this->readPosition + size) % STREAM_BUFFER; }