-StorageN11::StorageN11(StorageModelPtr model, const char* name, xbt_dict_t properties,
- lmm_system_t maxminSystem, double bread, double bwrite, double bconnection,
- const char* type_id, char *content_name, char *content_type, sg_size_t size)
- : Storage(model, name, properties,
- maxminSystem, bread, bwrite, bconnection, type_id, content_name, content_type, size) {
- XBT_DEBUG("Create resource with Bconnection '%f' Bread '%f' Bwrite '%f' and Size '%llu'", bconnection, bread, bwrite, size);
-}
-
-StorageActionPtr StorageN11::ls(const char* path)
-{
- StorageActionPtr action = new StorageN11Action(getModel(), 0, getState() != SURF_RESOURCE_ON, this, LS);
-
- action->p_lsDict = NULL;
- xbt_dict_t ls_dict = xbt_dict_new_homogeneous(xbt_free);
-
- char* key;
- sg_size_t size = 0;
- xbt_dict_cursor_t cursor = NULL;
-
- xbt_dynar_t dyn = NULL;
- char* file = NULL;
-
- // for each file in the storage content
- xbt_dict_foreach(p_content,cursor,key,size){
- // Search if file start with the prefix 'path'
- if(xbt_str_start_with(key,path)){
- file = &key[strlen(path)];
-
- // Split file with '/'
- dyn = xbt_str_split(file,"/");
- file = xbt_dynar_get_as(dyn,0,char*);
-
- // file
- if(xbt_dynar_length(dyn) == 1){
- sg_size_t *psize = xbt_new(sg_size_t, 1);
- *psize=size;
- xbt_dict_set(ls_dict, file, psize, NULL);
- }
- // Directory
- else
- {
- // if directory does not exist yet in the dictionary
- if(!xbt_dict_get_or_null(ls_dict,file))
- xbt_dict_set(ls_dict,file,NULL,NULL);
- }
- xbt_dynar_free(&dyn);
- }
- }
-
- action->p_lsDict = ls_dict;
- return action;
-}
-
-StorageActionPtr StorageN11::open(const char* mount, const char* path)
-{
- XBT_DEBUG("\tOpen file '%s'",path);
- sg_size_t size, *psize;
- psize = (sg_size_t*) xbt_dict_get_or_null(p_content, path);
- // if file does not exist create an empty file
- if(psize)
- size = *psize;
- else {
- psize = xbt_new(sg_size_t,1);
- size = 0;
- *psize = size;
- xbt_dict_set(p_content, path, psize, NULL);
- XBT_DEBUG("File '%s' was not found, file created.",path);
- }
- surf_file_t file = xbt_new0(s_surf_file_t,1);
- file->name = xbt_strdup(path);
- file->size = size;
- file->mount = xbt_strdup(mount);
- file->current_position = 0;
-
- StorageActionPtr action = new StorageN11Action(getModel(), 0, getState() != SURF_RESOURCE_ON, this, OPEN);
- action->p_file = file;
- return action;
-}
-
-StorageActionPtr StorageN11::close(surf_file_t fd)
-{
- char *filename = fd->name;
- XBT_DEBUG("\tClose file '%s' size '%llu'", filename, fd->size);
- // unref write actions from storage
- void *_write_action;
- StorageActionPtr write_action;
- unsigned int i;
- xbt_dynar_foreach(p_writeActions, i, _write_action) {
- write_action = static_cast<StorageActionPtr>(static_cast<ActionPtr>(_write_action));
- if ((write_action->p_file) == fd) {
- xbt_dynar_cursor_rm(p_writeActions, &i);
- write_action->unref();
- }
- }
- free(fd->name);
- free(fd->mount);
- xbt_free(fd);
- StorageActionPtr action = new StorageN11Action(getModel(), 0, getState() != SURF_RESOURCE_ON, this, CLOSE);
- return action;
-}
-
-StorageActionPtr StorageN11::read(surf_file_t fd, sg_size_t size)