EXPOSICI N USO DE LIBRERIAS PARA LA REALIZACI N DE GR FICAS PROFA CHAYITO

Páginas: 16 (3993 palabras) Publicado: 9 de junio de 2015
Aunque muchas veces, una librería comienza como una colección de funciones, si ha usado alguna librería C de terceros habrá observado que la cosa no termina ahí porque hay más que comportamiento, acciones y funciones. También hay características (azul, libras, textura, luminiscencia), las cuales están representadas por datos. En C, cuando debemos representar características, es muy convenienteagruparlas todas juntas en una estructura, especialmente cuando queremos representar más de un tipo de cosa en el problema. Así, se puede trabajar con una variable de esta estructuras para representar cada cosa.
Por eso, la mayoría de las librerías en C están formadas por un conjunto de estructuras y funciones que actúan sobre las primeras. Como ejemplo de esta técnica, considere una herramienta deprogramación que se comporta como un array, pero cuyo tamaño se puede fijar en tiempo de ejecución, en el momento de su creación. La llamaremos CStash [46]. Aunque está escrito en C++, tiene el estilo clásico de una librería escrita en C:
//: C04:CLib.h
// Header file for a C-like library
// An array-like entity created at runtime

typedef struct CStashTag {
int size; // Size of eachspace
int quantity; // Number of storage spaces
int next; // Next empty space
// Dynamically allocated array of bytes:
unsigned char* storage;
} CStash;

void initialize(CStash* s, int size);
void cleanup(CStash* s);
int add(CStash* s, const void* element);
void* fetch(CStash* s, int index);
int count(CStash* s);
void inflate(CStash* s, int increase);
///:~
Listado 4.1. C04/CLib.hNormalmente se utiliza un «rótulo» como CStashTag en aquellas estructuras que necesitan referenciarse dentro de si mismas. Ese es el caso de una lista enlazada (cada elemento de la lista contiene un puntero al siguiente elemento) se necesita un puntero a la siguiente variable estructura, o sea, una manera de identificar el tipo de ese puntero dentro del cuerpo de la propia estructura. En la declaraciónde las estructuras de una librería escrita en C también es muy común ver el uso de typedef como el del ejemplo anterior. Esto permite al programador tratar las estructuras como un nuevo tipo de dato y así definir nuevas variables (de esa estructura) del siguiente modo:
CStash A, B, C;
El puntero storage es un unsigned char*. Un unsigned char es la menor pieza de datos que permite un compilador C,aunque en algunas máquinas puede ser de igual tamaño que la mayor. Aunque es dependiente de la implementación, por lo general un unsigned char tiene un tamaño de un byte. Dado que CStash está diseñado para almacenar cualquier tipo de estructura, el lector se puede preguntar si no sería más apropiado un puntero void *. Sin embargo, el objetivo no es tratar este puntero de almacenamiento como unbloque de datos de tipo desconocido, sino como un bloque de bytes contiguos.
El archivo de código fuente para la implementación (del que no se suele disponer si fuese una librería comercial —normalmente sólo dispondrá de un .obj, .lib o .dll, etc) tiene este aspecto:
//: C04:CLib.cpp {O}
// Implementation of example C-like library
// Declare structure and functions:
#include "CLib.h"
#include
#include
using namespace std;
// Quantity of elements to add
// when increasing storage:
const int increment = 100;

void initialize(CStash* s, int sz) {
s->size = sz;
s->quantity = 0;
s->storage = 0;
s->next = 0;
}

int add(CStash* s, const void* element) {
if(s->next >= s->quantity) //Enough space left?
inflate(s, increment);
// Copy element into storage,
//starting at next empty space:
int startBytes = s->next * s->size;
unsigned char* e = (unsigned char*)element;
for(int i = 0; i < s->size; i++)
s->storage[startBytes + i] = e[i];
s->next++;
return(s->next - 1); // Index number
}

void* fetch(CStash* s, int index) {
// Check index boundaries:
assert(0 <= index);
if(index >= s->next)
return 0; // To indicate the end
//...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Representaci N Gr Fica
  • Ecuaci n y gr fica
  • Representaci N Gr Fica
  • 1 Expresi n Gr fica
  • Cohesi N Gr Fica Material
  • Definici N Del Dise O Gr Fico
  • Funci n clases de funci n y gr ficos
  • Introducci N A La Producci N Gr Fica

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS