BTRFS: Reimplement TreeIterator, add some error checks and remove redundancies.
[haiku.git] / src / libs / alm / SharedSolver.h
blob3d397fa42733dd116d244a78ff40ef48d5b0f2fc
1 /*
2 * Copyright 2012, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5 #ifndef _SHARED_SOLVER_H
6 #define _SHARED_SOLVER_H
9 #include <set>
11 #include <Archivable.h>
12 #include <LayoutContext.h>
13 #include <ObjectList.h>
14 #include <Referenceable.h>
16 #include "LinearSpec.h"
19 class BMessage;
21 namespace BALM {
22 class BALMLayout;
23 class Area;
26 using BALM::BALMLayout;
27 using BALM::Area;
30 namespace BPrivate {
33 class SharedSolver : BLayoutContextListener, public BReferenceable,
34 public BArchivable {
35 public:
36 SharedSolver(BMessage* archive);
37 SharedSolver();
38 ~SharedSolver();
40 void Invalidate(bool children);
42 LinearSpec* Solver() const;
43 ResultType Result();
45 void RegisterLayout(BALMLayout* layout);
46 void LayoutLeaving(const BALMLayout* layout);
48 ResultType ValidateMinSize();
49 ResultType ValidateMaxSize();
50 ResultType ValidatePreferredSize();
51 ResultType ValidateLayout(BLayoutContext* context);
53 status_t AddFriendReferences(const BALMLayout* layout,
54 BMessage* archive, const char* field);
56 status_t Archive(BMessage* archive, bool deep) const;
57 status_t AllArchived(BMessage* archive) const;
58 status_t AllUnarchived(const BMessage* archive);
60 static BArchivable* Instantiate(BMessage* archive);
62 private:
63 struct MinSizeValidator;
64 struct MaxSizeValidator;
65 struct PreferredSizeValidator;
67 friend struct MinSizeValidator;
68 friend struct MaxSizeValidator;
69 friend struct PreferredSizeValidator;
72 static void _AddConstraintsToSet(Area* area,
73 std::set<const Constraint*>& constraints);
74 static status_t _AddConstraintToArchive(Constraint* constraint,
75 BMessage* archive);
76 status_t _InstantiateConstraint(const void* rawData,
77 ssize_t numBytes, BUnarchiver& unarchiver);
79 void SetMaxSize(BALM::BALMLayout* layout,
80 const BSize& max);
81 void SetMinSize(BALM::BALMLayout* layout,
82 const BSize& min);
83 void SetPreferredSize(BALM::BALMLayout* layout,
84 const BSize& preferred);
86 virtual void LayoutContextLeft(BLayoutContext* context);
88 void _UpdateConstraints();
89 void _SetContext(BLayoutContext* context);
90 bool _IsMinSet();
91 bool _IsMaxSet();
92 void _ValidateConstraints();
94 template <class Validator>
95 void _Validate(bool& isValid, ResultType& result);
98 bool fConstraintsValid;
99 bool fMinValid;
100 bool fMaxValid;
101 bool fPreferredValid;
102 bool fLayoutValid;
104 BLayoutContext* fLayoutContext;
105 BObjectList<BALM::BALMLayout> fLayouts;
106 LinearSpec fLinearSpec;
108 ResultType fMinResult;
109 ResultType fMaxResult;
110 ResultType fPreferredResult;
111 ResultType fLayoutResult;
118 using BPrivate::SharedSolver;
121 #endif