Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> исключающие маски 
:(
    Опции темы
zss
Дата 4.5.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



J0ker, и как их пользовать ?
PM MAIL ICQ   Вверх
J0ker
Дата 4.5.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(zss @ 4.5.2009,  19:04)
J0ker, и как их пользовать ?

Код

enum MASKS
{
    UNKNOWN = 0x00000000,
    OPEN         = 0x00000001,
    ARCHIVE    = 0x10000000,
    ZIP             = 0x30000000,
    RAR            = 0x50000000,
    ZIP_RAR     = 0x70000000
}

bool is_open(unsigned int f)
{
    return (f & OPEN) != 0;
}

bool is_archive(unsigned int f)
{
    return (f & ARCHIVE) != 0;
}

bool is_zip(unsigned int f)
{
    return (f & ZIP) == ZIP;
}

bool is_rar(unsigned int f)
{
    return (f & RAR) == RAR;
}

bool is_zip_rar(unsigned int f)
{
    return (f & ZIP_RAR) == ZIP_RAR;
}

unsigned int set_open(unsigned int &f)
{
    return f &= OPEN;
}

unsigned int set_archive(unsigned int &f)
{
    return f &= ARCHIVE;
}

unsigned int set_zip(unsigned int &f)
{
    return f &= ZIP;
}

unsigned int set_rar(unsigned int &f)
{
    return f &= RAR;
}

unsigned int set_zip_rar(unsigned int &f)
{
    return f &= ZIP_RAR;
}

//====================================

unsigned int f = UNKNOWN;

set_zip(f);

if(is_archive(f))
    cout << "archive" << endl;



Это сообщение отредактировал(а) J0ker - 4.5.2009, 19:28


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 4.5.2009, 19:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



zss, ловите идею, может пригодится :
Код

#include <iostream>

struct Type
{
    struct TMeta
    {
        int Mask;
        int XMask;
    };
    virtual TMeta Meta() const =0;
};

struct AType : Type
{
      virtual TMeta Meta() const  { TMeta Meta ={1<<0, 1<<1 | 1<<2 }; return Meta; };
};

struct BType : Type
{
      virtual TMeta Meta() const  { TMeta Meta ={1<<1, 1<<0 }; return Meta; };
};

struct CType : Type
{
      virtual TMeta Meta() const  { TMeta Meta ={1<<2, 1<<0}; return Meta; };
};

class TypeSet
{
    public:
        TypeSet () : set (0) {}

        void Add (const Type& type)
        {
              set &= ~type.Meta().XMask;
              set |=  type.Meta().Mask;
        }
        bool Has (const Type& type)
        {
            return set & type.Meta().Mask;
        }

    private:
        int set;
};

void Test (TypeSet& set, const Type& type)
{
    set.Add (type);
    std::cout <<set.Has(AType())<<" "<<set.Has(BType())<<" "<<set.Has(CType())<<" " << std::endl;
}

int main ()
{
     TypeSet set;

     Test (set, AType());
     Test (set, BType());
     Test (set, CType());
     Test (set, AType());


    system ("pause");
    return 0;
}




блок с 13й по 26ю строку можно записать примерно так :
Код

#define DECLARE_TYPE(name, Mask, XMask)  struct name : Type{ virtual TMeta Meta() const   { return (TMeta){ Mask, XMask }; } };

 DECLARE_TYPE (AType, 1<<0,  1<<1 | 1<<2 )
 DECLARE_TYPE (BType, 1<<1,  1<<0 )
 DECLARE_TYPE (CType, 1<<2,  1<<0 )

#undef DECLARE_TYPE 

подправлено забытое, в связи с  замечанием J0ker'а

Это сообщение отредактировал(а) mes - 4.5.2009, 21:22


--------------------
PM MAIL WWW   Вверх
J0ker
Дата 4.5.2009, 20:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



6: #undef DECLARE_TYPE


--------------------
user posted image
PM MAIL   Вверх
zss
Дата 5.5.2009, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



J0ker, идея хорошая, только у тебя нет исключающего архива.
PM MAIL ICQ   Вверх
math64
Дата 5.5.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Код

struct Type
{
   int Mask;
   int XMask;
};
const Type AType = { 1<<0,  1<<1 | 1<<2 };
const Type BType = { 1<<1,  1<<0 };
const Type CType = { 1<<2,  1<<0 };

с соответствующими упрощениями  TypeSet.
PM   Вверх
J0ker
Дата 5.5.2009, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(zss @ 5.5.2009,  07:02)
J0ker, идея хорошая, только у тебя нет исключающего архива.

то есть?
все комбинации в моем варианте заведомо верны
или вы это имели ввиду:
Код

enum MASKS
{
    UNKNOWN = 0x00000000,
    OPEN         = 0x00000001,
    ARCHIVE    = 0x10000000,
    ZIP             = 0x30000000,
    RAR            = 0x50000000,
    ZIP_RAR     = 0x70000000,
    ARCHIVE_FLAGS = 0x70000000
}

bool is_archive_unknown(unsigned int f)
{
    return (f & ARCHIVE_FLAGS) == ARCHIVE;
}



Это сообщение отредактировал(а) J0ker - 5.5.2009, 09:09


--------------------
user posted image
PM MAIL   Вверх
Static
Дата 5.5.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 6.11.2008

Репутация: 1
Всего: 2



Позвольте вопрос...
Код

enum MASKS
{
    UNKNOWN = some_mask1,
    OPEN         = some_mask2,
    ARCHIVE    = some_mask3,   //а вот это действительно нужно?
    ZIP             = some_mask4,
    RAR            = some_mask5,
    XXX     = some_mask6,
}


Ведь если файл zip, rar или unknown_archive - он ведь все равно архив...

Это сообщение отредактировал(а) Static - 5.5.2009, 14:21
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
zss
Дата 5.5.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



Цитата(J0ker @  5.5.2009,  09:02 Найти цитируемый пост)
то есть?

архив xxx, который не может существовать с zip и rar
PM MAIL ICQ   Вверх
J0ker
Дата 5.5.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(zss @ 5.5.2009,  14:31)
Цитата(J0ker @  5.5.2009,  09:02 Найти цитируемый пост)
то есть?

архив xxx, который не может существовать с zip и rar

ну как-же нет
ARCHIVE


--------------------
user posted image
PM MAIL   Вверх
zss
Дата 5.5.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



Цитата(J0ker @  5.5.2009,  16:10 Найти цитируемый пост)
ну как-же нет
ARCHIVE 

нет - ARCHIVE говорит что он закрыт, но возможно неизвестным архиватором - это не тип архива
а тип - автоматически должен подразумевать архивацию
PM MAIL ICQ   Вверх
J0ker
Дата 5.5.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(zss @  5.5.2009,  16:31 Найти цитируемый пост)
ARCHIVE говорит что он закрыт, но возможно неизвестным архиватором 

ARCHIVE с учетом не выставленных ZIP и RAR говорит об этом совершенно прямолинейно



--------------------
user posted image
PM MAIL   Вверх
zss
Дата 5.5.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



Цитата(J0ker @  5.5.2009,  17:01 Найти цитируемый пост)
ARCHIVE с учетом не выставленных ZIP и RAR говорит об этом совершенно прямолинейно

это понятно. нужно сто 3 архив xxx исключал их. весь вопрос именно в этом
PM MAIL ICQ   Вверх
J0ker
Дата 5.5.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(zss @  5.5.2009,  17:32 Найти цитируемый пост)
это понятно. нужно сто 3 архив xxx исключал их. весь вопрос именно в этом 

Код

enum MASKS
{
    UNKNOWN = 0x00000000,
    OPEN         = 0x00000001,
    ARCHIVE    = 0x10000000,
    ZIP             = 0x30000000,
    RAR            = 0x50000000,
    ZIP_RAR     = 0x70000000,
    XXX            = 0xF0000000,
    ARCHIVE_FLAGS = 0xF0000000
}



--------------------
user posted image
PM MAIL   Вверх
mes
Дата 5.5.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



J0ker,  
Цитата(zss @  1.5.2009,  16:06 Найти цитируемый пост)
Цитата

Наверно имелось ввиду, что при добавлении битовой константы к набору(т.е при операции OR), исключающие биты должны обнулиться ?

типа того smile 






--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1255 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.