Address issue 18: use fprinf instead of iostream for logging in the dynamic code.

https://code.google.com/p/cld2/issues/detail?id=18


git-svn-id: https://cld2.googlecode.com/svn/trunk@164 b252ecd4-b096-bf77-eb8e-91563289f87e
diff --git a/internal/cld2_dynamic_data.cc b/internal/cld2_dynamic_data.cc
index 1655170..c9db0b8 100644
--- a/internal/cld2_dynamic_data.cc
+++ b/internal/cld2_dynamic_data.cc
@@ -15,7 +15,6 @@
 #include "cld2_dynamic_data.h"
 #include "integral_types.h"
 #include <assert.h>
-#include <iostream>
 #include <stdint.h>
 
 namespace CLD2DynamicData {
@@ -29,12 +28,12 @@
   const unsigned char* raw2 = static_cast<const unsigned char*>(data2);
   for (int x=0; x<length; x++) {
     if (raw1[x] != raw2[x]) {
-      std::cerr << "mem difference at data[" << x << "]: decimal " << (unsigned int) raw1[x] << " != decimal " << (unsigned int) raw2[x] << std::endl;
+      fprintf(stderr, "mem difference at data[%d]: decimal %d != decimal %d\n",
+              x, (unsigned int) raw1[x], (unsigned int) raw2[x]);
       for (int y=std::max(0,x-5); y<length && y<=x+5; y++) {
-        std::cerr << "[" << y << "]: " << (unsigned int) raw1[y]
-          << " <-> " << (unsigned int) raw2[y]
-          << ( x == y ? " [FIRST ERROR DETECTED HERE] " : "")
-          << std::endl;
+        fprintf(stderr, "[%d]: %d <-> %d%s\n",
+                y, (unsigned int) raw1[y], (unsigned int) raw2[y],
+                ( x == y ? " [FIRST ERROR DETECTED HERE] " : ""));
       }
       return false;
     }
@@ -52,27 +51,27 @@
   char safeString[DATA_FILE_MARKER_LENGTH + 1];
   memcpy(safeString, header->sanityString, DATA_FILE_MARKER_LENGTH);
   safeString[DATA_FILE_MARKER_LENGTH] = 0;
-  std::cout << "sanityString: " << safeString << std::endl;
-  std::cout << "totalFileSizeBytes: " << header->totalFileSizeBytes << std::endl;
-  std::cout << "utf8PropObj_state0: " << header->utf8PropObj_state0 << std::endl;
-  std::cout << "utf8PropObj_state0_size: " << header->utf8PropObj_state0_size << std::endl;
-  std::cout << "utf8PropObj_total_size: " << header->utf8PropObj_total_size << std::endl;
-  std::cout << "utf8PropObj_max_expand: " << header->utf8PropObj_max_expand << std::endl;
-  std::cout << "utf8PropObj_entry_shift: " << header->utf8PropObj_entry_shift << std::endl;
-  std::cout << "utf8PropObj_bytes_per_entry: " << header->utf8PropObj_bytes_per_entry << std::endl;
-  std::cout << "utf8PropObj_losub: " << header->utf8PropObj_losub << std::endl;
-  std::cout << "utf8PropObj_hiadd: " << header->utf8PropObj_hiadd << std::endl;
-  std::cout << "startOf_utf8PropObj_state_table: " << header->startOf_utf8PropObj_state_table << std::endl;
-  std::cout << "lengthOf_utf8PropObj_state_table: " << header->lengthOf_utf8PropObj_state_table << std::endl;
-  std::cout << "startOf_utf8PropObj_remap_base: " << header->startOf_utf8PropObj_remap_base << std::endl;
-  std::cout << "lengthOf_utf8PropObj_remap_base: " << header->lengthOf_utf8PropObj_remap_base << std::endl;
-  std::cout << "startOf_utf8PropObj_remap_string: " << header->startOf_utf8PropObj_remap_string << std::endl;
-  std::cout << "lengthOf_utf8PropObj_remap_string: " << header->lengthOf_utf8PropObj_remap_string << std::endl;
-  std::cout << "startOf_utf8PropObj_fast_state: " << header->startOf_utf8PropObj_fast_state << std::endl;
-  std::cout << "lengthOf_utf8PropObj_fast_state: " << header->lengthOf_utf8PropObj_fast_state << std::endl;
-  std::cout << "startOf_kAvgDeltaOctaScore: " << header->startOf_kAvgDeltaOctaScore << std::endl;
-  std::cout << "lengthOf_kAvgDeltaOctaScore: " << header->lengthOf_kAvgDeltaOctaScore << std::endl;
-  std::cout << "numTablesEncoded: " << header->numTablesEncoded << std::endl;
+  fprintf(stdout, "sanityString: %s\n", safeString);
+  fprintf(stdout, "totalFileSizeBytes: %d\n", header->totalFileSizeBytes);
+  fprintf(stdout, "utf8PropObj_state0: %d\n", header->utf8PropObj_state0);
+  fprintf(stdout, "utf8PropObj_state0_size: %d\n", header->utf8PropObj_state0_size);
+  fprintf(stdout, "utf8PropObj_total_size: %d\n", header->utf8PropObj_total_size);
+  fprintf(stdout, "utf8PropObj_max_expand: %d\n", header->utf8PropObj_max_expand);
+  fprintf(stdout, "utf8PropObj_entry_shift: %d\n", header->utf8PropObj_entry_shift);
+  fprintf(stdout, "utf8PropObj_bytes_per_entry: %d\n", header->utf8PropObj_bytes_per_entry);
+  fprintf(stdout, "utf8PropObj_losub: %d\n", header->utf8PropObj_losub);
+  fprintf(stdout, "utf8PropObj_hiadd: %d\n", header->utf8PropObj_hiadd);
+  fprintf(stdout, "startOf_utf8PropObj_state_table: %d\n", header->startOf_utf8PropObj_state_table);
+  fprintf(stdout, "lengthOf_utf8PropObj_state_table: %d\n", header->lengthOf_utf8PropObj_state_table);
+  fprintf(stdout, "startOf_utf8PropObj_remap_base: %d\n", header->startOf_utf8PropObj_remap_base);
+  fprintf(stdout, "lengthOf_utf8PropObj_remap_base: %d\n", header->lengthOf_utf8PropObj_remap_base);
+  fprintf(stdout, "startOf_utf8PropObj_remap_string: %d\n", header->startOf_utf8PropObj_remap_string);
+  fprintf(stdout, "lengthOf_utf8PropObj_remap_string: %d\n", header->lengthOf_utf8PropObj_remap_string);
+  fprintf(stdout, "startOf_utf8PropObj_fast_state: %d\n", header->startOf_utf8PropObj_fast_state);
+  fprintf(stdout, "lengthOf_utf8PropObj_fast_state: %d\n", header->lengthOf_utf8PropObj_fast_state);
+  fprintf(stdout, "startOf_kAvgDeltaOctaScore: %d\n", header->startOf_kAvgDeltaOctaScore);
+  fprintf(stdout, "lengthOf_kAvgDeltaOctaScore: %d\n", header->lengthOf_kAvgDeltaOctaScore);
+  fprintf(stdout, "numTablesEncoded: %d\n", header->numTablesEncoded);
 
   const char* tableNames[7];
   tableNames[0]="unigram_compat_obj";
@@ -86,27 +85,27 @@
   for (int x=0; x<header->numTablesEncoded; x++) {
     TableHeader& tHeader = header->tableHeaders[x];
       
-    std::cout << "Table " << (x+1) << ": (" << tableNames[x] << ")" << std::endl;
-    std::cout << "  kCLDTableSizeOne: " << tHeader.kCLDTableSizeOne << std::endl;
-    std::cout << "  kCLDTableSize: " << tHeader.kCLDTableSize << std::endl;
-    std::cout << "  kCLDTableKeyMask: " << tHeader.kCLDTableKeyMask << std::endl;
-    std::cout << "  kCLDTableBuildDate: " << tHeader.kCLDTableBuildDate << std::endl;
-    std::cout << "  startOf_kCLDTable: " << tHeader.startOf_kCLDTable << std::endl;
-    std::cout << "  lengthOf_kCLDTable: " << tHeader.lengthOf_kCLDTable << std::endl;
-    std::cout << "  startOf_kCLDTableInd: " << tHeader.startOf_kCLDTableInd << std::endl;
-    std::cout << "  lengthOf_kCLDTableInd: " << tHeader.lengthOf_kCLDTableInd << std::endl;
-    std::cout << "  startOf_kRecognizedLangScripts: " << tHeader.startOf_kRecognizedLangScripts << std::endl;
-    std::cout << "  lengthOf_kRecognizedLangScripts: " << tHeader.lengthOf_kRecognizedLangScripts << std::endl;
+    fprintf(stdout, "Table %d: (%s)\n", (x+1), tableNames[x]);;
+    fprintf(stdout, "  kCLDTableSizeOne: %d\n", tHeader.kCLDTableSizeOne);
+    fprintf(stdout, "  kCLDTableSize: %d\n", tHeader.kCLDTableSize);
+    fprintf(stdout, "  kCLDTableKeyMask: %d\n", tHeader.kCLDTableKeyMask);
+    fprintf(stdout, "  kCLDTableBuildDate: %d\n", tHeader.kCLDTableBuildDate);
+    fprintf(stdout, "  startOf_kCLDTable: %d\n", tHeader.startOf_kCLDTable);
+    fprintf(stdout, "  lengthOf_kCLDTable: %d\n", tHeader.lengthOf_kCLDTable);
+    fprintf(stdout, "  startOf_kCLDTableInd: %d\n", tHeader.startOf_kCLDTableInd);
+    fprintf(stdout, "  lengthOf_kCLDTableInd: %d\n", tHeader.lengthOf_kCLDTableInd);
+    fprintf(stdout, "  startOf_kRecognizedLangScripts: %d\n", tHeader.startOf_kRecognizedLangScripts);
+    fprintf(stdout, "  lengthOf_kRecognizedLangScripts: %d\n", tHeader.lengthOf_kRecognizedLangScripts);
   }
 }
 
 #define CHECK_EQUALS(name) if (loadedData->name != realData->name) {\
-  std::cerr << #name << ": " << loadedData->name << " != " << realData->name << std::endl;\
+    fprintf(stderr, "%s: %d != %d\n", #name, loadedData->name, realData->name);\
   return false;\
 }
 
 #define CHECK_MEM_EQUALS(name,size) if (!mem_compare(loadedData->name,realData->name,size)) {\
-  std::cerr << #name << ": data mismatch." << std::endl;\
+  fprintf(stderr, "%s: data mismatch.\n", #name);\
   return false;\
 }
 
@@ -147,26 +146,26 @@
 
   if (loadedData->unigram_obj->fast_state == NULL) {
     if (realData->unigram_obj->fast_state != NULL) {
-      std::cerr << "unigram_obj->fast_state is missing." << std::endl;
+      fprintf(stderr, "unigram_obj->fast_state is missing.\n");
       return false;
     }
   } else {
     if (realData->unigram_obj->fast_state == NULL) {
-      std::cerr << "unigram_obj->fast_state shouldn't be present." << std::endl;
+      fprintf(stderr, "unigram_obj->fast_state shouldn't be present.\n");
       return false;
     }
     CHECK_MEM_EQUALS(unigram_obj->fast_state, strlen(
       reinterpret_cast<const char*>(realData->unigram_obj->fast_state)) + 1); // null terminator included
   }
-  if (DEBUG) std::cout << "verified." << std::endl;
+  if (DEBUG) fprintf(stdout, "verified.\n");
 
-  if (DEBUG) std::cout << "Verifying kExpectedScore... ";
+  if (DEBUG) fprintf(stdout, "Verifying kExpectedScore... ");
   CHECK_MEM_EQUALS(kExpectedScore, realSupplement->lengthOf_kAvgDeltaOctaScore);
-  if (DEBUG) std::cout << "verified." << std::endl;
+  if (DEBUG) fprintf(stdout, "verified.\n");
 
   // 3. Each table
   for (int x=0; x<NUM_TABLES; x++) {
-    if (DEBUG) std::cout << "Verifying table " << (x+1) << "... ";
+    if (DEBUG) fprintf(stdout, "Verifying table %d... ", x+1);
     const CLD2::CLD2TableSummary* realData = realTableSummaries[x];
     const CLD2::CLD2TableSummary* loadedData = loadedTableSummaries[x];
     // We need to calculate the table lengths to do the memcmp
@@ -185,9 +184,9 @@
     CHECK_MEM_EQUALS(kCLDTable, tableSizeBytes);
     CHECK_MEM_EQUALS(kCLDTableInd, indirectTableSizeBytes);
     CHECK_MEM_EQUALS(kRecognizedLangScripts, recognizedScriptsSizeBytes);
-    if (DEBUG) std::cout << "verified." << std::endl;
+    if (DEBUG) fprintf(stdout, "verified.\n");
   }
-  if (DEBUG) std::cout << "All data verified successfully." << std::endl;
+  if (DEBUG) fprintf(stdout, "All data verified successfully.\n");
   return true;
 }
 
