print ascii code of a character (ktoi)
This commit is contained in:
parent
cdfcc753e4
commit
09250861d9
|
|
@ -9,26 +9,34 @@
|
||||||
|
|
||||||
std::string mini_sprintf_format(bool left_align, bool sign, bool space_on_left, bool padding_by_zero, int width, int precision, int length, char specifier, const MlValue &value) {
|
std::string mini_sprintf_format(bool left_align, bool sign, bool space_on_left, bool padding_by_zero, int width, int precision, int length, char specifier, const MlValue &value) {
|
||||||
std::string s;
|
std::string s;
|
||||||
|
std::ostringstream stream_str; // PERF simpler solution..without string stream
|
||||||
bool is_positive = false;
|
bool is_positive = false;
|
||||||
|
|
||||||
if (specifier == 's') {
|
if (specifier == 's') {
|
||||||
return value.as_string();
|
return value.as_string();
|
||||||
}
|
}
|
||||||
if (specifier == 'c') {
|
if (specifier == 'c') {
|
||||||
std::ostringstream stream_str;
|
|
||||||
stream_str << (char) value.as_int();
|
stream_str << (char) value.as_int();
|
||||||
return stream_str.str();
|
return stream_str.str();
|
||||||
}
|
}
|
||||||
if (specifier == 'i' || specifier == 'd') {
|
if (specifier == 'i' || specifier == 'd') {
|
||||||
|
if (value.is_number()) {
|
||||||
int ival = value.as_int();
|
int ival = value.as_int();
|
||||||
is_positive = ival >= 0;
|
is_positive = ival >= 0;
|
||||||
|
|
||||||
s = std::to_string(ival);
|
s = std::to_string(ival);
|
||||||
|
} else if (value.is_string()) { // print ascii code of character
|
||||||
|
if (value.as_string().size() > 0) {
|
||||||
|
stream_str << (int)value.as_string()[0];
|
||||||
|
return stream_str.str();
|
||||||
|
} else {
|
||||||
|
// TODO handle empty string - error?
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (specifier == 'f' || specifier == 'e') {
|
} else if (specifier == 'f' || specifier == 'e') {
|
||||||
double dval = value.as_float();
|
double dval = value.as_float();
|
||||||
is_positive = dval >= 0;
|
is_positive = dval >= 0;
|
||||||
|
|
||||||
std::ostringstream stream_str;
|
|
||||||
if (specifier == 'f')
|
if (specifier == 'f')
|
||||||
stream_str << std::fixed;
|
stream_str << std::fixed;
|
||||||
else
|
else
|
||||||
|
|
|
||||||
6
ml.cpp
6
ml.cpp
|
|
@ -248,7 +248,8 @@ MlValue MlValue::cast_to_int() const {
|
||||||
return *this;
|
return *this;
|
||||||
case FLOAT:
|
case FLOAT:
|
||||||
return MlValue(long(stack_data.f));
|
return MlValue(long(stack_data.f));
|
||||||
// Only ints and floats can be cast to an int
|
case STRING:
|
||||||
|
return MlValue(std::stol(str));
|
||||||
default:
|
default:
|
||||||
throw MlError(*this, MlEnvironment(), BAD_CAST);
|
throw MlError(*this, MlEnvironment(), BAD_CAST);
|
||||||
}
|
}
|
||||||
|
|
@ -261,7 +262,8 @@ MlValue MlValue::cast_to_float() const {
|
||||||
return *this;
|
return *this;
|
||||||
case INT:
|
case INT:
|
||||||
return MlValue(float(stack_data.i));
|
return MlValue(float(stack_data.i));
|
||||||
// Only ints and floats can be cast to a float
|
case STRING:
|
||||||
|
return MlValue(std::stod(str));
|
||||||
default:
|
default:
|
||||||
throw MlError(*this, MlEnvironment(), BAD_CAST);
|
throw MlError(*this, MlEnvironment(), BAD_CAST);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(defun itok (ascii) (sprintf "%c" (list ascii)))
|
(defun itok (ascii) (sprintf "%c" (list ascii)))
|
||||||
|
(defun ktoi (char) (int (sprintf "%d" (list char))))
|
||||||
|
|
||||||
; pause for interval of seconds
|
; pause for interval of seconds
|
||||||
(defun sleep (time)
|
(defun sleep (time)
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,8 @@
|
||||||
|
|
||||||
(ut::define-test "result of (itok 65)" '(ut::assert-equal "A" (itok 65)))
|
(ut::define-test "result of (itok 65)" '(ut::assert-equal "A" (itok 65)))
|
||||||
(ut::define-test "result of (itok 48)" '(ut::assert-equal "0" (itok 48)))
|
(ut::define-test "result of (itok 48)" '(ut::assert-equal "0" (itok 48)))
|
||||||
|
(ut::define-test "result of (ktoi \"A\")" '(ut::assert-equal 65 (ktoi "A")))
|
||||||
|
(ut::define-test "result of (ktoi \"0\")" '(ut::assert-equal 48 (ktoi "0")))
|
||||||
|
|
||||||
(ut::define-test "result of (write-file \"/tmp/file\" \"write-file test\")" '(ut::assert-equal 1 (write-file "/tmp/file" "write-file test\n")))
|
(ut::define-test "result of (write-file \"/tmp/file\" \"write-file test\")" '(ut::assert-equal 1 (write-file "/tmp/file" "write-file test\n")))
|
||||||
(ut::define-test "result of (is-file? \"/tmp/file\")" '(ut::assert-true (is-file? "/tmp/file")))
|
(ut::define-test "result of (is-file? \"/tmp/file\")" '(ut::assert-true (is-file? "/tmp/file")))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue