+gboolean assign_operator(LttvSimpleExpression* se, LttvExpressionOp op) {
+
+// g_print("se->field = %i\n",se->field);
+// g_print("se->offset = %i\n",se->offset);
+// g_print("se->op = %p\n",se->op);
+// g_print("se->value = %s\n",se->value);
+
+ switch(se->field) {
+ /* char */
+ case LTTV_FILTER_TRACE_NAME:
+ case LTTV_FILTER_TRACEFILE_NAME:
+ case LTTV_FILTER_STATE_P_NAME:
+ case LTTV_FILTER_EVENT_NAME:
+ switch(op) {
+ case LTTV_FIELD_EQ:
+ se->op = lttv_apply_op_eq_string;
+ break;
+ case LTTV_FIELD_NE:
+ se->op = lttv_apply_op_eq_string;
+ break;
+ default:
+ g_warning("Error encountered in operator assignment");
+ return FALSE;
+ }
+ break;
+ case LTTV_FILTER_STATE_PID:
+ case LTTV_FILTER_STATE_PPID:
+ case LTTV_FILTER_STATE_EX_MODE:
+ case LTTV_FILTER_STATE_EX_SUBMODE:
+ case LTTV_FILTER_STATE_P_STATUS:
+ switch(op) {
+ case LTTV_FIELD_EQ:
+ se->op = lttv_apply_op_eq_uint64;
+ break;
+ case LTTV_FIELD_NE:
+ se->op = lttv_apply_op_ne_uint64;
+ break;
+ case LTTV_FIELD_LT:
+ se->op = lttv_apply_op_lt_uint64;
+ break;
+ case LTTV_FIELD_LE:
+ se->op = lttv_apply_op_le_uint64;
+ break;
+ case LTTV_FIELD_GT:
+ se->op = lttv_apply_op_gt_uint64;
+ break;
+ case LTTV_FIELD_GE:
+ se->op = lttv_apply_op_ge_uint64;
+ break;
+ default:
+ g_warning("Error encountered in operator assignment");
+ return FALSE;
+ }
+ break;
+ case LTTV_FILTER_STATE_CT:
+ case LTTV_FILTER_STATE_IT:
+ case LTTV_FILTER_EVENT_TIME:
+ case LTTV_FILTER_EVENT_TSC:
+ switch(op) {
+ case LTTV_FIELD_EQ:
+ se->op = lttv_apply_op_eq_double;
+ break;
+ case LTTV_FIELD_NE:
+ se->op = lttv_apply_op_ne_double;
+ break;
+ case LTTV_FIELD_LT:
+ se->op = lttv_apply_op_lt_double;
+ break;
+ case LTTV_FIELD_LE:
+ se->op = lttv_apply_op_le_double;
+ break;
+ case LTTV_FIELD_GT:
+ se->op = lttv_apply_op_gt_double;
+ break;
+ case LTTV_FIELD_GE:
+ se->op = lttv_apply_op_ge_double;
+ break;
+ default:
+ g_warning("Error encountered in operator assignment");
+ return FALSE;
+ }
+ break;
+ default:
+ g_warning("Error encountered in operator assignment");
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+
+/**
+ * Finds the structure type depending
+ * on the fields in parameters
+ * @params ft Field of the current structure
+ * @return LttvStructType enum or -1 for error
+ */
+gint
+lttv_struct_type(gint ft) {
+
+ switch(ft) {
+ case LTTV_FILTER_TRACE_NAME:
+ return LTTV_FILTER_TRACE;
+ break;
+ case LTTV_FILTER_TRACEFILE_NAME:
+ return LTTV_FILTER_TRACEFILE;
+ break;
+ case LTTV_FILTER_STATE_PID:
+ case LTTV_FILTER_STATE_PPID:
+ case LTTV_FILTER_STATE_CT:
+ case LTTV_FILTER_STATE_IT:
+ case LTTV_FILTER_STATE_P_NAME:
+ case LTTV_FILTER_STATE_EX_MODE:
+ case LTTV_FILTER_STATE_EX_SUBMODE:
+ case LTTV_FILTER_STATE_P_STATUS:
+ case LTTV_FILTER_STATE_CPU:
+ return LTTV_FILTER_STATE;
+ break;
+ case LTTV_FILTER_EVENT_NAME:
+ case LTTV_FILTER_EVENT_CATEGORY:
+ case LTTV_FILTER_EVENT_TIME:
+ case LTTV_FILTER_EVENT_TSC:
+ case LTTV_FILTER_EVENT_FIELD:
+ return LTTV_FILTER_EVENT;
+ break;
+ default:
+ return -1;
+ }
+}
+
+/**
+ * Applies the 'equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_eq_uint64(gpointer v1, char* v2) {
+
+ guint64* r = (guint64*) v1;
+ guint64 l = atoi(v2);
+ return (*r == l);
+
+}
+
+/**
+ * Applies the 'equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_eq_uint32(gpointer v1, char* v2) {
+ guint32* r = (guint32*) v1;
+ guint32 l = atoi(v2);
+ return (*r == l);
+}
+
+/**
+ * Applies the 'equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_eq_uint16(gpointer v1, char* v2) {
+ guint16* r = (guint16*) v1;
+ guint16 l = atoi(v2);
+ return (*r == l);
+}
+
+/**
+ * Applies the 'equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_eq_double(gpointer v1, char* v2) {
+ double* r = (double*) v1;
+ double l = atof(v2);
+ return (*r == l);
+}
+
+/**
+ * Applies the 'equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_eq_string(gpointer v1, char* v2) {
+ char* r = (char*) v1;
+ return (!g_strcasecmp(r,v2));
+}
+
+/**
+ * Applies the 'not equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ne_uint64(gpointer v1, char* v2) {
+ guint64* r = (guint64*) v1;
+ guint64 l = atoi(v2);
+ return (*r != l);
+}
+
+/**
+ * Applies the 'not equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ne_uint32(gpointer v1, char* v2) {
+ guint32* r = (guint32*) v1;
+ guint32 l = atoi(v2);
+ return (*r != l);
+}
+
+/**
+ * Applies the 'not equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ne_uint16(gpointer v1, char* v2) {
+ guint16* r = (guint16*) v1;
+ guint16 l = atoi(v2);
+ return (*r != l);
+}
+
+/**
+ * Applies the 'not equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ne_double(gpointer v1, char* v2) {
+ double* r = (double*) v1;
+ double l = atof(v2);
+ return (*r != l);
+}
+
+/**
+ * Applies the 'not equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ne_string(gpointer v1, char* v2) {
+ char* r = (char*) v1;
+ return (g_strcasecmp(r,v2));
+}
+
+/**
+ * Applies the 'lower than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_lt_uint64(gpointer v1, char* v2) {
+ guint64* r = (guint64*) v1;
+ guint64 l = atoi(v2);
+ return (*r < l);
+}
+
+/**
+ * Applies the 'lower than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_lt_uint32(gpointer v1, char* v2) {
+ guint32* r = (guint32*) v1;
+ guint32 l = atoi(v2);
+ return (*r < l);
+}
+
+/**
+ * Applies the 'lower than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_lt_uint16(gpointer v1, char* v2) {
+ guint16* r = (guint16*) v1;
+ guint16 l = atoi(v2);
+ return (*r < l);
+}
+
+/**
+ * Applies the 'lower than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_lt_double(gpointer v1, char* v2) {
+ double* r = (double*) v1;
+ double l = atof(v2);
+ return (*r < l);
+}
+
+/**
+ * Applies the 'lower than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_le_uint64(gpointer v1, char* v2) {
+ guint64* r = (guint64*) v1;
+ guint64 l = atoi(v2);
+ return (*r <= l);
+}
+
+/**
+ * Applies the 'lower or equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_le_uint32(gpointer v1, char* v2) {
+ guint32* r = (guint32*) v1;
+ guint32 l = atoi(v2);
+ return (*r <= l);
+}
+
+/**
+ * Applies the 'lower or equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_le_uint16(gpointer v1, char* v2) {
+ guint16* r = (guint16*) v1;
+ guint16 l = atoi(v2);
+ return (*r <= l);
+}
+
+/**
+ * Applies the 'lower or equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_le_double(gpointer v1, char* v2) {
+ double* r = (double*) v1;
+ double l = atof(v2);
+ return (*r <= l);
+}
+
+/**
+ * Applies the 'greater than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_gt_uint64(gpointer v1, char* v2) {
+ guint64* r = (guint64*) v1;
+ guint64 l = atoi(v2);
+ return (*r > l);
+}
+
+/**
+ * Applies the 'greater than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_gt_uint32(gpointer v1, char* v2) {
+ guint32* r = (guint32*) v1;
+ guint32 l = atoi(v2);
+ return (*r > l);
+}
+
+/**
+ * Applies the 'greater than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_gt_uint16(gpointer v1, char* v2) {
+ guint16* r = (guint16*) v1;
+ guint16 l = atoi(v2);
+ return (*r > l);
+}
+
+/**
+ * Applies the 'greater than' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_gt_double(gpointer v1, char* v2) {
+ double* r = (double*) v1;
+ double l = atof(v2);
+ return (*r > l);
+}
+
+/**
+ * Applies the 'greater or equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ge_uint64(gpointer v1, char* v2) {
+ guint64* r = (guint64*) v1;
+ guint64 l = atoi(v2);
+ return (*r >= l);
+}
+
+/**
+ * Applies the 'greater or equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ge_uint32(gpointer v1, char* v2) {
+ guint32* r = (guint32*) v1;
+ guint32 l = atoi(v2);
+ return (*r >= l);
+}
+
+/**
+ * Applies the 'greater or equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ge_uint16(gpointer v1, char* v2) {
+ guint16* r = (guint16*) v1;
+ guint16 l = atoi(v2);
+ return (*r >= l);
+}
+
+/**
+ * Applies the 'greater or equal' operator to the
+ * specified structure and value
+ * @param v1 left member of comparison
+ * @param v2 right member of comparison
+ * @return success/failure of operation
+ */
+gboolean lttv_apply_op_ge_double(gpointer v1, char* v2) {
+ double* r = (double*) v1;
+ double l = atof(v2);
+ return (*r >= l);
+}