You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1178 lines
29 KiB

/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */
#ifndef TRAX_H
#define TRAX_H
#include <stdio.h>
#include <fcntl.h>
#ifdef TRAX_STATIC_DEFINE
# define __TRAX_EXPORT
#else
# ifndef __TRAX_EXPORT
# if defined(_MSC_VER)
# ifdef trax_EXPORTS
/* We are building this library */
# define __TRAX_EXPORT __declspec(dllexport)
# else
/* We are using this library */
# define __TRAX_EXPORT __declspec(dllimport)
# endif
# elif defined(__GNUC__)
# ifdef trax_EXPORTS
/* We are building this library */
# define __TRAX_EXPORT __attribute__((visibility("default")))
# else
/* We are using this library */
# define __TRAX_EXPORT __attribute__((visibility("default")))
# endif
# endif
# endif
#endif
#if defined(__OS2__) || defined(__WINDOWS__) || defined(WIN32) || defined(WIN64) || defined(_MSC_VER)
#define TRAX_NO_LOG (~0)
#if defined(_MSC_VER)
#pragma comment(lib, "ws2_32.lib")
#endif
#else
#define TRAX_NO_LOG -1
#endif
#define TRAX_VERSION 3
#define TRAX_ERROR -1
#define TRAX_OK 0
#define TRAX_HELLO 1
#define TRAX_INITIALIZE 2
#define TRAX_FRAME 3
#define TRAX_QUIT 4
#define TRAX_STATE 5
#define TRAX_IMAGE_EMPTY 0
#define TRAX_IMAGE_PATH 1
#define TRAX_IMAGE_URL 2
#define TRAX_IMAGE_MEMORY 4
#define TRAX_IMAGE_BUFFER 8
#define TRAX_IMAGE_ANY (TRAX_IMAGE_PATH | TRAX_IMAGE_URL | TRAX_IMAGE_MEMORY | TRAX_IMAGE_BUFFER)
#define TRAX_IMAGE_BUFFER_ILLEGAL 0
#define TRAX_IMAGE_BUFFER_PNG 1
#define TRAX_IMAGE_BUFFER_JPEG 2
#define TRAX_IMAGE_MEMORY_ILLEGAL 0
#define TRAX_IMAGE_MEMORY_GRAY8 1
#define TRAX_IMAGE_MEMORY_GRAY16 2
#define TRAX_IMAGE_MEMORY_RGB 3
#define TRAX_REGION_EMPTY 0
#define TRAX_REGION_SPECIAL 1
#define TRAX_REGION_RECTANGLE 2
#define TRAX_REGION_POLYGON 4
#define TRAX_REGION_MASK 8
#define TRAX_REGION_ANY (TRAX_REGION_RECTANGLE | TRAX_REGION_POLYGON)
#define TRAX_FLAG_VALID 1
#define TRAX_FLAG_SERVER 2
#define TRAX_FLAG_TERMINATED 4
#define TRAX_PARAMETER_VERSION 0
#define TRAX_PARAMETER_CLIENT 1
#define TRAX_PARAMETER_SOCKET 2
#define TRAX_PARAMETER_REGION 3
#define TRAX_PARAMETER_IMAGE 4
#define TRAX_CHANNELS 3
#define TRAX_CHANNEL_COLOR 1
#define TRAX_CHANNEL_DEPTH 2
#define TRAX_CHANNEL_IR 4
#define TRAX_CHANNEL_INDEX(I) ( \
(I) == TRAX_CHANNEL_COLOR ? 0 : ( \
(I) == TRAX_CHANNEL_DEPTH ? 1 : ( \
(I) == TRAX_CHANNEL_IR ? 2 : -1)))
#define TRAX_CHANNEL_ID(I) ( \
(I) == 0 ? TRAX_CHANNEL_COLOR : ( \
(I) == 1 ? TRAX_CHANNEL_DEPTH : ( \
(I) == 2 ? TRAX_CHANNEL_IR : -1)))
#define TRAX_LOCALHOST "127.0.0.1"
#define TRAX_SUPPORTS(F, M) (((F) & (M)) != 0)
#ifdef __cplusplus
extern "C" {
#endif
/**
* A trax image data structure. Use trax_image_* functions to access the data.
**/
typedef struct trax_image {
short type;
int width;
int height;
int format;
char* data;
} trax_image;
/**
* A placeholder for region structure. Use the trax_region_* functions to manipulate
* the data.
**/
typedef void trax_region;
/**
* A placeholder for properties structure. Use the trax_properties_* functions to manipulate
* the data.
**/
typedef struct trax_properties trax_properties;
typedef struct trax_bounds {
float top;
float bottom;
float left;
float right;
} trax_bounds;
typedef void(*trax_logger)(const char *string, int length, void *obj);
typedef void(*trax_enumerator)(const char *key, const char *value, const void *obj);
/**
* Some basic configuration data used to set up the server.
**/
typedef struct trax_logging {
int flags;
trax_logger callback;
void* data;
} trax_logging;
/**
* Metadata used to specify tracker metadata and taxonomy.
**/
typedef struct trax_metadata {
int format_region;
int format_image;
int channels; // Encodes the number of channels (RGB, RGB+D, RGB+IR)
char* tracker_name;
char* tracker_description;
char* tracker_family;
trax_properties* custom;
} trax_metadata;
typedef trax_metadata trax_configuration;
/**
* Core object of the protocol. Do not manipulate fields directly.
**/
typedef struct trax_handle {
int flags;
int version;
void* stream;
trax_logging logging;
trax_metadata* metadata;
char* error;
} trax_handle;
/**
* Array for keeping images (RGB, Depth, IR)
**/
typedef struct trax_image_list {
trax_image* images[3];
} trax_image_list;
__TRAX_EXPORT extern const trax_logging trax_no_log;
__TRAX_EXPORT extern const trax_bounds trax_no_bounds;
/**
* Returns library version.
**/
__TRAX_EXPORT const char* trax_version();
/**
* Create a tracker metadata structure.
**/
__TRAX_EXPORT trax_metadata* trax_metadata_create(int region_formats, int image_formats, int channels,
const char* tracker_name, const char* tracker_description, const char* tracker_family);
/**
* Correctly releases a metadata structure.
**/
__TRAX_EXPORT void trax_metadata_release(trax_metadata** metadata);
/**
* A handy function to initialize a logging configuration structure.
**/
__TRAX_EXPORT trax_logging trax_logger_setup(trax_logger callback, void* data, int flags);
/**
* A handy function to initialize a logging configuration structure for file logging.
**/
__TRAX_EXPORT trax_logging trax_logger_setup_file(FILE* file);
/**
* Setups the protocol state object for the client and returns a handle object.
**/
__TRAX_EXPORT trax_handle* trax_client_setup_file(int input, int output, const trax_logging log);
/**
* Setups the protocol state object for the client and returns a handle object.
**/
__TRAX_EXPORT trax_handle* trax_client_setup_socket(int server, int timeout, const trax_logging log);
/**
* Waits for a valid protocol message from the server.
**/
__TRAX_EXPORT int trax_client_wait(trax_handle* client, trax_region** region, trax_properties* properties);
/**
* Sends an initialize message.
**/
__TRAX_EXPORT int trax_client_initialize(trax_handle* client, trax_image_list* image, trax_region* region, trax_properties* properties);
/**
* Sends a frame message.
**/
__TRAX_EXPORT int trax_client_frame(trax_handle* client, trax_image_list* images, trax_properties* properties);
/**
* Setups the protocol for the server side and returns a handle object.
**/
__TRAX_EXPORT trax_handle* trax_server_setup(trax_metadata *metadata, const trax_logging log);
/**
* Setups the protocol for the server side and returns a handle object.
**/
__TRAX_EXPORT trax_handle* trax_server_setup_file(trax_metadata *metadata, int input, int output, const trax_logging log);
/**
* Waits for a valid protocol message from the client.
**/
__TRAX_EXPORT int trax_server_wait(trax_handle* server, trax_image_list** images, trax_region** region, trax_properties* properties);
/**
* Sends a status reply to the client.
**/
__TRAX_EXPORT int trax_server_reply(trax_handle* server, trax_region* region, trax_properties* properties);
/**
* Used in client and server. Closes communication, sends quit message if needed.
**/
__TRAX_EXPORT int trax_terminate(trax_handle* handle, const char* reason);
/**
* Retrieve last error message encountered by the server or client. Returns NULL if no error occured.
**/
__TRAX_EXPORT const char* trax_get_error(trax_handle* handle);
/**
* Check if the handle is alive or not. The handle is not alive if it was not initalized correctly or
* it was terminated.
**/
__TRAX_EXPORT int trax_is_alive(trax_handle* handle);
/**
* Used in client and server. Closes communication, sends quit message if needed.
* Releases the handle structure.
**/
__TRAX_EXPORT int trax_cleanup(trax_handle** handle);
/**
* Sets the parameter of the client or server instance.
**/
__TRAX_EXPORT int trax_set_parameter(trax_handle* handle, int id, int value);
/**
* Gets the parameter of the client or server instance.
**/
__TRAX_EXPORT int trax_get_parameter(trax_handle* handle, int id, int* value);
/**
* Releases image structure, frees allocated memory.
**/
__TRAX_EXPORT void trax_image_release(trax_image** image);
/**
* Creates a file-system path image description.
**/
__TRAX_EXPORT trax_image* trax_image_create_path(const char* path);
/**
* Creates a URL path image description.
**/
__TRAX_EXPORT trax_image* trax_image_create_url(const char* url);
/**
* Creates a raw buffer image description.
**/
__TRAX_EXPORT trax_image* trax_image_create_memory(int width, int height, int format);
/**
* Creates a file buffer image description.
**/
__TRAX_EXPORT trax_image* trax_image_create_buffer(int length, const char* data);
/**
* Returns a type of the image handle.
**/
__TRAX_EXPORT int trax_image_get_type(const trax_image* image);
/**
* Returns a file path from a file-system path image description. This function
* returns a pointer to the internal data which should not be modified.
**/
__TRAX_EXPORT const char* trax_image_get_path(const trax_image* image);
/**
* Returns a file path from a URL path image description. This function
* returns a pointer to the internal data which should not be modified.
**/
__TRAX_EXPORT const char* trax_image_get_url(const trax_image* image);
/**
* Returns the header data of a memory image.
**/
__TRAX_EXPORT void trax_image_get_memory_header(const trax_image* image, int* width, int* height, int* format);
/**
* Returns a pointer for a writeable row in a data array of an image.
**/
__TRAX_EXPORT char* trax_image_write_memory_row(trax_image* image, int row);
/**
* Returns a read-only pointer for a row in a data array of an image.
**/
__TRAX_EXPORT const char* trax_image_get_memory_row(const trax_image* image, int row);
/**
* Returns a file buffer and its length. This function
* returns a pointer to the internal data which should not be modified.
**/
__TRAX_EXPORT const char* trax_image_get_buffer(const trax_image* image, int* length, int* format);
/**
* Releases region structure, frees allocated memory.
**/
__TRAX_EXPORT void trax_region_release(trax_region** region);
/**
* Returns type identifier of the region object.
**/
__TRAX_EXPORT int trax_region_get_type(const trax_region* region);
/**
* Creates a special region object. Only one paramter (region code) required.
**/
__TRAX_EXPORT trax_region* trax_region_create_special(int code);
/**
* Sets the code of a special region.
**/
__TRAX_EXPORT void trax_region_set_special(trax_region* region, int code);
/**
* Returns a code of a special region object.
**/
__TRAX_EXPORT int trax_region_get_special(const trax_region* region);
/**
* Creates a rectangle region.
**/
__TRAX_EXPORT trax_region* trax_region_create_rectangle(float x, float y, float width, float height);
/**
* Sets the coordinates for a rectangle region.
**/
__TRAX_EXPORT void trax_region_set_rectangle(trax_region* region, float x, float y, float width, float height);
/**
* Retreives coordinate from a rectangle region object.
**/
__TRAX_EXPORT void trax_region_get_rectangle(const trax_region* region, float* x, float* y, float* width, float* height);
/**
* Creates a polygon region object for a given amout of points. Note that the coordinates of the points
* are arbitrary and have to be set after allocation.
**/
__TRAX_EXPORT trax_region* trax_region_create_polygon(int count);
/**
* Sets coordinates of a given point in the polygon.
**/
__TRAX_EXPORT void trax_region_set_polygon_point(trax_region* region, int index, float x, float y);
/**
* Retrieves the coordinates of a specific point in the polygon.
**/
__TRAX_EXPORT void trax_region_get_polygon_point(const trax_region* region, int index, float* x, float* y);
/**
* Returns the number of points in the polygon.
**/
__TRAX_EXPORT int trax_region_get_polygon_count(const trax_region* region);
/**
* Creates a mask region object for a given amout of points. Note that the mask data is not initialized.
**/
__TRAX_EXPORT trax_region* trax_region_create_mask(int x, int y, int width, int height);
/**
* Returns the header data of a mask region.
**/
__TRAX_EXPORT void trax_region_get_mask_header(const trax_region* region, int* x, int* y, int* width, int* height);
/**
* Returns a pointer for a writeable row in a data array of a mask.
**/
__TRAX_EXPORT char* trax_region_write_mask_row(trax_region* region, int row);
/**
* Returns a read-only pointer for a row in a data array of a mask.
**/
__TRAX_EXPORT const char* trax_region_get_mask_row(const trax_region* region, int row);
/**
* Calculates a bounding box region that bounds the input region.
**/
__TRAX_EXPORT trax_bounds trax_region_bounds(const trax_region* region);
/**
* Calculates if the region contains a given point.
**/
__TRAX_EXPORT int trax_region_contains(const trax_region* region, float x, float y);
/**
* Clones a region object.
**/
__TRAX_EXPORT trax_region* trax_region_clone(const trax_region* region);
/**
* Converts region between different formats (if possible).
**/
__TRAX_EXPORT trax_region* trax_region_convert(const trax_region* region, int format);
/**
* Calculates the spatial Jaccard index for two regions (overlap).
**/
__TRAX_EXPORT float trax_region_overlap(const trax_region* a, const trax_region* b, const trax_bounds bounds);
/**
* Encodes a region object to a string representation.
**/
__TRAX_EXPORT char* trax_region_encode(const trax_region* region);
/**
* Decodes string representation of a region to an object.
**/
__TRAX_EXPORT trax_region* trax_region_decode(const char* data);
/**
* Destroy a properties object and clean up the memory.
**/
__TRAX_EXPORT void trax_properties_release(trax_properties** properties);
/**
* Clear a properties object.
**/
__TRAX_EXPORT void trax_properties_clear(trax_properties* properties);
/**
* Create a property object.
**/
__TRAX_EXPORT trax_properties* trax_properties_create();
/**
* Create a property object using values from extisting property object.
**/
__TRAX_EXPORT trax_properties* trax_properties_copy(const trax_properties* original);
/**
* Set a string property (the value string is cloned).
**/
__TRAX_EXPORT void trax_properties_set(trax_properties* properties, const char* key, const char* value);
/**
* Set an integer property. The value will be encoded as a string.
**/
__TRAX_EXPORT void trax_properties_set_int(trax_properties* properties, const char* key, int value);
/**
* Set a floating point value property. The value will be encoded as a string.
**/
__TRAX_EXPORT void trax_properties_set_float(trax_properties* properties, const char* key, float value);
/**
* Get a string property. The resulting string is a clone of the one stored so it should
* be released when not needed anymore.
**/
__TRAX_EXPORT char* trax_properties_get(const trax_properties* properties, const char* key);
/**
* Get an integer property. A stored string value is converted to an integer. If this is not possible
* or the property does not exist a given default value is returned.
**/
__TRAX_EXPORT int trax_properties_get_int(const trax_properties* properties, const char* key, int def);
/**
* Get a floating point value property. A stored string value is converted to an integer. If this is not possible
* or the property does not exist a given default value is returned.
**/
__TRAX_EXPORT float trax_properties_get_float(const trax_properties* properties, const char* key, float def);
/**
* Get a number of all pairs in the properties object.
**/
__TRAX_EXPORT int trax_properties_count(const trax_properties* properties);
/**
* Iterate over the property set using a callback function. An optional pointer can be given and is forwarded
* to the callback.
**/
__TRAX_EXPORT void trax_properties_enumerate(const trax_properties* properties, trax_enumerator enumerator, const void* object);
/**
* Allocate memory for storing the input images
**/
__TRAX_EXPORT trax_image_list* trax_image_list_create();
/**
* Release image list structure, does not release any channel images
**/
__TRAX_EXPORT void trax_image_list_release(trax_image_list** list);
/**
* Cleans image list, releases all allocated channel images
**/
__TRAX_EXPORT void trax_image_list_clear(trax_image_list* list);
/**
* Get image at a specific channel
**/
__TRAX_EXPORT trax_image* trax_image_list_get(const trax_image_list* list, int channel);
/**
* Set image at a specific channel
**/
__TRAX_EXPORT void trax_image_list_set(trax_image_list* list, trax_image* image, int channel);
/**
* Count the channels in descriptor bit-set
**/
__TRAX_EXPORT int trax_image_list_count(int channels);
#ifdef __cplusplus
}
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <iostream>
namespace trax {
class Image;
class ImageList;
class Region;
class Properties;
typedef trax_enumerator Enumerator;
class __TRAX_EXPORT Logging : public ::trax_logging {
public:
Logging(trax_logging logging);
Logging(trax_logger callback = NULL, void* data = NULL, int flags = 0);
virtual ~Logging();
};
class __TRAX_EXPORT Bounds : public ::trax_bounds {
public:
Bounds();
Bounds(trax_bounds bounds);
Bounds(float left, float top, float right, float bottom);
virtual ~Bounds();
};
class __TRAX_EXPORT Wrapper {
public:
virtual ~Wrapper();
operator bool() const {
return pn != NULL;
}
protected:
Wrapper();
Wrapper(const Wrapper& count);
void swap(Wrapper& lhs);
long claims() const;
/**
* Call after the wrapped pointer has been created or copied to increase
* reference count;
**/
void acquire();
/**
* Call instead of releasing memory to decrease reference count. If the
* reference count comes to zero then cleanup() is called.
**/
void release();
virtual void cleanup() = 0;
private:
long* pn;
};
class Handle;
class Client;
class Server;
class __TRAX_EXPORT Metadata : public Wrapper {
friend class Handle;
friend class Client;
friend class Server;
public:
Metadata();
Metadata(const Metadata& original);
Metadata(int region_formats, int image_formats, int channels = TRAX_CHANNEL_COLOR,
std::string tracker_name = std::string(), std::string tracker_description = std::string(),
std::string tracker_family = std::string());
virtual ~Metadata();
int image_formats() const;
int region_formats() const;
int channels() const;
std::string tracker_name() const;
std::string tracker_description() const;
std::string tracker_family() const;
std::string get_custom(const std::string key) const;
void set_custom(const std::string key, const std::string value);
Metadata& operator=(Metadata p) throw();
protected:
Metadata(trax_metadata* metadata);
virtual void cleanup();
void wrap(trax_metadata* obj);
private:
trax_metadata* metadata;
};
typedef Metadata Configuration;
class __TRAX_EXPORT Handle: public Wrapper {
public:
/**
* Closes communication, sends quit message if needed.
**/
virtual ~Handle();
/**
* Sets the parameter for the client or server instance.
**/
int set_parameter(int id, int value);
/**
* Gets the parameter for the client or server instance.
**/
int get_parameter(int id, int* value);
const Metadata metadata();
/**
* Terminates session, sends quit message.
**/
bool terminate(const std::string reason = std::string());
/**
* Return last error string or empty string if no error has occured in last call to handle.
**/
std::string get_error();
/**
* Check if the handle is opened or not.
**/
bool is_alive();
protected:
virtual void cleanup();
void wrap(trax_handle* obj);
Handle();
Handle(const Handle& original);
trax_handle* handle;
};
class __TRAX_EXPORT Client: public Handle {
public:
/**
* Sets up the protocol for the client side and returns a handle object.
**/
Client(int input, int output, Logging logger);
/**
* Sets up the protocol for the client side and returns a handle object.
**/
Client(int server, Logging logger, int timeout = -1);
virtual ~Client();
/**
* Waits for a valid protocol message from the server.
**/
int wait(Region& region, Properties& properties);
/**
* Sends an initialize message.
**/
int initialize(const ImageList& image, const Region& region, const Properties& properties);
/**
* Sends a frame message.
**/
int frame(const ImageList& image, const Properties& properties);
protected:
using Handle::cleanup;
private:
Client& operator=(Client p) throw();
};
class __TRAX_EXPORT Server: public Handle {
public:
/**
* Sets up the protocol for the server side and returns a handle object.
**/
Server(Metadata metadata, Logging log);
virtual ~Server();
/**
* Waits for a valid protocol message from the client.
**/
int wait(ImageList& image, Region& region, Properties& properties);
/**
* Sends a status reply to the client.
**/
int reply(const Region& region, const Properties& properties);
private:
Server& operator=(Server p) throw();
};
class __TRAX_EXPORT Image : public Wrapper {
friend class Client;
friend class Server;
friend class ImageList;
public:
Image();
Image(const Image& original);
/**
* Creates a file-system path image description.
**/
static Image create_path(const std::string& path);
/**
* Creates a URL path image description.
**/
static Image create_url(const std::string& url);
/**
* Creates a raw buffer image description.
**/
static Image create_memory(int width, int height, int format);
/**
* Creates a file buffer image description.
**/
static Image create_buffer(int length, const char* data);
/**
* Releases image structure, frees allocated memory.
**/
virtual ~Image();
/**
* Returns a type of the image handle.
**/
int type() const;
/**
* Checks if image container is empty.
**/
bool empty() const;
/**
* Returns a file path from a file-system path image description. This function
* returns a pointer to the internal data which should not be modified.
**/
const std::string get_path() const;
/**
* Returns a file path from a URL path image description. This function
* returns a pointer to the internal data which should not be modified.
**/
const std::string get_url() const;
/**
* Returns the header data of a memory image.
**/
void get_memory_header(int* width, int* height, int* format) const;
/**
* Returns a pointer for a writeable row in a data array of an image.
**/
char* write_memory_row(int row);
/**
* Returns a read-only pointer for a row in a data array of an image.
**/
const char* get_memory_row(int row) const;
/**
* Returns a file buffer and its length. This function
* returns a pointer to the internal data which should not be modified.
**/
const char* get_buffer(int* length, int* format) const;
Image& operator=(Image lhs) throw();
protected:
virtual void cleanup();
void wrap(trax_image* obj);
private:
trax_image* image;
};
class __TRAX_EXPORT ImageList : public Wrapper {
friend class Client;
friend class Server;
public:
ImageList();
ImageList(const ImageList& original);
/**
* Releases image list structure, frees allocated memory.
**/
virtual ~ImageList();
/**
* Get image at a specific channel
**/
Image get(int channel_num) const;
/**
* Test if list contains a specific channel
**/
bool has(int channel_num) const;
/**
* Set image at a specific channel
**/
void set(Image image, int channel_num);
ImageList& operator=(ImageList lhs) throw();
int size() const;
protected:
virtual void cleanup();
void wrap(trax_image_list* obj);
private:
std::vector<Image> images;
trax_image_list* list;
};
class __TRAX_EXPORT Region : public Wrapper {
friend class Client;
friend class Server;
public:
Region();
Region(const Region& original);
/**
* Creates a special region object. Only one paramter (region code) required.
**/
static Region create_special(int code);
/**
* Creates a rectangle region.
**/
static Region create_rectangle(float x, float y, float width, float height);
/**
* Creates a polygon region object for a given amout of points. Note that the coordinates of the points
* are arbitrary and have to be set after allocation.
**/
static Region create_polygon(int count);
/**
* Creates a mask region object for a given amout of points. Note that the mask data is not initialized.
**/
static Region create_mask(int x, int y, int width, int height);
/**
* Releases region, frees allocated memory.
**/
virtual ~Region();
/**
* Returns type identifier of the region object.
**/
int type() const;
/**
* Checks if region container is empty.
**/
bool empty() const;
/**
* Sets the code of a special region.
**/
void set(int code);
/**
* Returns a code of a special region object.
**/
int get() const;
/**
* Sets the coordinates for a rectangle region.
**/
void set(float x, float y, float width, float height);
/**
* Retreives coordinate from a rectangle region object.
**/
void get(float* x, float* y, float* width, float* height) const;
/**
* Sets coordinates of a given point in the polygon.
**/
void set_polygon_point(int index, float x, float y);
/**
* Retrieves the coordinates of a specific point in the polygon.
**/
void get_polygon_point(int index, float* x, float* y) const;
/**
* Returns the number of points in the polygon.
**/
int get_polygon_count() const;
/**
* Returns the header data of a mask region.
**/
void get_mask_header(int* x, int* y, int* width, int* height) const;
/**
* Returns a pointer for a writeable row in a data array of a mask.
**/
char* write_mask_row(int row);
/**
* Returns a read-only pointer for a row in a data array of a mask.
**/
const char* get_mask_row(int row) const;
/**
* Computes bounds of a region.
**/
Bounds bounds() const;
bool contains(float x, float y) const;
Region convert(int type) const;
float overlap(const Region& region, const Bounds& bounds = Bounds()) const;
Region& operator=(Region lhs) throw();
operator std::string () const;
friend __TRAX_EXPORT std::ostream& operator<< (std::ostream& output, const Region& region);
friend __TRAX_EXPORT std::istream& operator>> (std::istream& input, Region &D);
protected:
virtual void cleanup();
void wrap(trax_region* obj);
private:
trax_region* region;
};
class __TRAX_EXPORT Properties : public Wrapper {
friend class Client;
friend class Server;
public:
/**
* Create a property object.
**/
Properties();
/**
* A copy constructor.
**/
Properties(const Properties& original);
/**
* Destroy a properties object and clean up the memory.
**/
virtual ~Properties();
/**
* Return number of property pairs.
**/
int size() const;
/**
* Clear a properties object.
**/
void clear();
/**
* Set a string property (the value string is cloned).
**/
void set(const std::string key, const std::string value);
/**
* Set an integer property. The value will be encoded as a string.
**/
void set(const std::string key, int value);
/**
* Set a floating point value property. The value will be encoded as a string.
**/
void set(const std::string key, float value);
/**
* Get a string property.
**/
std::string get(const std::string key, const std::string& def = std::string()) const;
std::string get(const std::string key, const char* def = NULL) const;
/**
* Get an integer property. A stored string value is converted to an integer. If this is not possible
* or the property does not exist a given default value is returned.
**/
int get(const std::string key, int def) const;
/**
* Get a floating point value property. A stored string value is converted to a float. If this is not possible
* or the property does not exist a given default value is returned.
**/
float get(const std::string key, float def) const;
double get(const std::string key, double def) const;
/**
* Get a boolean point value property. A stored string value is converted to an integer and checked if it is zero. If this is not possible
* or the property does not exist a given default value is returned.
**/
bool get(const std::string key, bool def) const;
/**
* Iterate over the property set using a callback function. An optional pointer can be given and is forwarded
* to the callback.
**/
void enumerate(Enumerator enumerator, void* object);
void from_map(const std::map<std::string, std::string>& m);
void to_map(std::map<std::string, std::string>& m) const;
void to_vector(std::vector<std::string>& v) const;
Properties& operator=(Properties lhs) throw();
friend __TRAX_EXPORT std::ostream& operator<< (std::ostream& output, const Properties& properties);
protected:
virtual void cleanup();
void wrap(trax_properties* obj);
private:
void ensure_unique();
trax_properties* properties;
};
}
#endif
#endif