Skip to content

logo

Title: Eco.List1 Software Component Specification

USPD: US.ECO.00029-01 90
Component Name: Eco.List1
Short Description (max 300 char.): реализует структуру данных «List” (Список)
Component Use Category: MATH_ALGORITHMS
Component Type: UTILITY
CID: 53884AFC93C448ECAA929C8D3A562281
Marketplace URL: https://ecoos.dev/product/1ff4db73-ffd3-4d27-a520-af72ca68f3a2
Status: Релиз
Modified Date: October 12, 2025
Version: 1.0
Tags: Data structure, List, Collection, Set


АвторыКомпания
Владимир БашевПИРФ

Table of Contents

1. Обзор

1.1. Введение

1.2. Примечание

1.3. Ссылки

2. Компонент Eco.List1

3. IEcoList1 Interface

3.1. Интерфейс IEcoList1, описание на ECO IDL

3.1.1. Функция Count

3.1.2. Функция Item

3.1.3. Функция Add

3.1.4. Функция IndexOf

3.1.5. Функция InsertAt

3.1.6. Функция Remove

3.1.7. Функция RemoveAt

3.1.8. Функция Clear

4. Коды ошибок

Приложение А: Образцы кода и обучающие программы

1. Обзор

Данный документ описывает требования к реализации компонента Eco.List1 (Компонент список).

1.1. Введение

Описание.

1.2. Примечание

  • Ключевые слова в документе

1.3. Ссылки

Данный параграф содержит ссылки компонент в маркетплейсе и на другую информацию, помогающую понять данный документ:
Доступен по: https://ecoos.dev/product/1ff4db73-ffd3-4d27-a520-af72ca68f3a2

2. Компонент Eco.List1

Компонент списка представляет собой последовательный список, который разрешает эффективные вставки и удаления в любом расположении в последовательности.
Компонент, имеет следующие описание:

3. IEcoList1 Interface

3.1. Интерфейс IEcoList1, описание на ECO IDL

cpp
import "IEcoBase1.h"  
[  
object,  
uguid(5AADBCB4-846C-4576-827B-287B5E67A152),  
]  
interface IEcoList1 : IEcoUnknown {  
  
uint32_t	Count	();   
	  
voidptr_t	Item	([in] void* value1,	[in] void* value2);  
	  
uint32_t	Add	([in] void* value1,	[in] void* value2);  
	  
uint32_t	IndexOf	([in] void* value1,	[in] void* value2);  
	  
void	InsertAt	([in] uint32_t index,	[in] voidptr_t value);  
	  
void	Remove	([in] voidptr_t value);   
	  
void	RemoveAt	([in] uint32_t index);   
	  
void	Clear	();   
  
}

3.1.1. Функция Count

Функция возвращает количество элементов списка.

3.1.2. Функция Item

Функция возвращает элемент списка по индексу.

3.1.3. Функция Add

Функция добавляет элемент в конец списка и возвращает его индекс.

3.1.4. Функция IndexOf

Функция возвращает индекс элемента в списке.

3.1.5. Функция InsertAt

Функция вставляет элемент по указанному индексу.

3.1.6. Функция Remove

Функция удаляет элемент из списка.

3.1.7. Функция RemoveAt

Функция удаляет элемент по индексу.

3.1.8. Функция Clear

Функция очищает список элементов.


4. Коды ошибок

Следующая таблица содержит коды ошибок.

Код ошибкиЗначениеОписание
ERR_ECO_SUCCESES0x0000Выполнено успешно. Ошибок нет.
ERR_ECO_UNEXPECTED0xFFFFНепредвиденное условие.
ERR_ECO_POINTER0xFFEEБыло передано неправильное значение указателя.
ERR_ECO_NOINTERFACE0xFFEDТакой интерфейс не поддерживается.
ERR_ECO_COMPONENT_NOTFOUND0xFFE9Компонент не найден.

Приложение А: Образцы кода и обучающие программы

cpp
/*  
 * <кодировка символов>  
 *   Cyrillic (UTF-8 with signature) - Codepage 65001  
 * </кодировка символов>  
 *  
 * <сводка>  
 *   EcoList1  
 * </сводка>  
 *  
 * <описание>  
 *   Данный исходный файл является точкой входа  
 * </описание>  
 *  
 * <автор>  
 *   Copyright (c) 2018 Vladimir Bashev. All rights reserved.  
 * </автор>  
 *  
 */  
  
  
/* Eco OS */  
#include "IEcoSystem1.h"  
#include "IdEcoMemoryManager1.h"  
#include "IEcoInterfaceBus1.h"  
#include "IdEcoList1.h"  
#include "IEcoError1.h"  
  
/* Глобальный указатель на системный интерфейс */  
IEcoSystem1* g_pISys = 0;  
  
/*  
 *  
 * <сводка>  
 *   Функция EcoMain  
 * </сводка>  
 *  
 * <описание>  
 *   Функция EcoMain - точка входа  
 * </описание>  
 *  
 */  
