Jelajahi Sumber

q2double and double2q added

Jan Janak 21 tahun lalu
induk
melakukan
4239e341a2
1 mengubah file dengan 31 tambahan dan 3 penghapusan
  1. 31 3
      qvalue.h

+ 31 - 3
qvalue.h

@@ -80,6 +80,7 @@ typedef int qvalue_t;
 #define Q_PREFIX_LEN (sizeof(Q_PREFIX) - 1)
 #define Q_PREFIX_LEN (sizeof(Q_PREFIX) - 1)
 
 
 
 
+
 /*
 /*
  * Calculate the length of printed q
  * Calculate the length of printed q
  */
  */
@@ -101,6 +102,32 @@ static inline size_t len_q(qvalue_t q)
 }
 }
 
 
 
 
+/*
+ * Convert qvalue_t to double
+ */
+static inline double q2double(qvalue_t q)
+{
+	if (q == Q_UNSPECIFIED) {
+		return -1;
+	} else {
+		return (double)((double)q / (double)1000);
+	}
+}
+
+
+/*
+ * Convert double to qvalue_t
+ */
+static inline qvalue_t double2q(double q)
+{
+	if (q == -1) {
+		return Q_UNSPECIFIED;
+	} else {
+		return q * 1000;
+	}
+}
+
+
 /*
 /*
  * Convert q value to string
  * Convert q value to string
  */
  */
@@ -130,12 +157,13 @@ static inline char* q2str(qvalue_t q, unsigned int* len)
 		q %= 10;
 		q %= 10;
 		if (!q) goto end;
 		if (!q) goto end;
 
 
-		*p = q + '0';
-		*len = Q_PREFIX_LEN + 3;
+		*p++ = q + '0';
 	}
 	}
  end:
  end:
 	*p = '\0';
 	*p = '\0';
-	*len = p - buf;
+	if (len) {
+		*len = p - buf;
+	}
 	return buf;
 	return buf;
 }
 }