Esempio n. 1
0
String Char_str__g(Char self) {
    // Returns the string representation of the character.
    String ret = String_alloc(2);
    assert(self < 0xf && "Not implemented for Unicode chars");
    ret->length = 1;
    ret->data[0] = self;
    return ret;
}
Esempio n. 2
0
String *String_add(String *s, String *t)
{
	if ( s==NULL ) return t; // don't REF/DEREF as we might free our return value
	if ( t==NULL ) return s;
	REF((heap_object *)s);
	REF((heap_object *)t);
	size_t n = strlen(s->str) + strlen(t->str);
	String *u = String_alloc(n);
	strcpy(u->str, s->str);
	strcat(u->str, t->str);
	DEREF((heap_object *)s);
	DEREF((heap_object *)t);
	return u;
}
Esempio n. 3
0
String *String_add(String *s, String *t)
{
	if ( s == NULL && t == NULL) {
		null_pointer_error("Addition Operator cannot be applied to two NULL string objects\n");
		return NIL_STRING;
	}
	if ( s == NULL ) return t; // don't REF/DEREF as we might free our return value
	if ( t == NULL ) return s;
	REF((heap_object *)s);
	REF((heap_object *)t);
	size_t n = strlen(s->str) + strlen(t->str);
	String *u = String_alloc(n);
	strcpy(u->str, s->str);
	strcat(u->str, t->str);
	DEREF((heap_object *)s);
	DEREF((heap_object *)t);
	return u;
}
Esempio n. 4
0
File: Os.c Progetto: mfichman/jogo
String Os_strerror(Int error) {
    // Returns a message describing the OS-level error.
    String ret = String_alloc(1024);
#ifdef WINDOWS
    DWORD flags = FORMAT_MESSAGE_FROM_SYSTEM;
    LPTSTR buffer = ret->data;
    ret->length = FormatMessage(flags, 0, error, 0, buffer, 1024, 0);
    if (ret->length) {
        return ret;
    }
#else
    if (!strerror_r(error, (char*)ret->data, 1024)) {
        return ret;
    }
    const char* msg = gai_strerror(error);
    if (msg) {
        strncpy((char*)ret->data, msg, 1024);
        ret->length = strlen((char*)ret->data);
        return ret;
   }
#endif
    Boot_abort();
    return 0;
}
Esempio n. 5
0
// ----- allocator

defmethod(OBJ, galloc, pmString) // lazy alloc
  retmethod(_1);
endmethod

// ----- destructor

// generic gdeinit from ValueSequence

// ----- constructors

defalias (OBJ, (ginitWithStr)gnewWithStr, pmString, (STR)str);
defmethod(OBJ,  ginitWithStr            , pmString, (STR)str)
  U32 size = strlen(str);
  struct String* s = String_alloc(size);

  memcpy(s->value, str, s->size = size);

  retmethod((OBJ)s);
endmethod

defalias (OBJ, (ginitWith)gnewWith, pmString, String);
defmethod(OBJ,  ginitWith         , pmString, String) // copy
  struct String* str = String_alloc(self2->size);

  memcpy(str->value, self2->value, str->size = self2->size);

  retmethod( (OBJ)str );
endmethod
Esempio n. 6
0
String Float_str__g(Float self) {
    String ret = String_alloc(64);
    snprintf((char*)ret->data, 64, "%g", self); 
    ret->length = strlen((char*)ret->data);
    return ret;
}
Esempio n. 7
0
String *String_new(char *orig)
{
	String *s = String_alloc(strlen(orig));
	strcpy(s->str, orig);
	return s;
}