Esempio n. 1
0
int *queue_full(int *queues, int _rear, int _front) {
	int *new_queues = createQueue(max_size * 2);
	copy_element(_front+1, max_size, 0, queues, new_queues);
	copy_element(0, _rear + 1, max_size - (_front + 1), queues, new_queues);
	front = 2 * max_size - 1;
	rear = max_size - 2;
	max_size = max_size * 2;
	return new_queues;
}
Esempio n. 2
0
void copy_JCLArray(JCLArray* _this, const JCLArray* src)
{
	JILLong i;
	destroy_JCLArray(_this);
	_this->grain = src->grain;
	for( i = 0; i < src->count; i++ )
		set_JCLArray(_this, i, copy_element(_this, get_JCLArray(src, i)));
}
Esempio n. 3
0
void test_copy_element(void) {
	queues[1] = 2;
	queues[2] = 3;
	int *new_queues = createQueue(6);
	copy_element(1, 3, 0, queues, new_queues);
	TEST_ASSERT_EQUAL(2, new_queues[0]);
	TEST_ASSERT_EQUAL(3, new_queues[1]);
}
Esempio n. 4
0
// Can also be used to rehash
hash_t *HASH_copy(const hash_t *hash){
  hash_t *ret = HASH_create(hash->num_elements);
  ret->version = hash->version;

  int i;
  for(i=0;i<hash->elements_size;i++){
    hash_element_t *element = hash->elements[i];
    while(element!=NULL){
      hash_element_t *element_copy = copy_element(element);

      put2(ret, element->key, element->i, element_copy);
        
      element=element->next;
    }
  }

  return ret;
}
Esempio n. 5
0
int main(int argv,char *argc[]){
    if(argv<2){
        PFS("the parameter error");
        exit(-1);
    }
    //读取文件
    FILE * fp = fopen(argc[1],"r");
    if(fp==NULL){
        PFS("open the file error");
        exit(-2);
    }
    int cur_pointer=0;    //临时字符的位置游标
    int ch=0;                   //当前读取的字符
    char temp[100];             //临时字符存放
    int status=0;                       //状态分四种 0为空白 1为字符 2为数字 3为其他字符
    int status__=0;                      //当status为3时 还细分多字符操作符和单字符操作符
    void *elements[1000];               //存放各元素的主字符串指针数组(token值)
    int i=0;                                            //主字符串指针数组和syn值数组的当前索引(两数组同步)
    int syn[1000];                              //syn值数组
    char *keys[9] = {"if","else","do","while","for","int","double","float","short"};
                                                           //系统保留关键词数组
    while((ch=fgetc(fp)) != '#'){
        if(ch==' '){
            //状态变化 临时字符串以' \0 '结尾
            if((status == 1) ||(status == 2)){
                temp[cur_pointer] = '\0';
                //结尾后位置归0 将字符串拷贝到主字符串数组作永久保存
                cur_pointer = 0;
                //拷贝字符串 从临时到主
                copy_element(elements,i,temp,status,syn,keys);
                i++;
            }
            status=0;
            continue;
            //如果是字母 可能是变量名、函数名或保留关键字
        } else if((ch>'a' && ch<'z') || (ch>'A' && ch<'Z')){
            if(status == 2){
                temp[cur_pointer] = '\0';
                //位置归0
                cur_pointer = 0;
                //拷贝字符串 从临时到主
                copy_element(elements,i,temp,2,syn,keys);
                i++;
            }
            status=1;
            temp[cur_pointer++] = ch;
        } else if(ch>'0' && ch<'9'){
            if(status == 1){
                temp[cur_pointer] = '\0';
                cur_pointer = 0;
                //拷贝字符串 从临时到主
                copy_element(elements,i,temp,1,syn,keys);
                i++;
            }
            status = 2;
            temp[cur_pointer++] = ch;
        } else {
            //第三种字符就直接存入主字符串数组 不放入临时字符
            if((status == 1) || (status == 2)){
                temp[cur_pointer] = '\0';
                cur_pointer = 0;
                //拷贝字符串 从临时到主
                copy_element(elements,i,temp,status,syn,keys);
                i++;
            }
            status = 3;
            switch(ch){
                case '<':
                    status__=24;
                    elements[i] = "<";
                    syn[i] = 24;
                    i++;
                    break;
                case '>':
                    if(status__==24){
                        //操作符匹配结束 status__置0
                        status__ = 0;
                        elements[--i] = "<>";
                        syn[i] = 19;
                    } else {
                        elements[i] = ">";
                        syn[i] = 23;
                        status__ = 23;
                    }
                    i++;
                    break;
                case '=':
                    if(status__ == 22){
                        status__ = 0;
                        elements[--i] = "==";
                        syn[i] = 18;
                    } else if(status__ == 23){
                        status__ = 0;
                        elements[--i] = ">=";
                        syn[i] = 21;
                    }else if(status__ == 24){
                        status__ = 0;
                        elements[--i] = "<=";
                        syn[i] = 20;
                    } else {
                        status__ = 22;
                        elements[i] = "=";
                        syn[i] = 22;
                    }
                    i++;
                    break;
                case '+':
                    elements[i] = "+";
                    syn[i] = 12;
                    break;
                case '-':
                    elements[i] = "-";
                    syn[i] = 13;
                    break;
                case '*':
                    elements[i] = "*";
                    syn[i] = 14;
                    break;
                case '/':
                    elements[i] = "/";
                    syn[i] = 15;
                    break;
                case '?':
                    elements[i] = "?";
                    syn[i] = 16;
                    break;
                case ':':
                    elements[i] = ":";
                    syn[i] = 17;
                    break;
                case ';':
                    elements[i] = ";";
                    syn[i] = 25;
                    break;
            }
        }
    }
    
    //test
    int m=0;
    for(m=0;m<i;m++){
        printf("%s","(");
        printf("%s",elements[m]);
        printf("%s",",");
        printf("%d",syn[m]);
        printf("%s",")\n");
    }
}