Unverified Commit 0356c06f authored by Ming Deng's avatar Ming Deng Committed by GitHub

Dubbo2.7.5: Add Page and Prioritized interface (#26)

* Add Page Support

* add comment

* Add Comment

* README.md

* Fix review comment

* fix review

* Fix review

* Add priority definition

* Add comments

* Fix review
parent 36312663
......@@ -24,13 +24,13 @@ A go sdk for [Apache Dubbo-go](github.com/apache/dubbo-go).
## math
* Decimal
## runtime
* GoSafely
> Using `go` in a safe way.
* GoUnterminated
> Run a goroutine in a safe way whose task is long live as the whole process life time.
## runtime
* GoSafely
> Using `go` in a safe way.
* GoUnterminated
> Run a goroutine in a safe way whose task is long live as the whole process life time.
## sync
......@@ -45,3 +45,7 @@ A go sdk for [Apache Dubbo-go](github.com/apache/dubbo-go).
Timer optimization through time-wheel.
## page
Page for pagination. It contains the most common functions like offset, pagesize.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package gxpage
// Page is the default implementation of Page interface
type Page struct {
requestOffset int
pageSize int
totalSize int
data []interface{}
totalPages int
hasNext bool
}
// GetOffSet will return the offset
func (d *Page) GetOffset() int {
return d.requestOffset
}
// GetPageSize will return the page size
func (d *Page) GetPageSize() int {
return d.pageSize
}
// GetTotalPages will return the number of total pages
func (d *Page) GetTotalPages() int {
return d.totalPages
}
// GetData will return the data
func (d *Page) GetData() []interface{} {
return d.data
}
// GetDataSize will return the size of data.
// it's len(GetData())
func (d *Page) GetDataSize() int {
return len(d.GetData())
}
// HasNext will return whether has next page
func (d *Page) HasNext() bool {
return d.hasNext
}
// HasData will return whether this page has data.
func (d *Page) HasData() bool {
return d.GetDataSize() > 0
}
// New will create an instance
func New(requestOffset int, pageSize int,
data []interface{}, totalSize int) *Page {
remain := totalSize % pageSize
totalPages := totalSize / pageSize
if remain > 0 {
totalPages++
}
hasNext := totalSize-requestOffset-pageSize > 0
return &Page{
requestOffset: requestOffset,
pageSize: pageSize,
data: data,
totalSize: totalSize,
totalPages: totalPages,
hasNext: hasNext,
}
}
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package gxpage
import (
"testing"
)
import (
"github.com/stretchr/testify/assert"
)
func TestNewDefaultPage(t *testing.T) {
data := make([]interface{}, 10)
page := New(121, 10, data, 499)
assert.Equal(t, 10, page.GetDataSize())
assert.Equal(t, 121, page.GetOffset())
assert.Equal(t, 10, page.GetPageSize())
assert.Equal(t, 50, page.GetTotalPages())
assert.Equal(t, data, page.GetData())
assert.True(t, page.HasNext())
assert.True(t, page.HasData())
page = New(492, 10, data, 499)
assert.False(t, page.HasNext())
}
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package gxpage
// Pager is the abstraction for pagination usage.
type Pager interface {
// GetOffset will return the offset
GetOffset() int
// GetPageSize will return the page size
GetPageSize() int
// GetTotalPages will return the number of total pages
GetTotalPages() int
// GetData will return the data
GetData() []interface{}
// GetDataSize will return the size of data.
// Usually it's len(GetData())
GetDataSize() int
// HasNext will return whether has next page
HasNext() bool
// HasData will return whether this page has data.
HasData() bool
}
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package gxsort
// Prioritizer is the abstraction of priority.
type Prioritizer interface {
// GetPriority will return the priority
GetPriority() int
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment