1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _PACKAGE__HPKG__V1__PRIVATE__HAIKU_PACKAGE_H_ 6#define _PACKAGE__HPKG__V1__PRIVATE__HAIKU_PACKAGE_H_ 7 8 9#include <SupportDefs.h> 10 11#include <package/hpkg/HPKGDefs.h> 12 13 14namespace BPackageKit { 15 16namespace BHPKG { 17 18namespace V1 { 19 20namespace BPrivate { 21 22 23// header 24struct hpkg_header { 25 uint32 magic; // "hpkg" 26 uint16 header_size; 27 uint16 version; 28 uint64 total_size; 29 30 // package attributes section 31 uint32 attributes_compression; 32 uint32 attributes_length_compressed; 33 uint32 attributes_length_uncompressed; 34 uint32 attributes_strings_length; 35 uint32 attributes_strings_count; 36 37 // TOC section 38 uint32 toc_compression; 39 uint64 toc_length_compressed; 40 uint64 toc_length_uncompressed; 41 uint64 toc_strings_length; 42 uint64 toc_strings_count; 43}; 44 45 46// header 47struct hpkg_repo_header { 48 uint32 magic; // "hpkr" 49 uint16 header_size; 50 uint16 version; 51 uint64 total_size; 52 53 // repository info section 54 uint32 info_compression; 55 uint32 info_length_compressed; 56 uint32 info_length_uncompressed; 57 58 // package attributes section 59 uint32 packages_compression; 60 uint64 packages_length_compressed; 61 uint64 packages_length_uncompressed; 62 uint64 packages_strings_length; 63 uint64 packages_strings_count; 64}; 65 66 67// attribute tag arithmetics 68// (using 6 bits for id, 3 for type, 1 for hasChildren and 2 for encoding) 69static inline uint16 70compose_attribute_tag(uint16 id, uint16 type, uint16 encoding, bool hasChildren) 71{ 72 return ((encoding << 10) | (uint16(hasChildren ? 1 : 0) << 9) | (type << 6) 73 | id) 74 + 1; 75} 76 77 78static inline uint16 79attribute_tag_encoding(uint16 tag) 80{ 81 return ((tag - 1) >> 10) & 0x3; 82} 83 84 85static inline bool 86attribute_tag_has_children(uint16 tag) 87{ 88 return (((tag - 1) >> 9) & 0x1) != 0; 89} 90 91 92static inline uint16 93attribute_tag_type(uint16 tag) 94{ 95 return ((tag - 1) >> 6) & 0x7; 96} 97 98 99static inline uint16 100attribute_tag_id(uint16 tag) 101{ 102 return (tag - 1) & 0x3f; 103} 104 105 106} // namespace BPrivate 107 108} // namespace V1 109 110} // namespace BHPKG 111 112} // namespace BPackageKit 113 114 115#endif // _PACKAGE__HPKG__V1__PRIVATE__HAIKU_PACKAGE_H_ 116