/* queryfeature.h
   Feature querying functions
   Initial version by Joost Nieuwenhuijse - joost@newhouse.nl
   GPL etc..

   These functions can be used to determine properties of this specific pano12 library.
   Features are name/value pairs. The name is string and the value can be either an
   integer, double or string. Boolean values are encoded as integers (0=false, 1=true)

   Functions queryFeatureCount() and queryFeatures() can be used to obtain a list
   of features. Use queryFeatureInt(), queryFeatureDouble() and queryFeatureString()
   to determine the value of a specific feature. If the feature is known,
   queryFeatureXxx() returns nonzero and sets the *result value.

   queryFeatureString returns the string length of the feature value. The string will
   be copied to the result buffer. Caller should allocate and free the result buffer.
   Value is always NULL terminated (except if bufsize=0). Use
   queryFeatureString(name,NULL,0) to determine the strlen of the feature value.
   In addition to string values, queryFeatureString also returns the int and double
   features converted into a string.

   Usage:
     int i,bufsize,numfeatures;
     char *name;
     char *value;
     Tp12FeatureType type;

     numfeatures=queryFeatureCount();
     for(i=0; i < numfeatures;i++)
     {
       queryFeatures(i,&name,&type);
       bufsize=queryFeatureString(name,NULL,0)+1;
       value=(char*)malloc(bufsize);
       queryFeatureString(name,value,bufsize);
       // ... do something with the value ...
       free(value);
     }
*/

#ifndef _QUERYFEATURE_H
#define _QUERYFEATURE_H

typedef enum {p12FeatureUnknown=0,p12FeatureInt=1,p12FeatureDouble=2,p12FeatureString=3} Tp12FeatureType;

int queryFeatureCount();
void queryFeatures(int index,char** name,Tp12FeatureType* type);
int queryFeatureInt(const char *name, int *result);
int queryFeatureDouble(const char *name, double *result);
int queryFeatureString(const char *name,char *result, const int bufsize);

/** defined if progress and output dialogs can be overridden by using
 *  setProgressFcn, setInfoDlgFcn and setErrorFcn
 */
#define PANO12_FEATURE_DLG_FCN 1

#endif