int16_t EcoMain(IEcoUnknown* pIUnk) {  
    int16_t result = -1;  
    /* Указатель на интерфейс работы с системной интерфейсной шиной */  
    IEcoInterfaceBus1* pIBus = 0;  
    IEcoError1* pIErr = 0;  
    /* Указатель на интерфейс работы с памятью */  
    IEcoMemoryAllocator1* pIMem = 0;  
    char_t ptrErrMessage[100] = {0};  
    uint16_t iErrSize = 100;  
    char_t* ptrStr = 0;  
    char_t* pszStr1 = "Test String 1";  
    char_t* pszStr2 = "Test String 2";  
    /* Указатель на тестируемый интерфейс */  
    IEcoList1* pIList = 0;  
    uint32_t iCount = 0;  
    uint32_t iIndex = 0;  
  
    /* Проверка и создание системного интрефейса */  
    if (g_pISys == 0) {  
        result = pIUnk->pVTbl->QueryInterface(pIUnk, &GID_IEcoSystem1, (void **)&g_pISys);  
        if (result != 0 && g_pISys == 0) {  
        /* Освобождение системного интерфейса в случае ошибки */  
            goto Release;  
        }  
    }  
  
    /* Получение интерфейса для работы с интерфейсной шиной */  
    result = g_pISys->pVTbl->QueryInterface(g_pISys, &IID_IEcoInterfaceBus1, (void **)&pIBus);  
    if (result != 0 || pIBus == 0) {  
        /* Освобождение в случае ошибки */  
        goto Release;  
    }  
  
    /* Получение интерфейса обработки ошибок */  
    result = pIBus->pVTbl->QueryInterface(pIBus, &IID_IEcoError1, (void **)&pIErr);  
    if (result != 0 || pIErr == 0) {  
        /* Освобождение в случае ошибки */  
        goto Release;  
    }  
    pIErr->pVTbl->get_Description(pIErr, (void*)ptrErrMessage, &iErrSize);  
  
#ifdef ECO_LIB  
    /* Регистрация статического компонента для работы со списком */  
    result = pIBus->pVTbl->RegisterComponent(pIBus, &CID_EcoList1, (IEcoUnknown*)GetIEcoComponentFactoryPtr_53884AFC93C448ECAA929C8D3A562281);  
    if (result != 0 ) {  
        /* Освобождение в случае ошибки */  
        goto Release;  
    }  
#endif  
  
    /* Получение интерфейса управления памятью */  
    result = pIBus->pVTbl->QueryComponent(pIBus, &CID_EcoMemoryManager1, 0, &IID_IEcoMemoryAllocator1, (void**) &pIMem);  
  
    /* Проверка */  
    if (result != 0 || pIMem == 0) {  
        /* Освобождение системного интерфейса в случае ошибки */  
        goto Release;  
    }  
  
    /* Получение тестируемого интерфейса */  
    result = pIBus->pVTbl->QueryComponent(pIBus, &CID_EcoList1, 0, &IID_IEcoList1, (void**) &pIList);  
    if (result != 0 || pIList == 0) {  
        iErrSize = 100;  
        pIErr->pVTbl->get_Description(pIErr, (void*)ptrErrMessage, &iErrSize);  
        /* Освобождение интерфейсов в случае ошибки */  
        goto Release;  
    }  
  
    /* Формирование саиска */  
    iIndex = pIList->pVTbl->Add(pIList, pszStr1);  
    iIndex = pIList->pVTbl->Add(pIList, pszStr2);  
    iCount = pIList->pVTbl->Count(pIList);  
    /* Проверка количества элементов списка */  
    if (iCount == 2) {  
        for (iIndex = 0; iIndex < iCount; iIndex++) {  
            ptrStr = (char_t*)pIList->pVTbl->Item(pIList, iIndex);  
        }  
        /* Удаление элемента по индексу */  
        pIList->pVTbl->RemoveAt(pIList, 0);  
        /* Удаление элемента по указателю */  
        pIList->pVTbl->Remove(pIList, pszStr2);  
    }  
    iCount = pIList->pVTbl->Count(pIList);  
    /* Формирование списка */  
    //iIndex = pIList->pVTbl->Add(pIList, pszStr1);  
    pIList->pVTbl->InsertAt(pIList, 0, pszStr1);  
    pIList->pVTbl->InsertAt(pIList, 0, pszStr2);  
    iIndex = pIList->pVTbl->IndexOf(pIList, pszStr1);  
    /* удаление всех элементов из списка */  
    pIList->pVTbl->Clear(pIList);  
    iCount = pIList->pVTbl->Count(pIList);  
  
Release:  
  
    /* Освобождение интерфейса для работы с интерфейсной шиной */  
    if (pIBus != 0) {  
        pIBus->pVTbl->Release(pIBus);  
    }  
  
    /* Освобождение интерфейса работы с памятью */  
    if (pIMem != 0) {  
        pIMem->pVTbl->Release(pIMem);  
    }  
  
    /* Освобождение тестируемого интерфейса */  
    if (pIList != 0) {  
        pIList->pVTbl->Release(pIList);  
    }  
  
    /* Освобождение системного интерфейса */  
    if (g_pISys != 0) {  
        g_pISys->pVTbl->Release(g_pISys);  
    }  
  
    return result;  
}