//===--------- Strings.cpp - Implementation of the Strings class  ---------===//
//
//                              The VMKit project
//
// This file is distributed under the University of Illinois Open Source 
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "vmkit/Thread.h"

#include "MMTkObject.h"

namespace mmtk {

extern "C" void Java_org_j3_mmtk_Strings_write___3CI(MMTkObject* str,
                                                     MMTkArray* msg,
                                                     sint32 len) {
  for (sint32 i = 0; i < len; ++i) {
    fprintf(stderr, "%c", msg->elements[i]);
  }
}

extern "C" void Java_org_j3_mmtk_Strings_writeThreadId___3CI(MMTkObject* str,
                                                             MMTkArray* msg,
                                                             sint32 len) {
  fprintf(stderr, "[%p] ", (void*)vmkit::Thread::get());
  
  for (sint32 i = 0; i < len; ++i) {
    fprintf(stderr, "%c", msg->elements[i]);
  }
}


extern "C" sint32
Java_org_j3_mmtk_Strings_copyStringToChars__Ljava_lang_String_2_3CII(
    MMTkObject* obj, MMTkString* str, MMTkArray* dst, sint32 dstBegin,
    sint32 dstEnd) {

  sint32 len = str->count;
  sint32 n = (dstBegin + len <= dstEnd) ? len : (dstEnd - dstBegin);

  for (sint32 i = 0; i < n; i++) {
    dst->elements[dstBegin + i] = str->value->elements[str->offset + i];
  }
  
  return n;
 
}

} // end namespace mmtk