@@ -205,18 +204,15 @@
 
 bool coreAssumptionsOk() {
   if (sizeof(CLD2::uint8) != 1) {
-    std::cerr << "uint8 is " << (sizeof(CLD2::uint8) * 8)
-      << " bits instead of 8!" << std::endl;
+    fprintf(stderr, "uint8 is %d bits instead of 8!\n", (int) (sizeof(CLD2::uint8) * 8));
     return false;
   }
   if (sizeof(CLD2::uint16) != 2) {
-    std::cerr << "uint16 is " << (sizeof(CLD2::uint16) * 8)
-      << " bits instead of 16!" << std::endl;
+    fprintf(stderr, "uint16 is %d bits instead of 16!\n", (int) (sizeof(CLD2::uint16) * 8));
     return false;
   }
   if (sizeof(CLD2::uint32) != 4) {
-    std::cerr << "uint32 is " << (sizeof(CLD2::uint32) * 8)
-      << " bits instead of 32!" << std::endl;
+    fprintf(stderr, "uint32 is %d bits instead of 32!\n", (int) (sizeof(CLD2::uint32) * 8));
     return false;
   }
   return true;
diff --git a/internal/cld2_dynamic_data_extractor.cc b/internal/cld2_dynamic_data_extractor.cc
index 39c8340..bd83dff 100644
--- a/internal/cld2_dynamic_data_extractor.cc
+++ b/internal/cld2_dynamic_data_extractor.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <iostream>
-
 #include "cld2_dynamic_data.h"
 #include "cld2_dynamic_data_extractor.h"
 #include "cld2_dynamic_data_loader.h" // for verifying the written data
@@ -31,7 +29,7 @@
 int advance(FILE* f, CLD2::uint32 position) {
   const char ZERO = 0;
   int pad = position - ftell(f);
-  if (DEBUG) cout << "  Adding " << pad << " bytes of padding" << endl;
+  if (DEBUG) fprintf(stdout, "  Adding %d bytes of padding\n", pad);
   while (pad-- > 0) {
     fwrite(&ZERO,1,1,f);
   }
@@ -39,9 +37,9 @@
 }
 
 void writeChunk(FILE *f, const void* data, CLD2::uint32 startAt, CLD2::uint32 length) {
-  if (DEBUG) cout << "Write chunk @" << startAt << ", len=" << length << endl;
+  if (DEBUG) fprintf(stdout, "  Write chunk @%d, len=%d\n", startAt, length);
   advance(f, startAt);
-  if (DEBUG) cout << "  Writing " << length << " bytes of data" << endl;
+  if (DEBUG) fprintf(stdout, "  Writing %d bytes of data", length);;
   fwrite(data, 1, length, f);
 }
 
@@ -200,7 +198,7 @@
 // boundaries for maximum efficiency.
 void alignAll(CLD2DynamicData::FileHeader* header, const int alignment) {
   CLD2::uint32 totalPadding = 0;
-  if (DEBUG) { std::cout << "Align for " << (alignment*8) << " bits." << std::endl; }
+  if (DEBUG) { fprintf(stdout, "Align for %d bits.\n", (alignment*8)); }
   CLD2::uint32 headerSize = CLD2DynamicData::calculateHeaderSize(
     header->numTablesEncoded);
   CLD2::uint32 offset = headerSize;
@@ -209,7 +207,7 @@
     int stateTablePad = alignment - (offset % alignment);
     if (stateTablePad == alignment) stateTablePad = 0;
     totalPadding += stateTablePad;
-    if (DEBUG) { std::cout << "Alignment for stateTable adjusted by " << stateTablePad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for stateTable adjusted by %d\n", stateTablePad); }
     offset += stateTablePad;
     header->startOf_utf8PropObj_state_table = offset;
     offset += header->lengthOf_utf8PropObj_state_table;
@@ -219,7 +217,7 @@
     int remapPad = alignment - (offset % alignment);
     if (remapPad == alignment) remapPad = 0;
     totalPadding += remapPad;
-    if (DEBUG) { std::cout << "Alignment for remap adjusted by " << remapPad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for remap adjusted by %d\n", remapPad); }
     offset += remapPad;
     header->startOf_utf8PropObj_remap_base = offset;
     offset += header->lengthOf_utf8PropObj_remap_base;
@@ -229,7 +227,7 @@
     int remapStringPad = alignment - (offset % alignment);
     if (remapStringPad == alignment) remapStringPad = 0;
     totalPadding += remapStringPad;
-    if (DEBUG) { std::cout << "Alignment for remapString adjusted by " << remapStringPad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for remapString adjusted by %d\n", remapStringPad); }
     offset += remapStringPad;
     header->startOf_utf8PropObj_remap_string = offset;
     offset += header->lengthOf_utf8PropObj_remap_string; // null terminator already counted in initUtf8Headers
@@ -239,7 +237,7 @@
     int fastStatePad = alignment - (offset % alignment);
     if (fastStatePad == alignment) fastStatePad = 0;
     totalPadding += fastStatePad;
-    if (DEBUG) { std::cout << "Alignment for fastState adjusted by " << fastStatePad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for fastState adjusted by %d\n", fastStatePad); }
     offset += fastStatePad;
     if (header->lengthOf_utf8PropObj_fast_state > 0) {
       header->startOf_utf8PropObj_fast_state = offset;
@@ -253,7 +251,7 @@
     int deltaOctaPad = alignment - (offset % alignment);
     if (deltaOctaPad == alignment) deltaOctaPad = 0;
     totalPadding += deltaOctaPad;
-    if (DEBUG) { std::cout << "Alignment for deltaOctaScore adjusted by " << deltaOctaPad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for deltaOctaScore adjusted by %d\n", deltaOctaPad); }
     offset += deltaOctaPad;
     header->startOf_kAvgDeltaOctaScore = offset;
     offset += header->lengthOf_kAvgDeltaOctaScore;
@@ -264,7 +262,7 @@
     int tablePad = alignment - (offset % alignment);
     if (tablePad == alignment) tablePad = 0;
     totalPadding += tablePad;
-    if (DEBUG) { std::cout << "Alignment for table " << x << " adjusted by " << tablePad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for table %d adjusted by %d\n", x, tablePad); }
     offset += tablePad;
     tableHeader.startOf_kCLDTable = offset;
     offset += tableHeader.lengthOf_kCLDTable;
@@ -272,7 +270,7 @@
     int indirectPad = alignment - (offset % alignment);
     if (indirectPad == alignment) indirectPad = 0;
     totalPadding += indirectPad;
-    if (DEBUG) { std::cout << "Alignment for tableInd " << x << " adjusted by " << indirectPad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for tableInd %d adjusted by %d\n", x, indirectPad); }
     offset += indirectPad;
     tableHeader.startOf_kCLDTableInd = offset;
     offset += tableHeader.lengthOf_kCLDTableInd;
@@ -280,7 +278,7 @@
     int scriptsPad = alignment - (offset % alignment);
     if (scriptsPad == alignment) scriptsPad = 0;
     totalPadding += scriptsPad;
-    if (DEBUG) { std::cout << "Alignment for scriptsPad " << x << " adjusted by " << scriptsPad << std::endl; }
+    if (DEBUG) { fprintf(stdout, "Alignment for scriptsPad %d adjusted by %d", x, scriptsPad); }
     offset += scriptsPad;
     tableHeader.startOf_kRecognizedLangScripts = offset;
     offset += tableHeader.lengthOf_kRecognizedLangScripts; // null terminator already counted in initTableHeaders
@@ -291,53 +289,44 @@
   header->totalFileSizeBytes = offset;
 
   if (DEBUG) {
-    std::cout << "Data aligned." << std::endl;
-    std::cout << "Header size:  " << headerSize << " bytes " << std::endl;
-    std::cout << "Data size:    " << (offset - totalPadding) << " bytes" << std::endl;
-    std::cout << "Padding size: " << totalPadding << " bytes" << std::endl;
-    
-    std::cout << "  cld_generated_CjkUni_obj: " << (
+    fprintf(stdout, "Data aligned.\n");
+    fprintf(stdout, "Header size:  %d bytes\n", headerSize);
+    fprintf(stdout, "Data size:    %d bytes\n", (offset - totalPadding));
+    fprintf(stdout, "Padding size: %d bytes\n", totalPadding);
+    fprintf(stdout, "  cld_generated_CjkUni_obj: %d bytes\n", (
         header->lengthOf_utf8PropObj_state_table +
         header->lengthOf_utf8PropObj_remap_string +
-        header->lengthOf_utf8PropObj_fast_state)
-      << " bytes " << std::endl;
-    std::cout << "  kAvgDeltaOctaScore:       "
-      << header->lengthOf_kAvgDeltaOctaScore << " bytes " << std::endl;
-    std::cout << "  kCjkCompat_obj:           " << (
+        header->lengthOf_utf8PropObj_fast_state));
+    fprintf(stdout, "  kAvgDeltaOctaScore:       %d bytes\n",
+        header->lengthOf_kAvgDeltaOctaScore);
+    fprintf(stdout, "  kCjkCompat_obj:           %d bytes\n", (
         header->tableHeaders[0].lengthOf_kCLDTable +
         header->tableHeaders[0].lengthOf_kCLDTableInd +
-        header->tableHeaders[0].lengthOf_kRecognizedLangScripts + 1)
-      << " bytes " << std::endl;
-    std::cout << "  kCjkDeltaBi_obj:          " << (
+        header->tableHeaders[0].lengthOf_kRecognizedLangScripts + 1));
+    fprintf(stdout, "  kCjkDeltaBi_obj:          %d bytes\n", (
         header->tableHeaders[1].lengthOf_kCLDTable +
         header->tableHeaders[1].lengthOf_kCLDTableInd +
-        header->tableHeaders[1].lengthOf_kRecognizedLangScripts + 1)
-      << " bytes " << std::endl;
-    std::cout << "  kDistinctBiTable_obj:     " << (
+        header->tableHeaders[1].lengthOf_kRecognizedLangScripts + 1));
+    fprintf(stdout, "  kDistinctBiTable_obj:     %d bytes\n", (
         header->tableHeaders[2].lengthOf_kCLDTable +
         header->tableHeaders[2].lengthOf_kCLDTableInd +
-        header->tableHeaders[2].lengthOf_kRecognizedLangScripts + 1)
-      << " bytes " << std::endl;
-    std::cout << "  kQuad_obj:                " << (
+        header->tableHeaders[2].lengthOf_kRecognizedLangScripts + 1));
+    fprintf(stdout, "  kQuad_obj:                %d bytes\n", (
         header->tableHeaders[3].lengthOf_kCLDTable +
         header->tableHeaders[3].lengthOf_kCLDTableInd +
-        header->tableHeaders[3].lengthOf_kRecognizedLangScripts + 1)
-      << " bytes " << std::endl;
-    std::cout << "  kQuad_obj2:                " << (
+        header->tableHeaders[3].lengthOf_kRecognizedLangScripts + 1));
+    fprintf(stdout, "  kQuad_obj2:               %d bytes\n", (
         header->tableHeaders[4].lengthOf_kCLDTable +
         header->tableHeaders[4].lengthOf_kCLDTableInd +
-        header->tableHeaders[4].lengthOf_kRecognizedLangScripts + 1)
-      << " bytes " << std::endl;
-    std::cout << "  kDeltaOcta_obj:           " << (
+        header->tableHeaders[4].lengthOf_kRecognizedLangScripts + 1));
+    fprintf(stdout, "  kDeltaOcta_obj:           %d bytes\n", (
         header->tableHeaders[5].lengthOf_kCLDTable +
         header->tableHeaders[5].lengthOf_kCLDTableInd +
-        header->tableHeaders[5].lengthOf_kRecognizedLangScripts + 1)
-      << " bytes " << std::endl;
-    std::cout << "  kDistinctOcta_obj:        " << (
+        header->tableHeaders[5].lengthOf_kRecognizedLangScripts + 1));
+    fprintf(stdout, "  kDistinctOcta_obj:        %d bytes\n", (
         header->tableHeaders[6].lengthOf_kCLDTable +
         header->tableHeaders[6].lengthOf_kCLDTableInd +
-        header->tableHeaders[6].lengthOf_kRecognizedLangScripts + 1)
-      << " bytes " << std::endl;
+        header->tableHeaders[6].lengthOf_kRecognizedLangScripts + 1));
   }
 }
 
diff --git a/internal/cld2_dynamic_data_loader.cc b/internal/cld2_dynamic_data_loader.cc
index 33b7ffb..7227b8e 100644
--- a/internal/cld2_dynamic_data_loader.cc
+++ b/internal/cld2_dynamic_data_loader.cc
@@ -14,7 +14,6 @@
 #include <assert.h>
 #include <stdint.h>
 #include <stdio.h>
-#include <iostream>
 #include <fstream>
 #include <fcntl.h>
 #include <stdlib.h>
@@ -69,7 +68,7 @@
                                     header->sanityString,
                                     CLD2DynamicData::DATA_FILE_MARKER,
                                     CLD2DynamicData::DATA_FILE_MARKER_LENGTH)) {
-    std::cerr << "Malformed header: bad file marker!" << std::endl;
+    fprintf(stderr, "Malformed header: bad file marker!\n");
     delete header;
     return NULL;
   }
@@ -114,7 +113,7 @@
   // Confirm header size is correct.
   int expectedHeaderSize = CLD2DynamicData::calculateHeaderSize(header->numTablesEncoded);
   if (expectedHeaderSize != bytesRead) {
-    std::cerr << "Header size mismatch! Expected " << expectedHeaderSize << ", but read " << bytesRead << std::endl;
+    fprintf(stderr, "Header size mismatch! Expected %d, but read %d\n", expectedHeaderSize, bytesRead);
     delete header;
     delete[] tableHeaders;
     return NULL;
@@ -131,7 +130,7 @@
   }
 
   if (actualSize != header->totalFileSizeBytes) {
-    std::cerr << "File size mismatch! Expected " << header->totalFileSizeBytes << ", but found " << actualSize << std::endl;
+    fprintf(stderr, "File size mismatch! Expected %d, but found %d\n", header->totalFileSizeBytes, actualSize);
     delete header;
     delete[] tableHeaders;
     return NULL;
diff --git a/internal/cld2_dynamic_data_tool.cc b/internal/cld2_dynamic_data_tool.cc
index 10fde38..b564d3e 100644
--- a/internal/cld2_dynamic_data_tool.cc
+++ b/internal/cld2_dynamic_data_tool.cc
@@ -14,7 +14,6 @@
 
 #include <assert.h>
 #include <stdio.h>
-#include <iostream>
 #include <fstream>
 #include <fcntl.h>
 #include <stdlib.h>
@@ -52,11 +51,11 @@
 
 int main(int argc, char** argv) {
   if (!CLD2DynamicData::isLittleEndian()) {
-    std::cerr << "System is big-endian: currently not supported." << std::endl;
+    fprintf(stderr, "System is big-endian: currently not supported.\n");
     return -1;
   }
   if (!CLD2DynamicData::coreAssumptionsOk()) {
-    std::cerr << "Core assumptions violated, unsafe to continue." << std::endl;
+    fprintf(stderr, "Core assumptions violated, unsafe to continue.\n");
     return -2;
   }
 
@@ -101,22 +100,22 @@
       if (i < argc - 1) {
         fileName = argv[++i];
       } else {
-        std::cerr << "missing file name argument" << std::endl << std::endl;
-        std::cerr << USAGE;
+        fprintf(stderr, "Missing file name argument\n\n");
+        fprintf(stderr, "%s", USAGE);
         return -1;
       }
     } else if (strcmp(argv[i], "--help") == 0) {
-      std::cout << USAGE;
+      fprintf(stdout, "%s", USAGE);
       return 0;
     } else {
-      std::cerr << "Unsupported option: " << argv[i] << std::endl << std::endl;
-      std::cerr << USAGE;
+      fprintf(stderr, "Unsupported option: %s\n\n", argv[i]);
+      fprintf(stderr, "%s", USAGE);
       return -1;
     }
   }
 
   if (mode == 0) {
-    std::cerr << USAGE;
+    fprintf(stderr, "%s", USAGE);
     return -1;
   }
 
@@ -152,7 +151,7 @@
   } else if (mode == 3) { // head
     CLD2DynamicData::FileHeader* header = CLD2DynamicDataLoader::loadHeaderFromFile(fileName);
     if (header == NULL) {
-      std::cerr << "Cannot read header from file: " << fileName << std::endl;
+      fprintf(stderr, "Cannot read header from file: %s\n", fileName);
       return -1;
     }
     CLD2DynamicData::dumpHeader(header);
@@ -166,7 +165,7 @@
     CLD2::ScoringTables* loadedData = CLD2DynamicDataLoader::loadDataFile(fileName, &mmapAddress, &mmapLength);
 
     if (loadedData == NULL) {
-      std::cerr << "Failed to read data file: " << fileName << std::endl;
+      fprintf(stderr, "Failed to read data file: %s\n", fileName);
       return -1;
     }
     bool result = CLD2DynamicData::verify(
@@ -175,10 +174,10 @@
       static_cast<const CLD2::ScoringTables*>(loadedData));
     CLD2DynamicDataLoader::unloadDataFile(&loadedData, &mmapAddress, &mmapLength);
     if (loadedData != NULL || mmapAddress != NULL || mmapLength != 0) {
-      std::cerr << "Warning: failed to clean up memory for ScoringTables." << std::endl;
+      fprintf(stderr, "Warning: failed to clean up memory for ScoringTables.\n");
     }
     if (!result) {
-      std::cerr << "Verification failed!" << std::endl;
+      fprintf(stderr, "Verification failed!\n");
       return -1;
     }
   }