示例#1
0
文件: code.c 项目: bitbytejoy/cj
TestResult* allocateNewStringTestTemplate(char* x, int xLength, char* expected,
    char* testName) {
    char* actual = allocateNewString(x, xLength);
    TestResult* r = malloc(sizeof(TestResult));
    r -> testName = testName;
    r -> passed = areStringsEqual(actual, expected);
    free(actual);
    return r;
}
示例#2
0
struct bufferedString * nameByID (long taxID)
{
  static struct			storedNameTag queryTag;
  struct storedNameTag *	res;
  struct bufferedString * resStr = NULL;
		
  queryTag.taxID = taxID;
  res = (struct storedNameTag *)avl_find(nameTagAVL, &queryTag);
  if (res)
  {
    resStr = allocateNewString();
    appendRangeToString(resStr,globalNameBuffer,res->startIndex,res->startIndex+res->length-1);
  }
  return resStr;
}
示例#3
0
int main (int argc, const char * argv[])
{
  FILE							*inFile,
  *mapFile;
  
  struct	bufferedString			**currentBuffers;
  
  struct  storedNameTag			*aTag,
  *aTag2;
  
  char	automatonState			= 0,
  currentField			= 0,
  currentChar				= 0,
  line_buffer       [MAX_LINE_BUFFER];
  
  long	currentLineID			= 1,
  expectedFields			= 2,
  mappedID				,
  indexer;
  
  size_t  current_buffer_index    = 0L,
  current_buffer_size     = 0L;
  
  
 
  globalNameBuffer = allocateNewString();
  globalTagBuffer	 = allocateNewBufferedTag();
  
  currentBuffers   = (struct	bufferedString**)malloc (expectedFields*sizeof (struct	bufferedString*));
  nameTagAVL		 = avl_create (compare_tags, NULL, NULL);
  
  for (indexer = 0; indexer < expectedFields; indexer++)
    currentBuffers[indexer] = allocateNewString();
  
		
  if (argc != 3)
  {
    fprintf (stderr,"%s\n", UsageString);
    return 1;
  }
		
  inFile		= fopen (argv[1], "rb");
  
  if (!inFile)
  {
	   fprintf (stderr,"Failed to open input file: %s\n", argv[1]);
	   return 1;
  }
  
  mapFile		= fopen (argv[2], "rb");
  
  if (!mapFile)
  {
	   fprintf (stderr,"Failed to open gid-taxid map file: %s\n", argv[2]);
	   return 1;
  }
  
  for (indexer = 0; indexer < 256; indexer ++) {
    digits [indexer] = 0;
  }
  
  for (indexer = (long)'0'; indexer <= (long)'9'; indexer ++) {
    digits [indexer] = 1;
  }
  
  for (;;) {
    if (current_buffer_index >= current_buffer_size) {
      current_buffer_size = fread (line_buffer, 1L, MAX_LINE_BUFFER, inFile);
      if (current_buffer_size == 0L) {
        break;
      }
      current_buffer_index = 1L;
      currentChar = line_buffer[0];
    } else {
      currentChar = line_buffer[current_buffer_index++];
    }
  
    switch (automatonState)
    {
      case 0: /* start of the line; expecting numbers */
        if (digits[currentChar])
        {
          automatonState = 1; /* reading sequence ID */
          appendCharacterToString(currentBuffers[currentField],currentChar);
        }
        else
          if (!(currentChar == '\n' || currentChar == '\r'))
            reportErrorLine ("Could not find a valid sequence ID to start the line",currentLineID);
        break;
        
      case 1: /* reading file ID */
        if (currentChar >= '0' && currentChar <='9')
          appendCharacterToString(currentBuffers[currentField],currentChar);
        else
          if (currentChar == '\t')
          {
            currentField ++;
            automatonState = 2;
            /* reading file ID */
          }
          else
            reportErrorLine ("Expected a tab following the gi ID",currentLineID);
        break;
        
      case 2: /* read a field */
        if (isalnum(currentChar) || currentChar == '/' || currentChar == '.' || currentChar == '_' || currentChar == '-')
          appendCharacterToString(currentBuffers[currentField],currentChar);
        else
          if (currentChar == '\n' || currentChar == '\r')
          {
            automatonState = 0;
            currentLineID ++;
            currentField = 0;
            
            aTag			 = allocateNameTag();
            aTag->taxID      = atoi(currentBuffers[0]->sData);
            aTag->startIndex = globalNameBuffer->sLength;
            aTag->length	 = appendRangeToString(globalNameBuffer,currentBuffers[1],0,currentBuffers[1]->sLength-1);
            
            appendTagToBuffer (globalTagBuffer, aTag->taxID, aTag->startIndex, aTag->length);
            
            if (aTag->length <= 0)
              reportErrorLine ("Empty name tag",currentLineID);
            if (*avl_probe(nameTagAVL,aTag) != aTag)
            {
              free			(aTag);
                //reportErrorLine ("Duplicate name tag",currentLineID);
            }
            for (indexer = 0; indexer < expectedFields; indexer++)
              clear_buffered_string(currentBuffers[indexer]);
          }
          else
            reportErrorLine ("Unexpected character",currentLineID);
        break;
        
        
    }
  }
  
  fclose (inFile);
		
  aTag	    = allocateNameTag();
  fprintf (stderr, "Reading gid-taxid mapping file...\n");
  currentLineID = 0;
  current_buffer_index = current_buffer_size = 0L;

  for (;;) {
    if (current_buffer_index >= current_buffer_size) {
      current_buffer_size = fread (line_buffer, 1L, MAX_LINE_BUFFER, mapFile);
      if (current_buffer_size == 0L) {
        break;
      }
      current_buffer_index = 1L;
      currentChar = line_buffer[0];
    } else {
      currentChar = line_buffer[current_buffer_index++];
    }
    if (currentLineID > 1 && currentLineID % 5000000 == 0 && automatonState == 0) {
      fprintf (stderr, "Read %ld lines\n", currentLineID);
    }
    switch (automatonState)
    {
      case 0: /* start of the line; expecting numbers */
        if (currentChar >= '0' && currentChar <='9')
        {
          automatonState = 1; /* reading sequence ID */
          appendCharacterToString(currentBuffers[currentField],currentChar);
        }
        else
          if (!(currentChar == '\n' || currentChar == '\r'))
            reportErrorLine ("Could not find a valid sequence ID to start the line",currentLineID);
        break;
        
      case 1: /* reading file ID */
        if (digits[currentChar])
          appendCharacterToString(currentBuffers[currentField],currentChar);
        else
          if (currentChar == '\t')
          {
            currentField ++;
            automatonState = 2;
            /* reading file ID */
          }
          else
            reportErrorLine ("Expected a tab following the tax ID",currentLineID);
        break;
        
      case 2: /* read a field */
        if (digits[currentChar])
          appendCharacterToString(currentBuffers[currentField],currentChar);
        else
          if (currentChar == '\n' || currentChar == '\r')
          {
            automatonState = 0;
            currentLineID ++;
            currentField = 0;
            
            aTag->taxID      = atoi(currentBuffers[0]->sData);
            mappedID		 = atoi(currentBuffers[1]->sData);
            
            aTag2 = avl_find(nameTagAVL,aTag);
            if (aTag2)
              aTag2->mappedTag = mappedID;
            for (indexer = 0; indexer < expectedFields; indexer++)
              clear_buffered_string(currentBuffers[indexer]);
          }
          else
            reportErrorLine ("Unexpected character",currentLineID);
        break;
        
        
    }
  }
  
  fclose (mapFile);
  
  for (indexer = 0L; indexer < expectedFields; indexer++)
    destroy_string(currentBuffers[indexer]);
  
  free(currentBuffers);
  
  for (indexer = 0L; indexer < globalTagBuffer->sLength; indexer++) {
    aTag->taxID      = globalTagBuffer->gID[indexer];
    aTag2 = avl_find(nameTagAVL,aTag);
    if (aTag2) {
      printf ("%ld\t%ld\t", aTag->taxID,aTag2->mappedTag);
    }
    else {
      printf ("%ld\t-1\t", aTag->taxID);
    }
    for (expectedFields = globalTagBuffer->startTag[indexer]; 
         expectedFields < globalTagBuffer->startTag[indexer] + globalTagBuffer->lengthTag[indexer];
         expectedFields ++)
    {
      printf ("%c",globalNameBuffer->sData[expectedFields]);
    }
    printf ("\n");
  }
  
    //printf ("-1,NULL");
  free (aTag);
  return 0;
}
示例#4
0
文件: code.c 项目: bitbytejoy/cj
char* convertIntToJsonBool(int x) {
    if (x) {
        return allocateNewString("true", 4);
    }
    return allocateNewString("false", 5);
}