Пример #1
0
Kvs_t* in(const char* path) {
    Kvs_t* kvs = init_kvs();

    FILE* instream;
    if ((instream = fopen(path, "rb")) == NULL) {
        return kvs;
    }

    int count;
    fread(&count, sizeof(int), 1, instream);
    if(count <= 0) {
        fclose(instream);
        return kvs;
    }

    Key_t key;
    size_t size;
    for(int i = 0; i < count; i++) {
        fread(&key, sizeof(Key_t), 1, instream);
        fread(&size, sizeof(size_t), 1, instream);

        Value_t value = malloc(size);
        fread(value, size, 1, instream);

        kvs = add_kv(kvs, make_kv(key, value, size));
    }

    fclose(instream);
    return kvs;
}
Пример #2
0
	void splitter(void) {
		char *curr_word, *curr_key, curr_ltr;
		int state = IN_KEY;

		// For the current word
		curr_word = input_data;
		curr_key = input_data;

		// Teragen creates 10 byte keys
		int nchar = 0;
		n_pairs = 0;
	
		// Go through the file and update the count for each unique word
		for (uint64_t i = 0; i < input_len; i++) {	
			// Each word is the same, regardless of case
			curr_ltr = input_data[i];
			switch (state) {
			case IN_KEY:
				if (nchar == 0)
					curr_word = &input_data[i];
				if (nchar >= 10) {
					// End of the current word
					input_data[i] = 0;
					state = NOT_IN_WORD;
					curr_key = curr_word;
					nchar = 0;		
				}
				else
					nchar ++;
				break;
			case IN_VALUE:
				if (curr_ltr == '\n') {
					// The values end in '\r\n'
					input_data[i] = 0;
					input_data[i-1] = 0;

					// Add key-value
					add_kv(curr_key, curr_word);
					
					// Modify the state
					state = IN_KEY;
				}
				break;
			default:
			case NOT_IN_WORD:
				if (curr_ltr >= '!' && curr_ltr <= '~') {
					// Start of a new word
					curr_word = &input_data[i];
					state = IN_VALUE;
				}
				break;
			}
		}

		// Add the last word
		//add_kv(curr_key, curr_word);
		//n_pairs++;
	}
Пример #3
0
/**
 * 添加一个参数
 */
Kvs_t* add_param(Kvs_t* kvs, Param_t* pParam) {
	Kv_t* kv = make_kv(pParam -> id, pParam, sizeof(Param_t));
	return add_kv(kvs, kv);
}
Пример #4
0
/**
 * 添加一条记录
 */
Kvs_t* add_record(Kvs_t* kvs, Record_t* pRecord) {
	Kv_t* kv = make_kv(pRecord -> id, pRecord, sizeof(Record_t));
	return add_kv(kvs, kv);
}